fixed: if CLinuxRendererGL::RenderUpdate() is called with clear set to true, it shoul...
authorbobo1on1 <bob-nospam-@xbmc.org>
Wed, 30 Mar 2011 19:58:10 +0000 (21:58 +0200)
committerbobo1on1 <bob-nospam-@xbmc.org>
Wed, 30 Mar 2011 19:59:40 +0000 (21:59 +0200)
xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
xbmc/cores/VideoRenderers/LinuxRendererGL.h

index 6c3ce7e..625f5fc 100644 (file)
@@ -194,6 +194,32 @@ CLinuxRendererGL::~CLinuxRendererGL()
   delete m_dllSwScale;
 }
 
+bool CLinuxRendererGL::ValidateRenderer()
+{
+  if (!m_bConfigured)
+    return false;
+
+  // if its first pass, just init textures and return
+  if (ValidateRenderTarget())
+    return false;
+
+  // this needs to be checked after texture validation
+  if (!m_bImageReady)
+    return false;
+
+  int index = m_iYV12RenderBuffer;
+  YUVBUFFER& buf =  m_buffers[index];
+
+  if (!buf.fields[FIELD_FULL][0].id)
+    return false;
+
+  if (buf.image.flags==0)
+    return false;
+
+  return true;
+}
+
+
 void CLinuxRendererGL::ManageTextures()
 {
   m_NumYV12Buffers = 2;
@@ -536,22 +562,15 @@ void CLinuxRendererGL::Update(bool bPauseDrawing)
 
 void CLinuxRendererGL::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
 {
-  if (!m_bConfigured) return;
-
-  // if its first pass, just init textures and return
-  if (ValidateRenderTarget())
-    return;
-
-  // this needs to be checked after texture validation
-  if (!m_bImageReady) return;
-
   int index = m_iYV12RenderBuffer;
-  YUVBUFFER& buf =  m_buffers[index];
 
-  if (!buf.fields[FIELD_FULL][0].id) return ;
+  if (!ValidateRenderer())
+  {
+    if (clear) //if clear is set, we're expected to overwrite all backbuffer pixels, even if we have nothing to render
+      ClearBackBuffer();
 
-  if (buf.image.flags==0)
     return;
+  }
 
   ManageDisplay();
   ManageTextures();
index 2fad2f2..c32cd92 100644 (file)
@@ -160,6 +160,7 @@ protected:
   void         ClearBackBuffer();
   void         DrawBlackBars();
 
+  bool ValidateRenderer();
   virtual void ManageTextures();
   int  NextYV12Texture();
   virtual bool ValidateRenderTarget();