From d26b9ebdbad7c9fc26998ac7e22b7eb911032a6c Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Wed, 28 Dec 2022 10:01:13 +0900 Subject: [PATCH] Reduce Render::Renderer size Allocate RenderCallbackInput when needed Change-Id: I376a2dede159457b1887ce28d2dfa5126b30f4a7 --- dali/internal/render/renderers/render-renderer.cpp | 19 ++++++++++++------- dali/internal/render/renderers/render-renderer.h | 8 ++++++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index b70408b..db30a4e 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -426,13 +426,18 @@ bool Renderer::Render(Graphics::CommandBuffer& comma // Check if there is render callback if(mRenderCallback) { + if(!mRenderCallbackInput) + { + mRenderCallbackInput = std::unique_ptr(new RenderCallbackInput); + } + Graphics::DrawNativeInfo info{}; info.api = Graphics::DrawNativeAPI::GLES; info.callback = &static_cast(*mRenderCallback); - info.userData = &mRenderCallbackInput; + info.userData = mRenderCallbackInput.get(); // Set storage for the context to be used - info.glesNativeInfo.eglSharedContextStoragePointer = &mRenderCallbackInput.eglContext; + info.glesNativeInfo.eglSharedContextStoragePointer = &mRenderCallbackInput->eglContext; info.reserved = nullptr; auto& textureResources = mRenderCallback->GetTextureResources(); @@ -440,7 +445,7 @@ bool Renderer::Render(Graphics::CommandBuffer& comma if(!textureResources.empty()) { mRenderCallbackTextureBindings.clear(); - mRenderCallbackInput.textureBindings.resize(textureResources.size()); + mRenderCallbackInput->textureBindings.resize(textureResources.size()); auto i = 0u; for(auto& texture : textureResources) { @@ -450,17 +455,17 @@ bool Renderer::Render(Graphics::CommandBuffer& comma auto properties = mGraphicsController->GetTextureProperties(*graphicsTexture); mRenderCallbackTextureBindings.emplace_back(graphicsTexture); - mRenderCallbackInput.textureBindings[i++] = properties.nativeHandle; + mRenderCallbackInput->textureBindings[i++] = properties.nativeHandle; } info.textureCount = mRenderCallbackTextureBindings.size(); info.textureList = mRenderCallbackTextureBindings.data(); } // pass render callback input - mRenderCallbackInput.size = size; - mRenderCallbackInput.projection = projectionMatrix; + mRenderCallbackInput->size = size; + mRenderCallbackInput->projection = projectionMatrix; - MatrixUtils::Multiply(mRenderCallbackInput.mvp, modelViewMatrix, projectionMatrix); + MatrixUtils::Multiply(mRenderCallbackInput->mvp, modelViewMatrix, projectionMatrix); // submit draw commandBuffer.DrawNative(&info); diff --git a/dali/internal/render/renderers/render-renderer.h b/dali/internal/render/renderers/render-renderer.h index 51f661e..94e34c8 100644 --- a/dali/internal/render/renderers/render-renderer.h +++ b/dali/internal/render/renderers/render-renderer.h @@ -405,7 +405,11 @@ public: */ RenderCallbackInput& GetRenderCallbackInput() { - return mRenderCallbackInput; + if(!mRenderCallbackInput) + { + mRenderCallbackInput = std::unique_ptr(new RenderCallbackInput); + } + return *mRenderCallbackInput; } /** @@ -603,7 +607,7 @@ private: std::vector mDrawCommands; // Devel stuff RenderCallback* mRenderCallback{nullptr}; - RenderCallbackInput mRenderCallbackInput{}; + std::unique_ptr mRenderCallbackInput{nullptr}; std::vector mRenderCallbackTextureBindings{}; }; -- 2.7.4