Mercurial > hg > orthanc-stone
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(); + } } } }