Mercurial > hg > orthanc-stone
diff Framework/OpenGL/OpenGLShader.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 | 58e1faeafb1b |
children | a7351ad54960 |
line wrap: on
line diff
--- a/Framework/OpenGL/OpenGLShader.cpp Tue Aug 06 15:07:23 2019 +0200 +++ b/Framework/OpenGL/OpenGLShader.cpp Sat Aug 10 13:07:31 2019 +0200 @@ -37,6 +37,7 @@ sourceString[0] = source.c_str(); sourceStringLengths[0] = static_cast<GLint>(source.length()); GLuint shader = glCreateShader(type); + ORTHANC_OPENGL_CHECK("glCreateShader"); if (shader == 0) { @@ -47,18 +48,24 @@ { // Assign and compile the source to the shader object glShaderSource(shader, 1, sourceString, sourceStringLengths); + ORTHANC_OPENGL_CHECK("glShaderSource"); glCompileShader(shader); + ORTHANC_OPENGL_CHECK("glCompileShader"); // Check if there were errors int infoLen = 0; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen); + ORTHANC_OPENGL_CHECK("glGetShaderiv"); if (infoLen > 1) // Might be equal to 1, which amounts to no error { std::string infoLog; infoLog.resize(infoLen + 1); glGetShaderInfoLog(shader, infoLen, NULL, &infoLog[0]); + ORTHANC_OPENGL_CHECK("glGetShaderInfoLog"); + ORTHANC_OPENGL_TRACE_CURRENT_CONTEXT("About to call glDeleteShader"); glDeleteShader(shader); + ORTHANC_OPENGL_CHECK("glDeleteShader"); throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Error while creating an OpenGL shader: " + infoLog); @@ -81,13 +88,36 @@ OpenGLShader::~OpenGLShader() { - if (isValid_) + try + { + if (isValid_) + { + ORTHANC_OPENGL_TRACE_CURRENT_CONTEXT("About to call glDeleteShader"); + glDeleteShader(shader_); + ORTHANC_OPENGL_CHECK("glDeleteShader"); + } + } + catch (const Orthanc::OrthancException& e) { - glDeleteShader(shader_); + if (e.HasDetails()) + { + LOG(ERROR) << "OrthancException in ~OpenGLShader: " << e.What() << " Details: " << e.GetDetails(); + } + else + { + LOG(ERROR) << "OrthancException in ~OpenGLShader: " << e.What(); + } + } + catch (const std::exception& e) + { + LOG(ERROR) << "std::exception in ~OpenGLShader: " << e.what(); + } + catch (...) + { + LOG(ERROR) << "Unknown exception in ~OpenGLShader"; } } - GLuint OpenGLShader::Release() { if (isValid_)