2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 #include <dali/internal/event/modeling/model-impl.h>
24 #include <dali/integration-api/debug.h>
25 #include <dali/integration-api/resource-cache.h>
26 #include <dali/integration-api/platform-abstraction.h>
27 #include <dali/internal/event/common/thread-local-storage.h>
28 #include <dali/internal/event/modeling/model-factory.h>
29 #include <dali/internal/event/modeling/model-logger.h>
30 #include <dali/internal/event/modeling/model-data-impl.h>
31 #include <dali/public-api/modeling/model-animation-map.h>
33 #include <dali/internal/event/resources/resource-client.h>
34 #include <dali/internal/update/resources/resource-manager.h>
39 using Internal::ModelDataPtr;
40 using Integration::ModelResourceType;
41 using Integration::PlatformAbstraction;
48 ModelPtr Model::New(const std::string& name)
50 ModelPtr model(new Model(name));
52 model->RegisterObject();
57 Model::Model(const std::string& name)
59 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
61 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
62 mResourceClient = &tls.GetResourceClient();
64 ModelFactory& modelFactory = tls.GetModelFactory();
66 mTicket = modelFactory.Load(name);
67 mTicket->AddObserver(*this);
72 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
73 mTicket->RemoveObserver(*this);
78 void Model::ResourceLoadingFailed(const ResourceTicket& ticket)
80 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
82 mLoadingFinishedV2.Emit( Dali::Model( this ) );
85 void Model::ResourceLoadingSucceeded(const ResourceTicket& ticket)
87 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
89 // Generate resource tickets for meshes
90 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
91 ResourceManager& resourceManager = tls.GetResourceManager();
92 ModelDataPtr modelData = resourceManager.GetModelData( GetResourceId() );
93 modelData->Unpack( *mResourceClient );
95 mLoadingFinishedV2.Emit( Dali::Model( this ) );
98 void Model::ResourceUploaded(const ResourceTicket& ticket)
100 // do nothing - not a GL resource
103 void Model::ResourceSavingFailed(const ResourceTicket& ticket)
105 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
107 mSavingFinishedV2.Emit( Dali::Model( this ), false );
110 void Model::ResourceSavingSucceeded(const ResourceTicket& ticket)
112 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
114 mSavingFinishedV2.Emit( Dali::Model( this ), true );
117 ResourceId Model::GetResourceId() const
119 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
120 DALI_ASSERT_DEBUG(mTicket);
122 return mTicket->GetId();
125 /********************************************************************************
126 * Write the model data to standard output
130 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
131 ResourceManager& resourceManager = tls.GetResourceManager();
132 ModelDataPtr modelData = resourceManager.GetModelData(GetResourceId());
136 ModelLogger modelLogger(*(modelData.Get()));
137 modelLogger.mWriteVertices = false; // TODO - add a public traits class for model logger
143 fprintf(stderr, "%s: Model not loaded yet\n", __PRETTY_FUNCTION__);
145 // printf to stderr doesnt always show in browser console window
146 printf("%s: Model not loaded yet\n", __PRETTY_FUNCTION__);
151 /********************************************************************************
152 * Write the model data to a url
154 void Model::Save(const std::string& url)
156 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
157 ResourceManager& resourceManager = tls.GetResourceManager();
158 if( resourceManager.GetModelData(GetResourceId()) )
160 mResourceClient->SaveResource(mTicket, url);
164 /********************************************************************************
167 unsigned int Model::NumberOfAnimations() const
169 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
171 unsigned int numAnimations = 0;
172 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
173 ResourceManager& resourceManager = tls.GetResourceManager();
174 ModelDataPtr modelData = resourceManager.GetModelData(GetResourceId());
178 numAnimations = modelData->NumberOfAnimationMaps();
181 return numAnimations;
184 bool Model::FindAnimation(const std::string& animationName, unsigned int & animationIndex)
188 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
189 ResourceManager& resourceManager = tls.GetResourceManager();
190 ModelDataPtr modelData = resourceManager.GetModelData(GetResourceId());
194 found = modelData->FindAnimation(animationName, animationIndex);
199 /********************************************************************************
200 * Return the model data, if it's finished loading.
202 ModelDataPtr Model::GetModelData() const
204 DALI_LOG_TRACE_METHOD(Debug::Filter::gModel);
206 ThreadLocalStorage& tls = ThreadLocalStorage::Get();
207 ResourceManager& resourceManager = tls.GetResourceManager();
208 ModelDataPtr modelData = resourceManager.GetModelData(GetResourceId());
212 } // namespace Internal