From 21f8be59ca7d18faa05d1a4b49f65ca33c2a9af6 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Thu, 21 Oct 2021 17:47:04 +0900 Subject: [PATCH] CanvasRenderer: Refactoring to pass rasterized buffer This makes the buffer not dependent on whether to use NativeImageQueue's tbm_surface or PixelData. After this work, we can make a patch using NativeImageQueue for the tizen profile. This patch is related to https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-toolkit/+/265519/. Change-Id: Ib29c0fb1364bc958852af9ec4a9da4baf5b4248e --- .../adaptor-framework/canvas-renderer.cpp | 4 +-- dali/devel-api/adaptor-framework/canvas-renderer.h | 8 +++--- .../common/canvas-renderer-impl.cpp | 4 +-- .../canvas-renderer/common/canvas-renderer-impl.h | 6 ++--- .../generic/canvas-renderer-impl-generic.cpp | 4 +-- .../generic/canvas-renderer-impl-generic.h | 5 ++-- .../tizen/canvas-renderer-impl-tizen.cpp | 31 +++++++++++++++++++--- .../tizen/canvas-renderer-impl-tizen.h | 13 ++++----- .../ubuntu/canvas-renderer-impl-ubuntu.cpp | 31 +++++++++++++++++++--- .../ubuntu/canvas-renderer-impl-ubuntu.h | 13 ++++----- 10 files changed, 85 insertions(+), 34 deletions(-) diff --git a/dali/devel-api/adaptor-framework/canvas-renderer.cpp b/dali/devel-api/adaptor-framework/canvas-renderer.cpp index 26c14bf..7ce5f1f 100644 --- a/dali/devel-api/adaptor-framework/canvas-renderer.cpp +++ b/dali/devel-api/adaptor-framework/canvas-renderer.cpp @@ -48,9 +48,9 @@ bool CanvasRenderer::Commit() return GetImplementation(*this).Commit(); } -Devel::PixelBuffer CanvasRenderer::GetPixelBuffer() +Dali::Texture CanvasRenderer::GetRasterizedTexture() { - return GetImplementation(*this).GetPixelBuffer(); + return GetImplementation(*this).GetRasterizedTexture(); } bool CanvasRenderer::AddDrawable(Drawable& drawable) diff --git a/dali/devel-api/adaptor-framework/canvas-renderer.h b/dali/devel-api/adaptor-framework/canvas-renderer.h index cffab39..2b6bf5e 100644 --- a/dali/devel-api/adaptor-framework/canvas-renderer.h +++ b/dali/devel-api/adaptor-framework/canvas-renderer.h @@ -20,9 +20,9 @@ // EXTERNAL INCLUDES #include +#include // INTERNAL INCLUDES -#include #include namespace Dali @@ -121,11 +121,11 @@ public: bool RemoveAllDrawables(); /** - * @brief Returns the PixelBuffer, which is the Render buffer of Canvas. + * @brief Returns the rasterized texture. * - * @return Returns the pixel buffer. + * @return Returns the texture. */ - Devel::PixelBuffer GetPixelBuffer(); + Dali::Texture GetRasterizedTexture(); /** * @brief Draw drawables added to CanvasRenderer to inner buffer. diff --git a/dali/internal/canvas-renderer/common/canvas-renderer-impl.cpp b/dali/internal/canvas-renderer/common/canvas-renderer-impl.cpp index 8ec7b4f..9e1642f 100644 --- a/dali/internal/canvas-renderer/common/canvas-renderer-impl.cpp +++ b/dali/internal/canvas-renderer/common/canvas-renderer-impl.cpp @@ -38,9 +38,9 @@ bool CanvasRenderer::Commit() return false; } -Devel::PixelBuffer CanvasRenderer::GetPixelBuffer() +Dali::Texture CanvasRenderer::GetRasterizedTexture() { - return Devel::PixelBuffer(); + return Dali::Texture(); } bool CanvasRenderer::AddDrawable(Dali::CanvasRenderer::Drawable& drawable) diff --git a/dali/internal/canvas-renderer/common/canvas-renderer-impl.h b/dali/internal/canvas-renderer/common/canvas-renderer-impl.h index b59180c..5afb7bd 100644 --- a/dali/internal/canvas-renderer/common/canvas-renderer-impl.h +++ b/dali/internal/canvas-renderer/common/canvas-renderer-impl.h @@ -20,11 +20,11 @@ // EXTERNAL INCLUDES #include +#include // INTERNAL INCLUDES #include #include -#include namespace Dali { @@ -54,9 +54,9 @@ public: virtual bool Commit(); /** - * @copydoc Dali::CanvasRenderer::GetPixelBuffer() + * @copydoc Dali::CanvasRenderer::GetRasterizedTexture() */ - virtual Devel::PixelBuffer GetPixelBuffer(); + virtual Dali::Texture GetRasterizedTexture(); /** * @copydoc Dali::CanvasRenderer::AddDrawable() diff --git a/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.cpp b/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.cpp index 59854e7..3d83880 100644 --- a/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.cpp +++ b/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.cpp @@ -60,9 +60,9 @@ bool CanvasRendererGeneric::Commit() return false; } -Devel::PixelBuffer CanvasRendererGeneric::GetPixelBuffer() +Dali::Texture CanvasRendererGeneric::GetRasterizedTexture() { - return Devel::PixelBuffer(); + return Dali::Texture(); } bool CanvasRendererGeneric::AddDrawable(Dali::CanvasRenderer::Drawable& drawable) diff --git a/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.h b/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.h index 9dcdab0..5b3e9b8 100644 --- a/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.h +++ b/dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.h @@ -24,7 +24,6 @@ // INTERNAL INCLUDES #include #include -#include #include namespace Dali @@ -52,9 +51,9 @@ public: bool Commit() override; /** - * @copydoc Dali::CanvasRenderer::GetPixelBuffer() + * @copydoc Dali::CanvasRenderer::GetRasterizedTexture() */ - Devel::PixelBuffer GetPixelBuffer() override; + virtual Dali::Texture GetRasterizedTexture() override; /** * @copydoc Dali::CanvasRenderer::AddDrawable() diff --git a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp index ffb30b5..bc45837 100644 --- a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp @@ -54,8 +54,11 @@ CanvasRendererTizen* CanvasRendererTizen::New(const Vector2& viewBox) } CanvasRendererTizen::CanvasRendererTizen(const Vector2& viewBox) -: mPixelBuffer(nullptr), +: #ifdef THORVG_SUPPORT + mPixelBuffer(nullptr), + mRasterizedTexture(), + mMutex(), mTvgCanvas(nullptr), mTvgRoot(nullptr), #endif @@ -162,9 +165,31 @@ bool CanvasRendererTizen::Commit() #endif } -Devel::PixelBuffer CanvasRendererTizen::GetPixelBuffer() +Dali::Texture CanvasRendererTizen::GetRasterizedTexture() { - return mPixelBuffer; +#ifdef THORVG_SUPPORT + if(mPixelBuffer) + { + auto width = mPixelBuffer.GetWidth(); + auto height = mPixelBuffer.GetHeight(); + if(width <= 0 || height <= 0) + { + return Dali::Texture(); + } + + Dali::PixelData pixelData = Devel::PixelBuffer::Convert(mPixelBuffer); + + if(!mRasterizedTexture || mRasterizedTexture.GetWidth() != width || mRasterizedTexture.GetHeight() != height) + { + mRasterizedTexture = Dali::Texture::New(Dali::TextureType::TEXTURE_2D, Dali::Pixel::BGRA8888, width, height); + } + + mRasterizedTexture.Upload(pixelData); + } + return mRasterizedTexture; +#else + return Dali::Texture(); +#endif } bool CanvasRendererTizen::AddDrawable(Dali::CanvasRenderer::Drawable& drawable) diff --git a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h index 7cd350c..88a43ed 100644 --- a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h +++ b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h @@ -24,13 +24,14 @@ #endif #include #include +#include // INTERNAL INCLUDES #include #include -#include #include #include +#include namespace Dali { @@ -57,9 +58,9 @@ public: bool Commit() override; /** - * @copydoc Dali::CanvasRenderer::GetPixelBuffer() + * @copydoc Dali::CanvasRenderer::GetRasterizedTexture() */ - Devel::PixelBuffer GetPixelBuffer() override; + Dali::Texture GetRasterizedTexture() override; /** * @copydoc Dali::CanvasRenderer::AddDrawable() @@ -162,10 +163,10 @@ private: #endif private: - Devel::PixelBuffer mPixelBuffer; - Dali::Mutex mMutex; - #ifdef THORVG_SUPPORT + Devel::PixelBuffer mPixelBuffer; + Dali::Texture mRasterizedTexture; + Dali::Mutex mMutex; std::unique_ptr mTvgCanvas; tvg::Scene* mTvgRoot; #endif diff --git a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.cpp index 90f70eb..42f972d 100644 --- a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.cpp +++ b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.cpp @@ -54,8 +54,11 @@ CanvasRendererUbuntu* CanvasRendererUbuntu::New(const Vector2& viewBox) } CanvasRendererUbuntu::CanvasRendererUbuntu(const Vector2& viewBox) -: mPixelBuffer(nullptr), +: #ifdef THORVG_SUPPORT + mPixelBuffer(nullptr), + mRasterizedTexture(), + mMutex(), mTvgCanvas(nullptr), mTvgRoot(nullptr), #endif @@ -162,9 +165,31 @@ bool CanvasRendererUbuntu::Commit() #endif } -Devel::PixelBuffer CanvasRendererUbuntu::GetPixelBuffer() +Dali::Texture CanvasRendererUbuntu::GetRasterizedTexture() { - return mPixelBuffer; +#ifdef THORVG_SUPPORT + if(mPixelBuffer) + { + auto width = mPixelBuffer.GetWidth(); + auto height = mPixelBuffer.GetHeight(); + if(width <= 0 || height <= 0) + { + return Dali::Texture(); + } + + Dali::PixelData pixelData = Devel::PixelBuffer::Convert(mPixelBuffer); + + if(!mRasterizedTexture || mRasterizedTexture.GetWidth() != width || mRasterizedTexture.GetHeight() != height) + { + mRasterizedTexture = Dali::Texture::New(Dali::TextureType::TEXTURE_2D, Dali::Pixel::BGRA8888, width, height); + } + + mRasterizedTexture.Upload(pixelData); + } + return mRasterizedTexture; +#else + return Dali::Texture(); +#endif } bool CanvasRendererUbuntu::AddDrawable(Dali::CanvasRenderer::Drawable& drawable) diff --git a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h index 3dde777..2436d82 100644 --- a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h +++ b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h @@ -24,13 +24,14 @@ #endif #include #include +#include // INTERNAL INCLUDES #include #include -#include #include #include +#include namespace Dali { @@ -57,9 +58,9 @@ public: bool Commit() override; /** - * @copydoc Dali::CanvasRenderer::GetPixelBuffer() + * @copydoc Dali::CanvasRenderer::GetRasterizedTexture() */ - Devel::PixelBuffer GetPixelBuffer() override; + Dali::Texture GetRasterizedTexture() override; /** * @copydoc Dali::CanvasRenderer::AddDrawable() @@ -162,10 +163,10 @@ private: #endif private: - Devel::PixelBuffer mPixelBuffer; - Dali::Mutex mMutex; - #ifdef THORVG_SUPPORT + Devel::PixelBuffer mPixelBuffer; + Dali::Texture mRasterizedTexture; + Dali::Mutex mMutex; std::unique_ptr mTvgCanvas; tvg::Scene* mTvgRoot; #endif -- 2.7.4