{
DSRenderEngineDaliImpl::DSRenderEngineDaliImpl(std::shared_ptr<IDSBufferQueue> bufferQueue)
- : __bufferQueue(bufferQueue)
+ : __bufferQueue(bufferQueue),
+ __needToRender(false)
{
tbm_surface_queue_h nativeBufferQueue = (tbm_surface_queue_h)bufferQueue->getNativeBufferQueue();
__offscreenApplication = OffscreenApplication::New(nativeBufferQueue, true, OffscreenApplication::RenderMode::MANUAL);
{
std::shared_ptr<DSRenderView> renderView = std::make_shared<DSRenderViewDaliImpl>(window, __offscreenApplication.GetWindow());
+ // callbacks
+ window->registerCallbackBufferChanged(this, std::bind(&DSRenderEngineDaliImpl::__onWindowUpdated, this, std::placeholders::_1));
+
return renderView;
}
bool DSRenderEngineDaliImpl::renderFrame()
{
- Adaptor::Get().RenderOnce();
+ if (__needToRender)
+ Adaptor::Get().RenderOnce();
+ __needToRender = false;
return true;
}
+void DSRenderEngineDaliImpl::__onWindowUpdated(std::shared_ptr<IDSBuffer> buffer)
+{
+ if (!__needToRender) {
+ DSLOG_DBG("DSRenderEngineDaliImpl", "Something updated!! with buffer(%p)", buffer.get());
+ __needToRender = true;
+ }
+}
+
} // namespace display_server
namespace display_server
{
-class DSRenderEngineDaliImpl : public IDSRenderEngine, public Dali::ConnectionTracker
+class DSRenderEngineDaliImpl : public IDSRenderEngine, public Dali::ConnectionTracker, public DSObject
{
public:
DSRenderEngineDaliImpl(std::shared_ptr<IDSBufferQueue> bufferQueue);
void onInitialize();
private:
+ void __onWindowUpdated(std::shared_ptr<IDSBuffer> buffer);
+
std::shared_ptr<IDSBufferQueue> __bufferQueue;
Dali::OffscreenApplication __offscreenApplication;
+
+ bool __needToRender;
};
}