// Then create a new pixmap/window and new surface
// If the new surface has a different display connection, then the context will be lost
mAdaptorInterfaces.GetDisplayConnectionInterface().Initialize();
- newSurface->InitializeGraphics();
- newSurface->MakeContextCurrent();
+ graphics.ActivateSurfaceContext(newSurface);
// TODO: ReplaceGraphicsSurface doesn't work, InitializeGraphics()
// already creates new surface window, the surface and the context.
// We probably don't need ReplaceGraphicsSurface at all.
// Get Surface Resized flag
sceneSurfaceResized = scene.IsSurfaceRectChanged();
-
- windowSurface->InitializeGraphics();
+ windowSurface->SetIsResizing(sceneSurfaceResized);
// clear previous frame damaged render items rects, buffer history is tracked on surface level
mDamagedRects.clear();
// Collect damage rects
- mCore.PreRender(scene, mDamagedRects);
+ mCore.PreRender(windowRenderStatus, scene, mDamagedRects);
// Render off-screen frame buffers first if any
mCore.RenderScene(windowRenderStatus, scene, true);
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
-
- if(clippingRect.IsEmpty())
+ if(windowRenderStatus.NeedsUpdate())
{
- mDamagedRects.clear();
+ windowSurface->PreRender(sceneSurfaceResized, mDamagedRects, clippingRect); // Switch GL context
}
// Render the surface
mCore.RenderScene(windowRenderStatus, scene, false, clippingRect);
- if(windowRenderStatus.NeedsPostRender())
- {
- windowSurface->PostRender(false, false, sceneSurfaceResized, mDamagedRects); // Swap Buffer with damage
- }
+ // 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(!mUploadWithoutRendering)
+ {
+ graphics.PostRender();
+ }
+
mCore.PostRender(mUploadWithoutRendering);
//////////////////////////////