2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <dali/internal/event/rendering/geometry-impl.h> // Dali::Internal::Geometry
22 #include <dali/public-api/object/type-registry.h>
24 #include <dali/internal/event/common/object-impl-helper.h> // Dali::Internal::ObjectHelper
25 #include <dali/internal/event/common/property-helper.h> // DALI_PROPERTY_TABLE_BEGIN, DALI_PROPERTY, DALI_PROPERTY_TABLE_END
26 #include <dali/internal/update/manager/update-manager.h>
37 * |name |type |writable|animatable|constraint-input|enum for index-checking|
39 DALI_PROPERTY_TABLE_BEGIN
40 DALI_PROPERTY( "geometryType", STRING, true, false, true, Dali::Geometry::Property::GEOMETRY_TYPE )
41 DALI_PROPERTY( "requiresDepthTest", BOOLEAN, true, false, true, Dali::Geometry::Property::REQUIRES_DEPTH_TEST )
42 DALI_PROPERTY_TABLE_END( DEFAULT_ACTOR_PROPERTY_START_INDEX )
44 const ObjectImplHelper<DEFAULT_PROPERTY_COUNT> GEOMETRY_IMPL = { DEFAULT_PROPERTY_DETAILS };
48 return Dali::Geometry::New();
51 TypeRegistration mType( typeid( Dali::Geometry ), typeid( Dali::Handle ), Create );
53 } // unnamed namespace
55 GeometryPtr Geometry::New()
57 GeometryPtr geometry( new Geometry() );
58 geometry->Initialize();
62 std::size_t Geometry::AddVertexBuffer( PropertyBuffer& vertexBuffer )
64 mVertexBuffers.push_back( &vertexBuffer );
65 SceneGraph::AddVertexBufferMessage( GetEventThreadServices(), *mSceneObject, *vertexBuffer.GetRenderObject() );
66 return mVertexBuffers.size() - 1u;
69 std::size_t Geometry::GetNumberOfVertexBuffers() const
71 return mVertexBuffers.size();
74 void Geometry::RemoveVertexBuffer( std::size_t index )
76 const Render::PropertyBuffer& renderPropertyBuffer = static_cast<const Render::PropertyBuffer&>( *(mVertexBuffers[index]->GetRenderObject()) );
77 SceneGraph::RemoveVertexBufferMessage( GetEventThreadServices(), *mSceneObject, renderPropertyBuffer );
79 mVertexBuffers.erase( mVertexBuffers.begin() + index );
82 void Geometry::SetIndexBuffer( PropertyBuffer& indexBuffer )
84 mIndexBuffer = &indexBuffer;
85 SceneGraph::SetIndexBufferMessage( GetEventThreadServices(), *mSceneObject, *indexBuffer.GetRenderObject() );
88 void Geometry::SetGeometryType( Dali::Geometry::GeometryType geometryType )
90 if( geometryType != mGeometryType )
92 SceneGraph::SetGeometryTypeMessage(GetEventThreadServices(),
96 mGeometryType = geometryType;
100 Dali::Geometry::GeometryType Geometry::GetGeometryType() const
102 return mGeometryType;
105 void Geometry::SetRequiresDepthTesting( bool requiresDepthTest )
107 if( requiresDepthTest != mRequiresDepthTest )
109 SceneGraph::SetGeometryRequiresDepthTestMessage(GetEventThreadServices(),
113 mRequiresDepthTest = requiresDepthTest;
117 bool Geometry::GetRequiresDepthTesting() const
119 return mRequiresDepthTest;
122 const SceneGraph::Geometry* Geometry::GetGeometrySceneObject() const
127 unsigned int Geometry::GetDefaultPropertyCount() const
129 return GEOMETRY_IMPL.GetDefaultPropertyCount();
132 void Geometry::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
134 GEOMETRY_IMPL.GetDefaultPropertyIndices( indices );
137 const char* Geometry::GetDefaultPropertyName(Property::Index index) const
139 return GEOMETRY_IMPL.GetDefaultPropertyName( index );
142 Property::Index Geometry::GetDefaultPropertyIndex( const std::string& name ) const
144 return GEOMETRY_IMPL.GetDefaultPropertyIndex( name );
147 bool Geometry::IsDefaultPropertyWritable( Property::Index index ) const
149 return GEOMETRY_IMPL.IsDefaultPropertyWritable( index );
152 bool Geometry::IsDefaultPropertyAnimatable( Property::Index index ) const
154 return GEOMETRY_IMPL.IsDefaultPropertyAnimatable( index );
157 bool Geometry::IsDefaultPropertyAConstraintInput( Property::Index index ) const
159 return GEOMETRY_IMPL.IsDefaultPropertyAConstraintInput( index );
162 Property::Type Geometry::GetDefaultPropertyType( Property::Index index ) const
164 return GEOMETRY_IMPL.GetDefaultPropertyType( index );
167 void Geometry::SetDefaultProperty( Property::Index index,
168 const Property::Value& propertyValue )
172 case Dali::Geometry::Property::GEOMETRY_TYPE :
174 Dali::Geometry::GeometryType geometryType = static_cast<Dali::Geometry::GeometryType>(propertyValue.Get<int>());
175 if( geometryType != mGeometryType )
177 SceneGraph::SetGeometryTypeMessage(GetEventThreadServices(), *mSceneObject, geometryType );
178 mGeometryType = geometryType;
182 case Dali::Geometry::Property::REQUIRES_DEPTH_TEST :
184 bool requiresDepthTest = propertyValue.Get<bool>();
185 if( requiresDepthTest != mRequiresDepthTest )
187 SceneGraph::SetGeometryRequiresDepthTestMessage(GetEventThreadServices(), *mSceneObject, requiresDepthTest);
188 mRequiresDepthTest = requiresDepthTest;
195 void Geometry::SetSceneGraphProperty( Property::Index index,
196 const PropertyMetadata& entry,
197 const Property::Value& value )
199 GEOMETRY_IMPL.SetSceneGraphProperty( GetEventThreadServices(), this, index, entry, value );
202 Property::Value Geometry::GetDefaultProperty( Property::Index index ) const
204 Property::Value value;
208 case Dali::Geometry::Property::GEOMETRY_TYPE :
212 value = mGeometryType;
216 case Dali::Geometry::Property::REQUIRES_DEPTH_TEST :
220 value = mRequiresDepthTest;
229 const SceneGraph::PropertyOwner* Geometry::GetPropertyOwner() const
234 const SceneGraph::PropertyOwner* Geometry::GetSceneObject() const
239 const SceneGraph::PropertyBase* Geometry::GetSceneObjectAnimatableProperty( Property::Index index ) const
241 const SceneGraph::PropertyBase* property = NULL;
244 property = GEOMETRY_IMPL.GetRegisteredSceneGraphProperty ( this,
245 &Geometry::FindAnimatableProperty,
246 &Geometry::FindCustomProperty,
253 const PropertyInputImpl* Geometry::GetSceneObjectInputProperty( Property::Index index ) const
255 const PropertyInputImpl* property = NULL;
259 const SceneGraph::PropertyBase* baseProperty =
260 GEOMETRY_IMPL.GetRegisteredSceneGraphProperty ( this,
261 &Geometry::FindAnimatableProperty,
262 &Geometry::FindCustomProperty,
265 property = static_cast<const PropertyInputImpl*>( baseProperty );
271 bool Geometry::OnStage() const
276 void Geometry::Connect()
281 void Geometry::Disconnect()
287 : mSceneObject( NULL ),
288 mIndexBuffer( NULL ),
289 mGeometryType(Dali::Geometry::TRIANGLES),
290 mRequiresDepthTest(false),
295 void Geometry::Initialize()
297 EventThreadServices& eventThreadServices = GetEventThreadServices();
298 SceneGraph::UpdateManager& updateManager = eventThreadServices.GetUpdateManager();
300 mSceneObject = new SceneGraph::Geometry();
301 AddMessage( updateManager, updateManager.GetGeometryOwner(), *mSceneObject );
303 eventThreadServices.RegisterObject( this );
306 Geometry::~Geometry()
308 if( EventThreadServices::IsCoreRunning() )
310 EventThreadServices& eventThreadServices = GetEventThreadServices();
311 SceneGraph::UpdateManager& updateManager = eventThreadServices.GetUpdateManager();
312 RemoveMessage( updateManager, updateManager.GetGeometryOwner(), *mSceneObject );
314 eventThreadServices.UnregisterObject( this );
319 } // namespace Internal