diff Framework/Scene2D/Internals/OpenGLBasicPolylineRenderer.cpp @ 947:1091b2adeb5a toa2019081001

Fixed animation frame stopping when returning false + big work on the OpenGL objects to make them lost context-safe + debug code to forcefully tag a context as lost + debug macros
author Benjamin Golinvaux <bgo@osimis.io>
date Sat, 10 Aug 2019 13:07:31 +0200
parents 61ba4b504e9a
children 2d8ab34c8c91
line wrap: on
line diff
--- a/Framework/Scene2D/Internals/OpenGLBasicPolylineRenderer.cpp	Tue Aug 06 15:07:23 2019 +0200
+++ b/Framework/Scene2D/Internals/OpenGLBasicPolylineRenderer.cpp	Sat Aug 10 13:07:31 2019 +0200
@@ -34,53 +34,55 @@
       layer_.Copy(layer);
     }
 
-
     void OpenGLBasicPolylineRenderer::Render(const AffineTransform2D& transform)
     {
-      AffineTransform2D t = AffineTransform2D::Combine(
-        AffineTransform2D::CreateOpenGLClipspace(context_.GetCanvasWidth(), context_.GetCanvasHeight()),
-        transform);
+      if (!context_.IsContextLost())
+      {
+        AffineTransform2D t = AffineTransform2D::Combine(
+          AffineTransform2D::CreateOpenGLClipspace(context_.GetCanvasWidth(), context_.GetCanvasHeight()),
+          transform);
 
-      glUseProgram(0);
+        glUseProgram(0);
 
-      glBegin(GL_LINES);
+        glBegin(GL_LINES);
 
-      for (size_t i = 0; i < layer_.GetChainsCount(); i++)
-      {
-        const Color& color = layer_.GetColor(i);
-        glColor3ub(color.GetRed(), color.GetGreen(), color.GetBlue());
+        for (size_t i = 0; i < layer_.GetChainsCount(); i++)
+        {
+          const Color& color = layer_.GetColor(i);
+          glColor3ub(color.GetRed(), color.GetGreen(), color.GetBlue());
 
-        const PolylineSceneLayer::Chain& chain = layer_.GetChain(i);
+          const PolylineSceneLayer::Chain& chain = layer_.GetChain(i);
 
-        if (chain.size() > 1)
-        {
-          ScenePoint2D previous = chain[0].Apply(t);
+          if (chain.size() > 1)
+          {
+            ScenePoint2D previous = chain[0].Apply(t);
 
-          for (size_t j = 1; j < chain.size(); j++)
-          {
-            ScenePoint2D p = chain[j].Apply(t);
+            for (size_t j = 1; j < chain.size(); j++)
+            {
+              ScenePoint2D p = chain[j].Apply(t);
 
-            glVertex2f(static_cast<GLfloat>(previous.GetX()),
-                       static_cast<GLfloat>(previous.GetY()));
-            glVertex2f(static_cast<GLfloat>(p.GetX()), 
-                       static_cast<GLfloat>(p.GetY()));
+              glVertex2f(static_cast<GLfloat>(previous.GetX()),
+                static_cast<GLfloat>(previous.GetY()));
+              glVertex2f(static_cast<GLfloat>(p.GetX()),
+                static_cast<GLfloat>(p.GetY()));
 
-            previous = p;
-          }
+              previous = p;
+            }
 
-          if (layer_.IsClosedChain(i))
-          {
-            ScenePoint2D p = chain[0].Apply(t);
+            if (layer_.IsClosedChain(i))
+            {
+              ScenePoint2D p = chain[0].Apply(t);
 
-            glVertex2f(static_cast<GLfloat>(previous.GetX()),
-                       static_cast<GLfloat>(previous.GetY()));
-            glVertex2f(static_cast<GLfloat>(p.GetX()),
-                       static_cast<GLfloat>(p.GetY()));
+              glVertex2f(static_cast<GLfloat>(previous.GetX()),
+                static_cast<GLfloat>(previous.GetY()));
+              glVertex2f(static_cast<GLfloat>(p.GetX()),
+                static_cast<GLfloat>(p.GetY()));
+            }
           }
         }
+
+        glEnd();
       }
-
-      glEnd();
     }