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.
This commit is contained in:
parent
058f2bffd0
commit
6331f94544
|
@ -29,7 +29,6 @@
|
||||||
#include <gal/opengl/utils.h>
|
#include <gal/opengl/utils.h>
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
#include <wx/log.h>
|
#include <wx/log.h>
|
||||||
|
@ -62,19 +61,19 @@ CACHED_CONTAINER_GPU::~CACHED_CONTAINER_GPU()
|
||||||
|
|
||||||
void CACHED_CONTAINER_GPU::Map()
|
void CACHED_CONTAINER_GPU::Map()
|
||||||
{
|
{
|
||||||
assert( !IsMapped() );
|
wxCHECK( !IsMapped(), /*void*/ );
|
||||||
|
|
||||||
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 ) );
|
||||||
checkGlError( "mapping vertices buffer" );
|
|
||||||
|
|
||||||
m_isMapped = true;
|
if( checkGlError( "mapping vertices buffer" ) == GL_NO_ERROR )
|
||||||
|
m_isMapped = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CACHED_CONTAINER_GPU::Unmap()
|
void CACHED_CONTAINER_GPU::Unmap()
|
||||||
{
|
{
|
||||||
assert( IsMapped() );
|
wxCHECK( IsMapped(), /*void*/ );
|
||||||
|
|
||||||
glUnmapBuffer( GL_ARRAY_BUFFER );
|
glUnmapBuffer( GL_ARRAY_BUFFER );
|
||||||
checkGlError( "unmapping vertices buffer" );
|
checkGlError( "unmapping vertices buffer" );
|
||||||
|
@ -91,7 +90,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize )
|
||||||
if( !m_useCopyBuffer )
|
if( !m_useCopyBuffer )
|
||||||
return defragmentResizeMemcpy( aNewSize );
|
return defragmentResizeMemcpy( aNewSize );
|
||||||
|
|
||||||
assert( IsMapped() );
|
wxCHECK( IsMapped(), false );
|
||||||
|
|
||||||
wxLogTrace( "GAL_CACHED_CONTAINER_GPU",
|
wxLogTrace( "GAL_CACHED_CONTAINER_GPU",
|
||||||
wxT( "Resizing & defragmenting container from %d to %d" ), m_currentSize, aNewSize );
|
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
|
// glCopyBufferSubData requires a buffer to be unmapped
|
||||||
glUnmapBuffer( GL_ARRAY_BUFFER );
|
glUnmapBuffer( GL_ARRAY_BUFFER );
|
||||||
|
|
||||||
// Create the destination buffer
|
// Create a new destination buffer
|
||||||
glGenBuffers( 1, &newBuffer );
|
glGenBuffers( 1, &newBuffer );
|
||||||
|
|
||||||
// It would be best to use GL_COPY_WRITE_BUFFER here,
|
// 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__
|
#ifdef __WXDEBUG__
|
||||||
GLint eaBuffer = -1;
|
GLint eaBuffer = -1;
|
||||||
glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, &eaBuffer );
|
glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, &eaBuffer );
|
||||||
assert( eaBuffer == 0 );
|
wxASSERT( eaBuffer == 0 );
|
||||||
#endif /* __WXDEBUG__ */
|
#endif /* __WXDEBUG__ */
|
||||||
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, newBuffer );
|
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, newBuffer );
|
||||||
glBufferData( GL_ELEMENT_ARRAY_BUFFER, aNewSize * VERTEX_SIZE, NULL, GL_DYNAMIC_DRAW );
|
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
|
// Cleanup
|
||||||
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
|
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
|
||||||
glBindBuffer( GL_ARRAY_BUFFER, 0 );
|
glBindBuffer( GL_ARRAY_BUFFER, 0 );
|
||||||
|
|
||||||
// Previously we have unmapped the array buffer, now when it is also
|
// Previously we have unmapped the array buffer, now when it is also
|
||||||
// unbound, it may be officially marked as unmapped
|
// unbound, it may be officially marked as unmapped
|
||||||
m_isMapped = false;
|
m_isMapped = false;
|
||||||
|
@ -189,7 +189,7 @@ bool CACHED_CONTAINER_GPU::defragmentResize( unsigned int aNewSize )
|
||||||
|
|
||||||
bool CACHED_CONTAINER_GPU::defragmentResizeMemcpy( unsigned int aNewSize )
|
bool CACHED_CONTAINER_GPU::defragmentResizeMemcpy( unsigned int aNewSize )
|
||||||
{
|
{
|
||||||
assert( IsMapped() );
|
wxCHECK( IsMapped(), false );
|
||||||
|
|
||||||
wxLogTrace( "GAL_CACHED_CONTAINER_GPU",
|
wxLogTrace( "GAL_CACHED_CONTAINER_GPU",
|
||||||
wxT( "Resizing & defragmenting container (memcpy) from %d to %d" ),
|
wxT( "Resizing & defragmenting container (memcpy) from %d to %d" ),
|
||||||
|
@ -214,7 +214,7 @@ bool CACHED_CONTAINER_GPU::defragmentResizeMemcpy( unsigned int aNewSize )
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
GLint eaBuffer = -1;
|
GLint eaBuffer = -1;
|
||||||
glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, &eaBuffer );
|
glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, &eaBuffer );
|
||||||
assert( eaBuffer == 0 );
|
wxASSERT( eaBuffer == 0 );
|
||||||
#endif /* __WXDEBUG__ */
|
#endif /* __WXDEBUG__ */
|
||||||
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, newBuffer );
|
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, newBuffer );
|
||||||
glBufferData( GL_ELEMENT_ARRAY_BUFFER, aNewSize * VERTEX_SIZE, NULL, GL_DYNAMIC_DRAW );
|
glBufferData( GL_ELEMENT_ARRAY_BUFFER, aNewSize * VERTEX_SIZE, NULL, GL_DYNAMIC_DRAW );
|
||||||
|
|
Loading…
Reference in New Issue