From 59df57f1a5ebfefd81ba56e44c918e41e5c452d5 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Fri, 27 Jan 2023 16:42:52 +0900 Subject: [PATCH] [Tizen] Make API to set MultiSampling level for SceneView Change-Id: I8a3c61d8590d883b915a781ed5ab609e3394f771 Signed-off-by: Eunki, Hong --- .../controls/scene-view/scene-view-impl.cpp | 30 +++++++++++++++++++--- .../internal/controls/scene-view/scene-view-impl.h | 11 ++++++++ .../public-api/controls/scene-view/scene-view.cpp | 10 ++++++++ .../public-api/controls/scene-view/scene-view.h | 20 +++++++++++++++ 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp index dc1b646..0575062 100644 --- a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp +++ b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp @@ -59,8 +59,6 @@ DALI_TYPE_REGISTRATION_END() Property::Index RENDERING_BUFFER = Dali::Toolkit::Control::CONTROL_PROPERTY_END_INDEX + 1; constexpr int32_t DEFAULT_ORIENTATION = 0; - -constexpr uint8_t DEFAULT_FRAME_BUFFER_MULTI_SAMPLING_LEVEL = 4u; } // anonymous namespace SceneView::SceneView() @@ -255,6 +253,32 @@ bool SceneView::IsUsingFramebuffer() const return mUseFrameBuffer; } +void SceneView::SetFramebufferMultiSamplingLevel(uint8_t multiSamplingLevel) +{ + if(mFrameBufferMultiSamplingLevel != multiSamplingLevel) + { + mFrameBufferMultiSamplingLevel = multiSamplingLevel; + + // Create new framebuffer with changed multiSamplingLevel. + if(mRenderTask && mFrameBuffer && mTexture) + { + Vector3 size = Self().GetProperty(Dali::Actor::Property::SIZE); + + mFrameBuffer = FrameBuffer::New(size.width, size.height, FrameBuffer::Attachment::DEPTH_STENCIL); + mFrameBuffer.AttachColorTexture(mTexture); + DevelFrameBuffer::SetMultiSamplingLevel(mFrameBuffer, mFrameBufferMultiSamplingLevel); + mRenderTask.SetFrameBuffer(mFrameBuffer); + + // Note : we don't need to create new visual since visual's url is depend on mTexture. + } + } +} + +uint8_t SceneView::GetFramebufferMultiSamplingLevel() const +{ + return mFrameBufferMultiSamplingLevel; +} + /////////////////////////////////////////////////////////// // // Private methods @@ -410,7 +434,7 @@ void SceneView::UpdateRenderTask() mTexture = Dali::Texture::New(TextureType::TEXTURE_2D, Pixel::RGBA8888, unsigned(size.width), unsigned(size.height)); mFrameBuffer = FrameBuffer::New(size.width, size.height, FrameBuffer::Attachment::DEPTH_STENCIL); mFrameBuffer.AttachColorTexture(mTexture); - DevelFrameBuffer::SetMultiSamplingLevel(mFrameBuffer, DEFAULT_FRAME_BUFFER_MULTI_SAMPLING_LEVEL); + DevelFrameBuffer::SetMultiSamplingLevel(mFrameBuffer, mFrameBufferMultiSamplingLevel); Dali::Toolkit::ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(mFrameBuffer, 0u); Property::Map imagePropertyMap; diff --git a/dali-scene3d/internal/controls/scene-view/scene-view-impl.h b/dali-scene3d/internal/controls/scene-view/scene-view-impl.h index 3282370..81f0e8a 100644 --- a/dali-scene3d/internal/controls/scene-view/scene-view-impl.h +++ b/dali-scene3d/internal/controls/scene-view/scene-view-impl.h @@ -137,6 +137,16 @@ public: */ bool IsUsingFramebuffer() const; + /** + * @copydoc SceneView::SetFramebufferMultiSamplingLevel() + */ + void SetFramebufferMultiSamplingLevel(uint8_t multiSamplingLevel); + + /** + * @copydoc SceneView::GetFramebufferMultiSamplingLevel() + */ + uint8_t GetFramebufferMultiSamplingLevel() const; + protected: /** * @brief Constructs a new SceneView. @@ -240,6 +250,7 @@ private: Dali::RenderTask mRenderTask; Layer mRootLayer; int32_t mWindowOrientation; + uint8_t mFrameBufferMultiSamplingLevel{0u}; CallbackBase* mIblLoadedCallback; std::string mDiffuseIblUrl; diff --git a/dali-scene3d/public-api/controls/scene-view/scene-view.cpp b/dali-scene3d/public-api/controls/scene-view/scene-view.cpp index 1aea71c..3edd5ee 100644 --- a/dali-scene3d/public-api/controls/scene-view/scene-view.cpp +++ b/dali-scene3d/public-api/controls/scene-view/scene-view.cpp @@ -127,6 +127,16 @@ bool SceneView::IsUsingFramebuffer() const return GetImpl(*this).IsUsingFramebuffer(); } +void SceneView::SetFramebufferMultiSamplingLevel(uint8_t multiSamplingLevel) +{ + GetImpl(*this).SetFramebufferMultiSamplingLevel(multiSamplingLevel); +} + +uint8_t SceneView::GetFramebufferMultiSamplingLevel() const +{ + return GetImpl(*this).GetFramebufferMultiSamplingLevel(); +} + } // namespace Scene3D } // namespace Dali diff --git a/dali-scene3d/public-api/controls/scene-view/scene-view.h b/dali-scene3d/public-api/controls/scene-view/scene-view.h index fce3b19..7cd1d21 100644 --- a/dali-scene3d/public-api/controls/scene-view/scene-view.h +++ b/dali-scene3d/public-api/controls/scene-view/scene-view.h @@ -315,6 +315,26 @@ public: */ bool IsUsingFramebuffer() const; + /** + * @brief Sets Multisampling level when we use Framebuffer. + * Default is 0. + * + * @note Only applied if SceneView is using Framebuffer and Framebuffer Multisampling extension is supported. + * + * @param[in] multiSamplingLevel Level of multisampling if we use Framebuffer. + */ + void SetFramebufferMultiSamplingLevel(uint8_t multiSamplingLevel); + + /** + * @brief Gets Multisampling level that user set. + * Default is 0. + * + * @note This API doesn't check whether Multisampling extension is supported or not. + * + * @return MultisamplingLevel that user set. + */ + uint8_t GetFramebufferMultiSamplingLevel() const; + public: // Not intended for application developers /// @cond internal /** -- 2.7.4