/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
namespace
{
//Memory pool used to allocate new RenderItems. Memory used by this pool will be released when shutting down DALi
-Dali::Internal::MemoryPoolObjectAllocator<Dali::Internal::SceneGraph::RenderItem> gRenderItemPool;
+Dali::Internal::MemoryPoolObjectAllocator<Dali::Internal::SceneGraph::RenderItem>& GetRenderItemPool()
+{
+ static Dali::Internal::MemoryPoolObjectAllocator<Dali::Internal::SceneGraph::RenderItem> gRenderItemPool;
+ return gRenderItemPool;
+}
} // namespace
+
namespace Dali
{
namespace Internal
{
RenderItem* RenderItem::New()
{
- return new(gRenderItemPool.AllocateRaw()) RenderItem();
+ return new(GetRenderItemPool().AllocateRaw()) RenderItem();
+}
+
+RenderItemKey RenderItem::NewKey()
+{
+ void* ptr = GetRenderItemPool().AllocateRaw();
+ auto key = GetRenderItemPool().GetKeyFromPtr(static_cast<RenderItem*>(ptr));
+ new(ptr) RenderItem();
+ return RenderItemKey(key);
}
RenderItem::RenderItem()
: mModelMatrix(false),
mModelViewMatrix(false),
- mColor(Vector4::ZERO),
mSize(),
- mRenderer(nullptr),
+ mRenderer{},
mNode(nullptr),
mTextureSet(nullptr),
mDepthIndex(0),
RenderItem::~RenderItem() = default;
+RenderItem* RenderItem::Get(RenderItemKey::KeyType key)
+{
+ return GetRenderItemPool().GetPtrFromKey(key);
+}
+
+RenderItemKey RenderItem::GetKey(const RenderItem& renderItem)
+{
+ return RenderItemKey(GetRenderItemPool().GetKeyFromPtr(const_cast<RenderItem*>(&renderItem)));
+}
+
+RenderItemKey RenderItem::GetKey(RenderItem* renderItem)
+{
+ return RenderItemKey(GetRenderItemPool().GetKeyFromPtr(renderItem));
+}
+
ClippingBox RenderItem::CalculateTransformSpaceAABB(const Matrix& transformMatrix, const Vector3& position, const Vector3& size)
{
// Calculate extent vector of the AABB:
void RenderItem::operator delete(void* ptr)
{
- gRenderItemPool.Free(static_cast<RenderItem*>(ptr));
+ GetRenderItemPool().Free(static_cast<RenderItem*>(ptr));
+}
+
+uint32_t RenderItem::GetMemoryPoolCapacity()
+{
+ return GetRenderItemPool().GetCapacity();
}
} // namespace SceneGraph