From 0af7050d47336c813d687cf4b79af98b745284ca Mon Sep 17 00:00:00 2001 From: Daekwang Ryu Date: Wed, 3 Mar 2021 14:50:27 +0900 Subject: [PATCH] GLView using NativeImageSurface Change-Id: Ie5bb01ab2b910b6b3f58251595ddfeadbc2bb40e --- .../controls/gl-view/gl-surface-view-impl.cpp | 14 ++--- .../controls/gl-view/gl-surface-view-thread.cpp | 60 +++++----------------- .../controls/gl-view/gl-surface-view-thread.h | 13 +++-- 3 files changed, 27 insertions(+), 60 deletions(-) diff --git a/dali-toolkit/internal/controls/gl-view/gl-surface-view-impl.cpp b/dali-toolkit/internal/controls/gl-view/gl-surface-view-impl.cpp index 4db99d3..1fc2c4f 100644 --- a/dali-toolkit/internal/controls/gl-view/gl-surface-view-impl.cpp +++ b/dali-toolkit/internal/controls/gl-view/gl-surface-view-impl.cpp @@ -239,20 +239,20 @@ void GLSurfaceView::CreateGLView() self.SetProperty(Actor::Property::SIZE, Vector2(mViewWidth, mViewHeight)); //Get the Tbm queue, created internally by NativeImageSourceQueue. - tbm_surface_queue_h tbmQueue = AnyCast(mTargetSurface->GetNativeImageSourceQueue()); + // tbm_surface_queue_h tbmQueue = AnyCast(mTargetSurface->GetNativeImageSourceQueue()); // void* tbmQueue = AnyCast(mTargetSurface->GetNativeImageSourceQueue()); // void* tbmQueue = AnyCast(mTargetSurface->GetNativeImageSourceQueue()); - if(!tbmQueue) - { - DALI_LOG_ERROR("Tbm Surface queue is NULL"); - return; - } + // if(!tbmQueue) + // { + // DALI_LOG_ERROR("Tbm Surface queue is NULL"); + // return; + // } // EnqueueDefaultTbmSurface(tbmQueue); //Create and Start Render Thread. - mGLRenderer = new GLRenderer(mViewWidth, mViewHeight, tbmQueue); + mGLRenderer = new GLRenderer(mViewWidth, mViewHeight, mTargetSurface->GetNativeImageSourceQueue()); mGLRenderer->Start(); //Adding VisibilityChange Signal. diff --git a/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.cpp b/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.cpp index 726fdb0..f48be29 100644 --- a/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.cpp +++ b/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.cpp @@ -12,7 +12,7 @@ // CLASS HEADER #include "gl-surface-view-thread.h" -#include +// #include //EXTERNAL INCLUDES #include @@ -33,49 +33,30 @@ namespace const unsigned int DEFAULT_SLEEP_TIME = 16u; } -GLRenderer::GLRenderer(unsigned int viewWidth, unsigned viewHeight, tbm_surface_queue_h tbmSurfaceQueue) -: mSurface(nullptr), +GLRenderer::GLRenderer(unsigned int viewWidth, unsigned viewHeight, Any tbmSurfaceQueue) +: mSurface(), mViewWidth(viewWidth), mViewHeight(viewHeight), mTbmSurfaceQueue(tbmSurfaceQueue), - // mGLInitCallback(NULL), - // mGLDrawCallback(NULL), - // mGLTerminateCallback(NULL), mSleepTime(DEFAULT_SLEEP_TIME), mMode(RENDER_MODE::RENDER_MODE_ONDEMAND), mRenderOnce(false), mPauseThread(true), mQuitThread(false), mColorDepth(Dali::NativeImageSourceQueue::COLOR_DEPTH_32), - // mGLInitCallback(), - // mGLRenderFrameCallback(), - // mGLTerminateCallback(), - // mInitCallback(false), mDepth(false), mStencil(false), mIsEGLInitialize(false), mMSAA(0) { - // bool ret = InitializeEGL(); - // if(ret == false) - // { - // DALI_LOG_ERROR("EGL Initilization Failed, Could not start GLRender Thread"); - // return; - // } } bool GLRenderer::InitializeEGL() { DALI_LOG_ERROR("DKDK InitializeEGL()"); - // TODO: Check third parameter the translucent - mSurface = std::unique_ptr(CreateNativeSurface(SurfaceSize(mViewWidth, mViewHeight), mTbmSurfaceQueue, true)); - // mSurface.get()->SetAdaptor(Dali::Adaptor::Get()); - NativeRenderSurface* nativeSurface = dynamic_cast(mSurface.get()); - nativeSurface->SetGLView(true); - nativeSurface->InitializeGraphics(); - - DALI_LOG_ERROR("DKDK mTbmSurfaceQueue %p, mSurface %p", mTbmSurfaceQueue, mSurface.get()); + mSurface = Dali::Integration::NativeImageSurface::New(Dali::Integration::NativeImageSurface::SurfaceSize(mViewWidth, mViewHeight), mTbmSurfaceQueue, true); + // mSurface.InitializeGraphics(); return true; } @@ -102,10 +83,10 @@ void GLRenderer::RegisterGLCallback(CallbackBase* initCallback, CallbackBase* re mGLTerminateCallback = std::unique_ptr(terminateCallback); } -NativeRenderSurface* GLRenderer::GetNativeRenderSurface() const -{ - return dynamic_cast(mSurface.get()); -} +// NativeRenderSurface* GLRenderer::GetNativeRenderSurface() const +// { +// return dynamic_cast(mSurface.get()); +// } void GLRenderer::SetRenderingMode(RENDER_MODE mode) { @@ -141,10 +122,6 @@ void GLRenderer::Run() { Dali::SetThreadName("DKDKGLViewRenderer"); DALI_LOG_ERROR("DKDK GLRenderer::Run()"); - // DALI_LOG_ERROR("initCallback [%p] renderFrameCallback[%p] terminateCallback[%p]", - // mGLInitCallback, - // mGLRenderFrameCallback, - // mGLTerminateCallback); bool ret = InitializeEGL(); if(ret == false) { @@ -182,14 +159,8 @@ void GLRenderer::Run() // initRet = mGLInitCallback(mViewWidth, mViewHeight); //TODO: check callback parameter - NativeRenderSurface* surface = GetNativeRenderSurface(); - - if(!surface) - { - return; - } Rect rect; - surface->PreRender(false, std::vector>(), rect); + mSurface.PreRender(); CallbackBase::Execute(*mGLInitCallback); @@ -200,21 +171,14 @@ void GLRenderer::Run() // Calling GLDraw callback, per frame depending on RenderMde set. if(initRet == true) { - NativeRenderSurface* surface = GetNativeRenderSurface(); - - if(!surface) - { - return; - } // virtual bool PreRender(bool resizingSurface, const std::vector>& damagedRects, Rect& clippingRect) = 0; - Rect rect; - surface->PreRender(false, std::vector>(), rect); + mSurface.PreRender(); //TODO: check callback parameter CallbackBase::Execute(*mGLRenderFrameCallback); // virtual void PostRender(bool renderToFbo, bool replacingSurface, bool resizingSurface, const std::vector>& damagedRects) = 0; - surface->PostRender(false, false, false, std::vector>()); + mSurface.PostRender(); } { diff --git a/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.h b/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.h index da4af96..5768f3e 100644 --- a/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.h +++ b/dali-toolkit/internal/controls/gl-view/gl-surface-view-thread.h @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -43,7 +44,8 @@ public: RENDER_MODE_CONTINUOUSLY, RENDER_MODE_ONDEMAND }; - GLRenderer(unsigned int viewWidth, unsigned viewHeight, tbm_surface_queue_h tbmSurfaceQueue); + // GLRenderer(unsigned int viewWidth, unsigned viewHeight, tbm_surface_queue_h tbmSurfaceQueue); + GLRenderer(unsigned int viewWidth, unsigned viewHeight, Any tbmSurfaceQueue); virtual ~GLRenderer(); void RegisterGLCallback(CallbackBase* initCallback, CallbackBase* renderFrameCallback, CallbackBase* terminateCallback); @@ -62,16 +64,17 @@ private: bool InitializeEGL(); void DeInitializeEGL(); - NativeRenderSurface* GetNativeRenderSurface() const; - private: - std::unique_ptr mSurface; ///< The window rendering surface + // std::unique_ptr mSurface; ///< The window rendering surface + // std::unique_ptr mSurface; + Dali::Integration::NativeImageSurface mSurface; + // std::unique_ptr mSurface; unsigned mViewWidth; unsigned mViewHeight; // tbm_surface_queue_h mTbmSurfaceQueue; - tbm_surface_queue_h mTbmSurfaceQueue; + Any mTbmSurfaceQueue; Dali::ConditionalWait mConditionalWait; // EglData* mEglData; -- 2.7.4