WindowSystem: Forced composition should also redraw HW layers
authorRahul Singhal <rasinghal@nvidia.com>
Fri, 22 Jun 2012 10:26:41 +0000 (15:56 +0530)
committerTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Tue, 10 Jul 2012 06:14:00 +0000 (23:14 -0700)
LayerManagerPlugins/Renderers/Graphic/include/WindowSystems/BaseWindowSystem.h
LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLESGraphicSystem.cpp
LayerManagerPlugins/Renderers/Graphic/src/GraphicSystems/GLXGraphicSystem.cpp
LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/WaylandBaseWindowSystem.cpp
LayerManagerPlugins/Renderers/Graphic/src/WindowSystems/X11WindowSystem.cpp
LayerManagerPlugins/Renderers/Platform/GLXRenderer/src/X11GLXRenderer.cpp
LayerManagerPlugins/Renderers/Platform/WaylandGLESRenderer/src/WaylandGLESRenderer.cpp
LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp

index 00bd2a4..3019a72 100644 (file)
@@ -185,7 +185,7 @@ void GLESGraphicsystem::checkRenderLayer()
 
     m_currentLayer->damaged = false;
 
-    if (!(m_baseWindowSystem->m_damaged && m_currentLayer->getLayerType() != Hardware))
+    if (!m_baseWindowSystem->m_forceComposition && (!m_baseWindowSystem->m_damaged || m_currentLayer->getLayerType() == Hardware))
     {
         if (m_currentLayer->renderPropertyChanged)
         {
index 73ab5ee..fbaa4f3 100644 (file)
@@ -254,7 +254,7 @@ void GLXGraphicsystem::checkRenderLayer()
 
     m_currentLayer->damaged = false;
 
-    if (!(m_baseWindowSystem->m_damaged && m_currentLayer->getLayerType() != Hardware))
+    if (!m_baseWindowSystem->m_forceComposition && (!m_baseWindowSystem->m_damaged || m_currentLayer->getLayerType() == Hardware))
     {
         if (m_currentLayer->renderPropertyChanged)
         {
index 61820bd..16d1c76 100644 (file)
@@ -311,7 +311,7 @@ void WaylandBaseWindowSystem::CheckRedrawAllLayers()
 void WaylandBaseWindowSystem::RedrawAllLayers()
 {
     std::list<Layer*> layers = m_pScene->getCurrentRenderOrder();
-       bool bRedraw = m_damaged || (m_systemState == REDRAW_STATE);
+    bool bRedraw = m_forceComposition || m_damaged || (m_systemState == REDRAW_STATE);
 
     // m_damaged represents that SW composition is required
     // At this point if a layer has damaged = true then it must be a HW layer that needs update.
@@ -327,7 +327,7 @@ void WaylandBaseWindowSystem::RedrawAllLayers()
     {
         if ((*current)->getLayerType() == Hardware)
         {
-            if ((*current)->damaged)
+            if (m_forceComposition || (*current)->damaged)
             {
                 renderHWLayer(*current);
                 (*current)->damaged = false;
@@ -377,7 +377,7 @@ void WaylandBaseWindowSystem::Redraw()
 
     m_pScene->unlockScene();
 
-    if (m_damaged || (m_systemState == REDRAW_STATE))
+    if (m_forceComposition || m_damaged || (m_systemState == REDRAW_STATE))
     {
         // TODO: This block won't be executed for HW only changes
         // Is that acceptable?
@@ -389,6 +389,7 @@ void WaylandBaseWindowSystem::Redraw()
         calculateFps();
 
         /* Reset the damage flag, all is up to date */
+        m_forceComposition = false;
         m_damaged = false;
         m_systemState = IDLE_STATE;
     }
index 8cee5df..f50eac4 100644 (file)
@@ -610,7 +610,7 @@ void X11WindowSystem::RedrawAllLayers()
     // m_damaged represents that SW composition is required
     // At this point if a layer has damaged = true then it must be a HW layer that needs update.
     // A SW layer which needs update will make m_damaged = true
-    if (m_damaged)
+    if (m_forceComposition || m_damaged)
     {
         graphicSystem->activateGraphicContext();
         graphicSystem->clearBackground();
@@ -619,20 +619,20 @@ void X11WindowSystem::RedrawAllLayers()
     {
         if ((*current)->getLayerType() == Hardware)
         {
-            if ((*current)->damaged)
+            if (m_forceComposition || (*current)->damaged)
             {
                 renderHWLayer(*current);
                 (*current)->damaged = false;
             }
         }
-        else if (m_damaged)
+        else if (m_forceComposition || m_damaged)
         {
             graphicSystem->beginLayer(*current);
             graphicSystem->renderSWLayer();
             graphicSystem->endLayer();
         }
     }
-    if (m_damaged)
+    if (m_forceComposition || m_damaged)
     {
         graphicSystem->swapBuffers();
         graphicSystem->releaseGraphicContext();
@@ -656,7 +656,7 @@ void X11WindowSystem::Redraw()
 
     m_pScene->unlockScene();
 
-    if (m_damaged)
+    if (m_forceComposition || m_damaged)
     {
         // TODO: This block won't be executed for HW only changes
         // Is that acceptable?
@@ -668,6 +668,7 @@ void X11WindowSystem::Redraw()
         calculateFps();
 
         /* Reset the damage flag, all is up to date */
+        m_forceComposition = false;
         m_damaged = false;
     }
 }
index 6c88aee..c58c292 100644 (file)
@@ -148,7 +148,7 @@ void X11GLXRenderer::signalWindowSystemRedraw()
 
 void X11GLXRenderer::forceCompositionWindowSystem()
 {
-    m_pWindowSystem->m_damaged = true;
+    m_pWindowSystem->m_forceComposition = true;
 }
 
 extern "C" IRenderer* createX11GLXRenderer(Scene* pScene) {
index 73ad262..51071d0 100644 (file)
@@ -146,7 +146,7 @@ uint WaylandGLESRenderer::getNumberOfHardwareLayers(uint screenID)
 uint* WaylandGLESRenderer::getScreenResolution(uint screenID)
 {
     uint screen_id;
-    screen_id = screenID;   
+    screen_id = screenID;
     // TODO provide value of real screen here
     uint * resolution = new uint[2];
     resolution[0] = m_width;
@@ -158,7 +158,7 @@ uint* WaylandGLESRenderer::getScreenIDs(uint* length)
 {
     // TODO necessary to implement
     uint* screenIDS = new uint[1];
-       screenIDS[0] = 0;
+    screenIDS[0] = 0;
     *length = 1;
     return screenIDS;
 }
@@ -170,18 +170,18 @@ void WaylandGLESRenderer::signalWindowSystemRedraw()
 
 void WaylandGLESRenderer::forceCompositionWindowSystem()
 {
-    m_pWindowSystem->m_damaged = true;
+    m_pWindowSystem->m_forceComposition = true;
 }
 
 Shader* WaylandGLESRenderer::createShader(const string* vertexName, const string* fragmentName)  
 {
     Shader *result = NULL;
     m_pWindowSystem->setSystemState(WAKEUP_STATE);
-    m_pWindowSystem->wakeUpRendererThread();    
+    m_pWindowSystem->wakeUpRendererThread();
     m_pGraphicSystem->activateGraphicContext();
     result = Shader::createShader(*vertexName,*fragmentName);
     m_pGraphicSystem->releaseGraphicContext();
-    m_pWindowSystem->setSystemState(IDLE_STATE);   
+    m_pWindowSystem->setSystemState(IDLE_STATE);
     return result;
 }
 
index e2535ba..cd5789b 100644 (file)
@@ -158,18 +158,18 @@ void X11GLESRenderer::signalWindowSystemRedraw()
 
 void X11GLESRenderer::forceCompositionWindowSystem()
 {
-    m_pWindowSystem->m_damaged = true;
+    m_pWindowSystem->m_forceComposition = true;
 }
 
 Shader* X11GLESRenderer::createShader(const string* vertexName, const string* fragmentName)
 {
     Shader *result = NULL;
     m_pWindowSystem->setSystemState(WAKEUP_STATE);
-    m_pWindowSystem->wakeUpRendererThread();    
+    m_pWindowSystem->wakeUpRendererThread();
     m_pGraphicSystem->activateGraphicContext();
     result = Shader::createShader(*vertexName,*fragmentName);
     m_pGraphicSystem->releaseGraphicContext();
-    m_pWindowSystem->setSystemState(IDLE_STATE);   
+    m_pWindowSystem->setSystemState(IDLE_STATE);
     return result;
 }