diff Framework/Scene2D/Internals/OpenGLFloatTextureRenderer.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 4d1f57773b5b
children 177e7d431cd1 2d8ab34c8c91
line wrap: on
line diff
--- a/Framework/Scene2D/Internals/OpenGLFloatTextureRenderer.cpp	Tue Aug 06 15:07:23 2019 +0200
+++ b/Framework/Scene2D/Internals/OpenGLFloatTextureRenderer.cpp	Sat Aug 10 13:07:31 2019 +0200
@@ -28,15 +28,19 @@
     void OpenGLFloatTextureRenderer::UpdateInternal(const FloatTextureSceneLayer& layer,
                                                     bool loadTexture)
     {
-      if (loadTexture)
+      if (!context_.IsContextLost())
       {
-        context_.MakeCurrent();
-        texture_.reset(new OpenGLFloatTextureProgram::Data(layer.GetTexture(), layer.IsLinearInterpolation()));
+        if (loadTexture)
+        {
+          context_.MakeCurrent();
+          texture_.reset(new OpenGLFloatTextureProgram::Data(
+            context_, layer.GetTexture(), layer.IsLinearInterpolation()));
+        }
+
+        layerTransform_ = layer.GetTransform();
+        layer.GetWindowing(windowCenter_, windowWidth_);
+        invert_ = layer.IsInverted();
       }
-
-      layerTransform_ = layer.GetTransform();
-      layer.GetWindowing(windowCenter_, windowWidth_);
-      invert_ = layer.IsInverted();
     }
 
 
@@ -54,7 +58,7 @@
                                             unsigned int canvasWidth,
                                             unsigned int canvasHeight)
     {
-      if (texture_.get() != NULL)
+      if (!context_.IsContextLost() && texture_.get() != NULL)
       {
         program_.Apply(*texture_, AffineTransform2D::Combine(transform, layerTransform_), 
                        windowCenter_, windowWidth_, invert_);