2 * Copyright (c) 2024 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 Render::Geometry::Uint16ContainerType indexData;
62 indexData.ResizeUninitialized(count);
63 std::copy(indices, indices + count, indexData.Begin());
66 SceneGraph::SetIndexBufferMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, indexData);
69 void Geometry::SetIndexBuffer(const uint32_t* indices, uint32_t count)
71 Render::Geometry::Uint32ContainerType indexData;
74 indexData.ResizeUninitialized(count);
75 std::copy(indices, indices + count, indexData.Begin());
78 SceneGraph::SetIndexBufferMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, indexData);
81 void Geometry::SetType(Dali::Geometry::Type geometryType)
83 if(geometryType != mType)
85 SceneGraph::SetGeometryTypeMessage(mEventThreadServices.GetUpdateManager(), *mRenderObject, geometryType);
91 Dali::Geometry::Type Geometry::GetType() const
96 const Render::Geometry* Geometry::GetRenderObject() const
102 : mEventThreadServices(EventThreadServices::Get()),
103 mRenderObject(nullptr),
104 mType(Dali::Geometry::TRIANGLES)
108 void Geometry::Initialize()
110 mRenderObject = new Render::Geometry();
111 OwnerPointer<Render::Geometry> transferOwnership(mRenderObject);
112 AddGeometry(mEventThreadServices.GetUpdateManager(), transferOwnership);
115 Geometry::~Geometry()
117 if(DALI_UNLIKELY(!Dali::Stage::IsCoreThread()))
119 DALI_LOG_ERROR("~Geometry[%p] called from non-UI thread! something unknown issue will be happened!\n", this);
122 if(DALI_LIKELY(EventThreadServices::IsCoreRunning() && mRenderObject))
124 RemoveGeometry(mEventThreadServices.GetUpdateManager(), *mRenderObject);
128 } // namespace Internal