summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
916d7a8)
To support multi window cases, dali-adaptor count how many times
the window resize event occured.
But in dali-core scene has only bool flag.
So if scene changed multiple times during 1 render time,
surface resized count never be reduced as zero.
So it will keep rendering unlimited.
This patch make we return the number of surface rect changed,
so dali-adaptor can control the scene changed count well.
Change-Id: Ic19ede6ba5095af74ae2db33d37403285cf28a19
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
CreateRenderTarget();
OnAdaptorSet(adaptor);
CreateRenderTarget();
OnAdaptorSet(adaptor);
+
+ // Scene is newly created. Let we increase resize counter
+ mAdaptor->IncreaseSurfaceResizeCounter();
}
void SceneHolder::CreateRenderTarget()
}
void SceneHolder::CreateRenderTarget()
+void Adaptor::IncreaseSurfaceResizeCounter()
+{
+ // Nofify surface resizing before flushing event queue
+ if(mThreadController)
+ {
+ mThreadController->ResizeSurface();
+ }
+}
+
void Adaptor::NotifySceneCreated()
{
GetCore().SceneCreated();
void Adaptor::NotifySceneCreated()
{
GetCore().SceneCreated();
void SurfaceResizeComplete(Dali::RenderSurfaceInterface* surface, SurfaceSize surfaceSize);
/**
void SurfaceResizeComplete(Dali::RenderSurfaceInterface* surface, SurfaceSize surfaceSize);
/**
+ * @brief Increase surface resize completed counter.
+ * This API will be ignored if thread controller is not exist.
+ */
+ void IncreaseSurfaceResizeCounter();
+
+ /**
* Sets layout direction of root by system language
* @param[in] locale System locale
*/
* Sets layout direction of root by system language
* @param[in] locale System locale
*/
auto numberOfPrecompiledShader = precompiledShader->shaderCount;
for(int i = 0; i < numberOfPrecompiledShader; ++i)
{
auto numberOfPrecompiledShader = precompiledShader->shaderCount;
for(int i = 0; i < numberOfPrecompiledShader; ++i)
{
- auto vertexShader = graphics.GetController().GetGlAbstraction().GetVertexShaderPrefix() + std::string(precompiledShader->vertexPrefix[i].data()) + std::string(precompiledShader->vertexShader.data());
+ auto vertexShader = graphics.GetController().GetGlAbstraction().GetVertexShaderPrefix() + std::string(precompiledShader->vertexPrefix[i].data()) + std::string(precompiledShader->vertexShader.data());
auto fragmentShader = graphics.GetController().GetGlAbstraction().GetFragmentShaderPrefix() + std::string(precompiledShader->fragmentPrefix[i].data()) + std::string(precompiledShader->fragmentShader.data());
PreCompileShader(std::move(vertexShader), std::move(fragmentShader));
}
auto fragmentShader = graphics.GetController().GetGlAbstraction().GetFragmentShaderPrefix() + std::string(precompiledShader->fragmentPrefix[i].data()) + std::string(precompiledShader->fragmentShader.data());
PreCompileShader(std::move(vertexShader), std::move(fragmentShader));
}
TRACE_UPDATE_RENDER_SCOPE("DALI_RENDER_SCENE");
Integration::RenderStatus windowRenderStatus;
TRACE_UPDATE_RENDER_SCOPE("DALI_RENDER_SCENE");
Integration::RenderStatus windowRenderStatus;
- const bool sceneSurfaceResized = scene.IsSurfaceRectChanged();
+ const uint32_t sceneSurfaceResized = scene.GetSurfaceRectChangedCount();
// clear previous frame damaged render items rects, buffer history is tracked on surface level
mDamagedRects.clear();
// clear previous frame damaged render items rects, buffer history is tracked on surface level
mDamagedRects.clear();
Rect<int> clippingRect; // Empty for fbo rendering
// Switch to the context of the surface, merge damaged areas for previous frames
Rect<int> clippingRect; // Empty for fbo rendering
// Switch to the context of the surface, merge damaged areas for previous frames
- windowSurface->PreRender(sceneSurfaceResized, mDamagedRects, clippingRect); // Switch GL context
+ windowSurface->PreRender(sceneSurfaceResized > 0u, mDamagedRects, clippingRect); // Switch GL context
// Render the surface
mCore.RenderScene(windowRenderStatus, scene, false, clippingRect);
// Render the surface
mCore.RenderScene(windowRenderStatus, scene, false, clippingRect);
// Buffer swapping now happens when the surface render target is presented.
// If surface is resized, the surface resized count is decreased.
// Buffer swapping now happens when the surface render target is presented.
// If surface is resized, the surface resized count is decreased.
- if(DALI_UNLIKELY(sceneSurfaceResized))
+ if(DALI_UNLIKELY(sceneSurfaceResized > 0u))
+ SurfaceResized(sceneSurfaceResized);
mSurfaceSemaphore.Release(1);
}
mSurfaceSemaphore.Release(1);
}
-void CombinedUpdateRenderController::SurfaceResized()
+void CombinedUpdateRenderController::SurfaceResized(uint32_t resizedCount)
{
ConditionalWait::ScopedLock lock(mUpdateRenderThreadWaitCondition);
{
ConditionalWait::ScopedLock lock(mUpdateRenderThreadWaitCondition);
+
+ if(mSurfaceResized >= resizedCount)
+ {
+ mSurfaceResized -= resizedCount;
+ }
+ else
namespace Adaptor
{
class AdaptorInternalServices;
namespace Adaptor
{
class AdaptorInternalServices;
* Called by the Update/Render thread after a surface has been resized.
*
* This will lock the mutex in mEventThreadWaitCondition
* Called by the Update/Render thread after a surface has been resized.
*
* This will lock the mutex in mEventThreadWaitCondition
+ * @param[in] resizedCount The number of resized count for given surface.
+ void SurfaceResized(uint32_t resizedCount);
/**
* PreCompile shaders for launching time
/**
* PreCompile shaders for launching time
///< Ensures we do not go to sleep if we have not processed the most recent update-request.
volatile unsigned int mUseElapsedTimeAfterWait; ///< Whether we should use the elapsed time after waiting (set by the event-thread, read by the update-render-thread).
///< Ensures we do not go to sleep if we have not processed the most recent update-request.
volatile unsigned int mUseElapsedTimeAfterWait; ///< Whether we should use the elapsed time after waiting (set by the event-thread, read by the update-render-thread).
- volatile unsigned int mIsPreCompileCancelled; ///< Whether we need to do precompile shader.
+ volatile unsigned int mIsPreCompileCancelled; ///< Whether we need to do precompile shader.
Dali::RenderSurfaceInterface* volatile mNewSurface; ///< Will be set to the new-surface if requested (set by the event-thread, read & cleared by the update-render thread).
Dali::RenderSurfaceInterface* volatile mDeletedSurface; ///< Will be set to the deleted surface if requested (set by the event-thread, read & cleared by the update-render thread).
Dali::RenderSurfaceInterface* volatile mNewSurface; ///< Will be set to the new-surface if requested (set by the event-thread, read & cleared by the update-render thread).
Dali::RenderSurfaceInterface* volatile mDeletedSurface; ///< Will be set to the deleted surface if requested (set by the event-thread, read & cleared by the update-render thread).