Fix some more of size_t and unsigned ints in DALi API
[platform/core/uifw/dali-core.git] / dali / internal / event / rendering / geometry-impl.cpp
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/internal/event/rendering/geometry-impl.h> // Dali::Internal::Geometry
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/object/type-registry.h>
23 #include <dali/internal/event/common/stage-impl.h>
24 #include <dali/internal/update/manager/update-manager.h>
25
26 namespace Dali
27 {
28 namespace Internal
29 {
30
31 GeometryPtr Geometry::New()
32 {
33   GeometryPtr geometry( new Geometry() );
34   geometry->Initialize();
35   return geometry;
36 }
37
38 uint32_t Geometry::AddVertexBuffer( PropertyBuffer& vertexBuffer )
39 {
40   mVertexBuffers.push_back( &vertexBuffer );
41   SceneGraph::AttachVertexBufferMessage( mEventThreadServices.GetUpdateManager(), *mRenderObject, *vertexBuffer.GetRenderObject() );
42   return static_cast<uint32_t>( mVertexBuffers.size() - 1u );
43 }
44
45 uint32_t Geometry::GetNumberOfVertexBuffers() const
46 {
47   return static_cast<uint32_t>( mVertexBuffers.size() );
48 }
49
50 void Geometry::RemoveVertexBuffer( uint32_t index )
51 {
52   const Render::PropertyBuffer& renderPropertyBuffer = static_cast<const Render::PropertyBuffer&>( *(mVertexBuffers[index]->GetRenderObject()) );
53   SceneGraph::RemoveVertexBufferMessage( mEventThreadServices.GetUpdateManager(), *mRenderObject, renderPropertyBuffer );
54
55   mVertexBuffers.erase( mVertexBuffers.begin() + index );
56 }
57
58 void Geometry::SetIndexBuffer( const uint16_t* indices, uint32_t count )
59 {
60   Dali::Vector<uint16_t> indexData;
61   if( indices && count )
62   {
63     indexData.Resize( count );
64     std::copy( indices, indices + count, indexData.Begin() );
65   }
66
67   SceneGraph::SetIndexBufferMessage( mEventThreadServices.GetUpdateManager(), *mRenderObject, indexData );
68 }
69
70 void Geometry::SetType( Dali::Geometry::Type geometryType )
71 {
72   if( geometryType != mType )
73   {
74     SceneGraph::SetGeometryTypeMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, geometryType );
75
76     mType = geometryType;
77   }
78 }
79
80 Dali::Geometry::Type Geometry::GetType() const
81 {
82   return mType;
83 }
84
85 const Render::Geometry* Geometry::GetRenderObject() const
86 {
87   return mRenderObject;
88 }
89
90 Geometry::Geometry()
91 : mEventThreadServices( *Stage::GetCurrent() ),
92   mRenderObject( NULL ),
93   mType(Dali::Geometry::TRIANGLES)
94 {
95 }
96
97 void Geometry::Initialize()
98 {
99   mRenderObject = new Render::Geometry();
100   OwnerPointer< Render::Geometry > transferOwnership( mRenderObject );
101   AddGeometry( mEventThreadServices.GetUpdateManager(), transferOwnership );
102 }
103
104 Geometry::~Geometry()
105 {
106   if( EventThreadServices::IsCoreRunning() && mRenderObject )
107   {
108     RemoveGeometry( mEventThreadServices.GetUpdateManager(), *mRenderObject );
109   }
110 }
111
112 } // namespace Internal
113
114 } // namespace Dali