X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fgl-view%2Fdrawable-view-impl.cpp;h=4cbda06ca79f2af06063890dcceef03fcd82bf37;hp=9b94546dc790a400f7992f09ae7d3d7a5667382a;hb=0255ba0039cf628d8dbc82d8898000da98833532;hpb=7875069ceecfd24c2a8cf3a28564f7d115296e93 diff --git a/dali-toolkit/internal/controls/gl-view/drawable-view-impl.cpp b/dali-toolkit/internal/controls/gl-view/drawable-view-impl.cpp index 9b94546..4cbda06 100644 --- a/dali-toolkit/internal/controls/gl-view/drawable-view-impl.cpp +++ b/dali-toolkit/internal/controls/gl-view/drawable-view-impl.cpp @@ -24,34 +24,40 @@ #include #include #include +#include namespace Dali::Toolkit::Internal { -Dali::Toolkit::GlView DrawableView::New() +Dali::Toolkit::GlView DrawableView::New(GlView::BackendMode backendMode) { - auto* impl = new DrawableView(); + auto* impl = new DrawableView(backendMode); Dali::Toolkit::GlView handle = Dali::Toolkit::GlView(*impl); impl->Initialize(); return handle; } -DrawableView::DrawableView() -: Dali::Toolkit::Internal::GlViewImpl( GlView::BackendMode::DIRECT_RENDERING ), +DrawableView::DrawableView(GlView::BackendMode backendMode) +: Dali::Toolkit::Internal::GlViewImpl( backendMode), mRenderingMode(Toolkit::GlView::RenderingMode::CONTINUOUS), mDepth(false), mStencil(false), mMSAA(0) { mRenderCallback = RenderCallback::New( this, &DrawableView::OnRenderCallback); + + // Create NativeRenderer + Dali::Internal::NativeRendererCreateInfo createInfo; + createInfo.maxOffscreenBuffers = 2u; + createInfo.threadEnabled = (backendMode == GlView::BackendMode::DIRECT_RENDERING_THREADED); + createInfo.presentationMode = Dali::Internal::NativeRendererCreateInfo::PresentationMode::FIFO; + mNativeRenderer = std::make_unique(createInfo); } DrawableView::~DrawableView() = default; void DrawableView::RegisterGlCallbacks(CallbackBase* initCallback, CallbackBase* renderFrameCallback, CallbackBase* terminateCallback) { - mOnInitCallback.reset( initCallback ); - mOnRenderCallback.reset(renderFrameCallback ); - mOnTerminateCallback. reset( terminateCallback ); + mNativeRenderer->RegisterGlCallbacks( initCallback, renderFrameCallback, terminateCallback ); } void DrawableView::SetResizeCallback(CallbackBase* resizeCallback) @@ -61,8 +67,8 @@ void DrawableView::SetResizeCallback(CallbackBase* resizeCallback) bool DrawableView::SetGraphicsConfig(bool depth, bool stencil, int msaa, Dali::Toolkit::GlView::GraphicsApiVersion version) { - DALI_LOG_ERROR( "DrawableView::SetGraphicsConfig() is currently not implemented"); - + // Currently, the settings are not relevant for the DirectRendering feature as all the + // setup is inherited from DALi graphics backend. return true; } @@ -110,8 +116,9 @@ void DrawableView::OnSizeSet(const Vector3& targetSize) mSurfaceSize = targetSize; // If the callbacks are set then schedule execution of resize callback - if(mRenderCallback && mOnResizeCallback) + if(mRenderCallback && mNativeRenderer) { + mNativeRenderer->Resize( uint32_t(targetSize.width), uint32_t(targetSize.height)); mSurfaceResized = true; } } @@ -144,6 +151,8 @@ void DrawableView::OnSceneConnection(int depth) void DrawableView::OnSceneDisconnection() { Control::OnSceneDisconnection(); + + mNativeRenderer->Terminate(); } void DrawableView::AddRenderer() @@ -155,17 +164,24 @@ void DrawableView::AddRenderer() bool DrawableView::OnRenderCallback( const RenderCallbackInput& renderCallbackInput ) { + if(mNativeRenderer) + { + mNativeRenderer->PushRenderCallbackInputData( renderCallbackInput ); + } + // Init state if( mCurrentViewState == ViewState::INIT ) { - if(mOnInitCallback) - { - CallbackBase::Execute(*mOnInitCallback); - } + mNativeRenderer->InvokeGlInitCallback(renderCallbackInput); mCurrentViewState = ViewState::RENDER; } - int renderFrameResult = 0; + if(mSurfaceResized) + { + mNativeRenderer->Resize( uint32_t(mSurfaceSize.width), uint32_t(mSurfaceSize.height) ); + mSurfaceResized = false; + } + if( mCurrentViewState == ViewState::RENDER ) { // The mSurfaceResized is set by another thread so atomic check must be provided @@ -178,20 +194,13 @@ bool DrawableView::OnRenderCallback( const RenderCallbackInput& renderCallbackIn CallbackBase::Execute(*mOnResizeCallback, static_cast(mSurfaceSize.x), static_cast(mSurfaceSize.y)); } - if(mOnRenderCallback) - { - renderFrameResult = CallbackBase::ExecuteReturn(*mOnRenderCallback); - if(renderFrameResult) - { - // TODO: may be utilized for RenderOnce feature - } - } + mNativeRenderer->InvokeGlRenderCallback(renderCallbackInput); } // The terminate callback isn't easy to implement for DR. The NativeImage backend // calls it when the GlView is being destroyed. For DrawableView it means that // the RenderCallback won't be executed (as it is a part of graphics pipeline). - // We don't have currenty no way to know whether the View will be destroyed and + // We don't have currently have any way to know whether the View will be destroyed and // to execute last native draw command in the pipeline. // // else if( mCurrentViewState == ViewState::TERMINATE )