/* * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include "game-model.h" #include "game-utils.h" using namespace GameUtils; namespace { // 'MODV' tag stored in the big-endian (network) order const uint32_t MODV_TAG(0x4D4F4456); } // namespace GameModel::GameModel(const char* filename) : mUniqueId(false), mIsReady(false) { ByteArray bytes; if(!LoadFile(filename, bytes)) { return; } mHeader = *(reinterpret_cast(bytes.data())); // expect big-endian if(MODV_TAG != mHeader.tag) { // jump to little-endian variant mHeader = *(reinterpret_cast(bytes.data() + bytes.size() / 2)); } mVertexBuffer = Dali::VertexBuffer::New(Dali::Property::Map().Add("aPosition", Dali::Property::VECTOR3).Add("aNormal", Dali::Property::VECTOR3).Add("aTexCoord", Dali::Property::VECTOR2)); mVertexBuffer.SetData(bytes.data() + mHeader.dataBeginOffset, mHeader.vertexBufferSize / mHeader.vertexStride); mGeometry = Dali::Geometry::New(); mGeometry.AddVertexBuffer(mVertexBuffer); mGeometry.SetType(Dali::Geometry::TRIANGLES); mUniqueId = HashString(filename); mIsReady = true; } GameModel::~GameModel() { } Dali::Geometry& GameModel::GetGeometry() { return mGeometry; } bool GameModel::IsReady() { return mIsReady; } uint32_t GameModel::GetUniqueId() { return mUniqueId; }