2 * Copyright (c) 2021 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/update/manager/update-manager.h>
30 GeometryPtr Geometry::New()
32 GeometryPtr geometry(new Geometry());
33 geometry->Initialize();
37 uint32_t Geometry::AddVertexBuffer(VertexBuffer& vertexBuffer)
39 mVertexBuffers.push_back(&vertexBuffer);
40 SceneGraph::AttachVertexBufferMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, *vertexBuffer.GetRenderObject());
41 return static_cast<uint32_t>(mVertexBuffers.size() - 1u);
44 uint32_t Geometry::GetNumberOfVertexBuffers() const
46 return static_cast<uint32_t>(mVertexBuffers.size());
49 void Geometry::RemoveVertexBuffer(uint32_t index)
51 const Render::VertexBuffer& renderVertexBuffer = static_cast<const Render::VertexBuffer&>(*(mVertexBuffers[index]->GetRenderObject()));
52 SceneGraph::RemoveVertexBufferMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, renderVertexBuffer);
54 mVertexBuffers.erase(mVertexBuffers.begin() + index);
57 void Geometry::SetIndexBuffer(const uint16_t* indices, uint32_t count)
59 Dali::Vector<uint16_t> indexData;
62 indexData.Resize(count);
63 std::copy(indices, indices + count, indexData.Begin());
66 SceneGraph::SetIndexBufferMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, indexData);
69 void Geometry::SetType(Dali::Geometry::Type geometryType)
71 if(geometryType != mType)
73 SceneGraph::SetGeometryTypeMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, geometryType);
79 Dali::Geometry::Type Geometry::GetType() const
84 const Render::Geometry* Geometry::GetRenderObject() const
90 : mEventThreadServices(EventThreadServices::Get()),
91 mRenderObject(nullptr),
92 mType(Dali::Geometry::TRIANGLES)
96 void Geometry::Initialize()
98 mRenderObject = new Render::Geometry();
99 OwnerPointer<Render::Geometry> transferOwnership(mRenderObject);
100 AddGeometry(mEventThreadServices.GetUpdateManager(), transferOwnership);
103 Geometry::~Geometry()
105 if(EventThreadServices::IsCoreRunning() && mRenderObject)
107 RemoveGeometry(mEventThreadServices.GetUpdateManager(), *mRenderObject);
111 } // namespace Internal