CanvasRenderer: Refactoring to pass rasterized buffer 20/265520/4
authorJunsuChoi <jsuya.choi@samsung.com>
Thu, 21 Oct 2021 08:47:04 +0000 (17:47 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Tue, 26 Oct 2021 08:53:28 +0000 (17:53 +0900)
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

dali/devel-api/adaptor-framework/canvas-renderer.cpp
dali/devel-api/adaptor-framework/canvas-renderer.h
dali/internal/canvas-renderer/common/canvas-renderer-impl.cpp
dali/internal/canvas-renderer/common/canvas-renderer-impl.h
dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.cpp
dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.h
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h
dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h

index 26c14bf..7ce5f1f 100644 (file)
@@ -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)
index cffab39..2b6bf5e 100644 (file)
@@ -20,9 +20,9 @@
 
 // EXTERNAL INCLUDES
 #include <dali/public-api/object/base-handle.h>
+#include <dali/public-api/rendering/texture.h>
 
 // INTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 #include <dali/public-api/dali-adaptor-common.h>
 
 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.
index 8ec7b4f..9e1642f 100644 (file)
@@ -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)
index b59180c..5afb7bd 100644 (file)
 
 // EXTERNAL INCLUDES
 #include <dali/public-api/object/base-object.h>
+#include <dali/public-api/rendering/texture.h>
 
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer.h>
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 
 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()
index 59854e7..3d83880 100644 (file)
@@ -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)
index 9dcdab0..5b3e9b8 100644 (file)
@@ -24,7 +24,6 @@
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer.h>
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 #include <dali/internal/canvas-renderer/common/canvas-renderer-impl.h>
 
 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()
index ffb30b5..bc45837 100644 (file)
@@ -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)
index 7cd350c..88a43ed 100644 (file)
 #endif
 #include <dali/devel-api/threading/mutex.h>
 #include <dali/public-api/object/weak-handle.h>
+#include <dali/public-api/rendering/texture.h>
 
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer.h>
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 #include <dali/internal/canvas-renderer/common/canvas-renderer-impl.h>
 #include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 
 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<tvg::SwCanvas> mTvgCanvas;
   tvg::Scene*                    mTvgRoot;
 #endif
index 90f70eb..42f972d 100644 (file)
@@ -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)
index 3dde777..2436d82 100644 (file)
 #endif
 #include <dali/devel-api/threading/mutex.h>
 #include <dali/public-api/object/weak-handle.h>
+#include <dali/public-api/rendering/texture.h>
 
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer.h>
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 #include <dali/internal/canvas-renderer/common/canvas-renderer-impl.h>
 #include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 
 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<tvg::SwCanvas> mTvgCanvas;
   tvg::Scene*                    mTvgRoot;
 #endif