Check GLEW functions exist before calling them
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6235
This commit is contained in:
parent
33385d0bb0
commit
fe415c4134
|
@ -67,7 +67,8 @@ CACHED_CONTAINER_GPU::~CACHED_CONTAINER_GPU()
|
||||||
if( m_isMapped )
|
if( m_isMapped )
|
||||||
Unmap();
|
Unmap();
|
||||||
|
|
||||||
glDeleteBuffers( 1, &m_glBufferHandle );
|
if( glDeleteBuffers )
|
||||||
|
glDeleteBuffers( 1, &m_glBufferHandle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,6 +76,10 @@ void CACHED_CONTAINER_GPU::Map()
|
||||||
{
|
{
|
||||||
wxCHECK( !IsMapped(), /*void*/ );
|
wxCHECK( !IsMapped(), /*void*/ );
|
||||||
|
|
||||||
|
// OpenGL version might suddenly stop being available in Windows when an RDP session is started
|
||||||
|
if( !glBindBuffer )
|
||||||
|
throw std::runtime_error( "OpenGL no longer available!" );
|
||||||
|
|
||||||
glBindBuffer( GL_ARRAY_BUFFER, m_glBufferHandle );
|
glBindBuffer( GL_ARRAY_BUFFER, m_glBufferHandle );
|
||||||
m_vertices = static_cast<VERTEX*>( glMapBuffer( GL_ARRAY_BUFFER, GL_READ_WRITE ) );
|
m_vertices = static_cast<VERTEX*>( glMapBuffer( GL_ARRAY_BUFFER, GL_READ_WRITE ) );
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,9 @@ CACHED_CONTAINER_RAM::CACHED_CONTAINER_RAM( unsigned int aSize ) :
|
||||||
|
|
||||||
CACHED_CONTAINER_RAM::~CACHED_CONTAINER_RAM()
|
CACHED_CONTAINER_RAM::~CACHED_CONTAINER_RAM()
|
||||||
{
|
{
|
||||||
glDeleteBuffers( 1, &m_verticesBuffer );
|
if( glDeleteBuffers )
|
||||||
|
glDeleteBuffers( 1, &m_verticesBuffer );
|
||||||
|
|
||||||
free( m_vertices );
|
free( m_vertices );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,8 +85,11 @@ GPU_CACHED_MANAGER::~GPU_CACHED_MANAGER()
|
||||||
{
|
{
|
||||||
if( m_buffersInitialized )
|
if( m_buffersInitialized )
|
||||||
{
|
{
|
||||||
glBindBuffer( GL_ARRAY_BUFFER, 0 );
|
if( glBindBuffer )
|
||||||
glDeleteBuffers( 1, &m_indicesBuffer );
|
glBindBuffer( GL_ARRAY_BUFFER, 0 );
|
||||||
|
|
||||||
|
if( glDeleteBuffers )
|
||||||
|
glDeleteBuffers( 1, &m_indicesBuffer );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -400,8 +400,11 @@ void OPENGL_COMPOSITOR::clean()
|
||||||
|
|
||||||
m_buffers.clear();
|
m_buffers.clear();
|
||||||
|
|
||||||
glDeleteFramebuffersEXT( 1, &m_mainFbo );
|
if( glDeleteFramebuffersEXT )
|
||||||
glDeleteRenderbuffersEXT( 1, &m_depthBuffer );
|
glDeleteFramebuffersEXT( 1, &m_mainFbo );
|
||||||
|
|
||||||
|
if( glDeleteRenderbuffersEXT )
|
||||||
|
glDeleteRenderbuffersEXT( 1, &m_depthBuffer );
|
||||||
|
|
||||||
m_initialized = false;
|
m_initialized = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,20 +59,23 @@ SHADER::~SHADER()
|
||||||
|
|
||||||
if( isProgramCreated )
|
if( isProgramCreated )
|
||||||
{
|
{
|
||||||
// Delete the shaders and the program
|
if( glIsShader )
|
||||||
for( std::deque<GLuint>::iterator it = shaderNumbers.begin();
|
|
||||||
it != shaderNumbers.end(); ++it )
|
|
||||||
{
|
{
|
||||||
GLuint shader = *it;
|
// Delete the shaders and the program
|
||||||
|
for( std::deque<GLuint>::iterator it = shaderNumbers.begin(); it != shaderNumbers.end();
|
||||||
if( glIsShader( shader ) )
|
++it )
|
||||||
{
|
{
|
||||||
glDetachShader( programNumber, shader );
|
GLuint shader = *it;
|
||||||
glDeleteShader( shader );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
glDeleteProgram( programNumber );
|
if( glIsShader( shader ) )
|
||||||
|
{
|
||||||
|
glDetachShader( programNumber, shader );
|
||||||
|
glDeleteShader( shader );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glDeleteProgram( programNumber );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue