From 6331f94544c2ec45f835eabcd2f3e72d4f75e237 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Thu, 22 Mar 2018 11:59:38 +0100 Subject: [PATCH] OpenGL GAL: safer error handling Replaced assert() with wxCHECK(), so in case of problems methods return instead of continuing with invalid state/data, wherever possible. --- common/gal/opengl/cached_container_gpu.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/common/gal/opengl/cached_container_gpu.cpp b/common/gal/opengl/cached_container_gpu.cpp index f3f5498011..e183c7f957 100644 --- a/common/gal/opengl/cached_container_gpu.cpp +++ b/common/gal/opengl/cached_container_gpu.cpp @@ -29,7 +29,6 @@ #include #include -#include #ifdef __WXDEBUG__ #include @@ -62,19 +61,19 @@ CACHED_CONTAINER_GPU::~CACHED_CONTAINER_GPU() void CACHED_CONTAINER_GPU::Map() { - assert( !IsMapped() ); + wxCHECK( !IsMapped(), /*void*/ ); glBindBuffer( GL_ARRAY_BUFFER, m_glBufferHandle ); m_vertices = static_cast( glMapBuffer( GL_ARRAY_BUFFER, GL_READ_WRITE ) ); - checkGlError( "mapping vertices buffer" ); - m_isMapped = true; + if( checkGlError( "mapping vertices buffer" ) == GL_NO_ERROR ) + m_isMapped = true; } void CACHED_CONTAINER_GPU::Unmap() { - assert( IsMapped() ); + wxCHECK( IsMapped(), /*void*/ ); glUnmapBuffer( GL_ARRAY_BUFFER ); checkGlError( "unmapping vertices buffer" ); @@ -91,7 +90,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize ) if( !m_useCopyBuffer ) return defragmentResizeMemcpy( aNewSize ); - assert( IsMapped() ); + wxCHECK( IsMapped(), false ); wxLogTrace( "GAL_CACHED_CONTAINER_GPU", wxT( "Resizing & defragmenting container from %d to %d" ), m_currentSize, aNewSize ); @@ -109,7 +108,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize ) // glCopyBufferSubData requires a buffer to be unmapped glUnmapBuffer( GL_ARRAY_BUFFER ); - // Create the destination buffer + // Create a new destination buffer glGenBuffers( 1, &newBuffer ); // It would be best to use GL_COPY_WRITE_BUFFER here, @@ -117,7 +116,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize ) #ifdef __WXDEBUG__ GLint eaBuffer = -1; glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, &eaBuffer ); - assert( eaBuffer == 0 ); + wxASSERT( eaBuffer == 0 ); #endif /* __WXDEBUG__ */ glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, newBuffer ); glBufferData( GL_ELEMENT_ARRAY_BUFFER, aNewSize * VERTEX_SIZE, NULL, GL_DYNAMIC_DRAW ); @@ -158,6 +157,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize ) // Cleanup glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); + // Previously we have unmapped the array buffer, now when it is also // unbound, it may be officially marked as unmapped m_isMapped = false; @@ -189,7 +189,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize ) bool CACHED_CONTAINER_GPU::defragmentResizeMemcpy( unsigned int aNewSize ) { - assert( IsMapped() ); + wxCHECK( IsMapped(), false ); wxLogTrace( "GAL_CACHED_CONTAINER_GPU", wxT( "Resizing & defragmenting container (memcpy) from %d to %d" ), @@ -214,7 +214,7 @@ bool CACHED_CONTAINER_GPU::defragmentResizeMemcpy( unsigned int aNewSize ) #ifdef __WXDEBUG__ GLint eaBuffer = -1; glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, &eaBuffer ); - assert( eaBuffer == 0 ); + wxASSERT( eaBuffer == 0 ); #endif /* __WXDEBUG__ */ glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, newBuffer ); glBufferData( GL_ELEMENT_ARRAY_BUFFER, aNewSize * VERTEX_SIZE, NULL, GL_DYNAMIC_DRAW );