diff Framework/Scene2D/Internals/OpenGLFloatTextureProgram.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 2d8ab34c8c91
line wrap: on
line diff
--- a/Framework/Scene2D/Internals/OpenGLFloatTextureProgram.cpp	Tue Aug 06 15:07:23 2019 +0200
+++ b/Framework/Scene2D/Internals/OpenGLFloatTextureProgram.cpp	Sat Aug 10 13:07:31 2019 +0200
@@ -61,8 +61,13 @@
 {
   namespace Internals
   {
-    OpenGLFloatTextureProgram::Data::Data(const Orthanc::ImageAccessor& texture,
-                                          bool isLinearInterpolation)
+    OpenGLFloatTextureProgram::Data::Data(
+        OpenGL::IOpenGLContext& context
+      , const Orthanc::ImageAccessor& texture
+      , bool isLinearInterpolation) 
+      : texture_(context)
+      , offset_(0.0f)
+      , slope_(0.0f)
     {
       if (texture.GetFormat() != Orthanc::PixelFormat_Float32)
       {
@@ -127,8 +132,9 @@
     }
 
     
-    OpenGLFloatTextureProgram::OpenGLFloatTextureProgram(OpenGL::IOpenGLContext&  context) :
-      program_(context, FRAGMENT_SHADER)
+    OpenGLFloatTextureProgram::OpenGLFloatTextureProgram(OpenGL::IOpenGLContext&  context) 
+      : program_(context, FRAGMENT_SHADER)
+      , context_(context)
     {
     }
 
@@ -139,15 +145,18 @@
                                           float windowWidth,
                                           bool invert)
     {
-      OpenGLTextureProgram::Execution execution(program_, data.GetTexture(), transform);
+      if (!context_.IsContextLost())
+      {
+        OpenGLTextureProgram::Execution execution(program_, data.GetTexture(), transform);
 
-      glUniform1f(execution.GetUniformLocation("u_slope"), data.GetSlope());
-      glUniform1f(execution.GetUniformLocation("u_offset"), data.GetOffset());
-      glUniform1f(execution.GetUniformLocation("u_windowCenter"), windowCenter);
-      glUniform1f(execution.GetUniformLocation("u_windowWidth"), windowWidth);
-      glUniform1f(execution.GetUniformLocation("u_invert"), invert);
+        glUniform1f(execution.GetUniformLocation("u_slope"), data.GetSlope());
+        glUniform1f(execution.GetUniformLocation("u_offset"), data.GetOffset());
+        glUniform1f(execution.GetUniformLocation("u_windowCenter"), windowCenter);
+        glUniform1f(execution.GetUniformLocation("u_windowWidth"), windowWidth);
+        glUniform1f(execution.GetUniformLocation("u_invert"), invert);
 
-      execution.DrawTriangles();
+        execution.DrawTriangles();
+      }
     }
   }
 }