ecere/gfx/newFonts/drawManager: Avoiding crashes on VBO not available
authorJerome St-Louis <jerome@ecere.com>
Sat, 16 Jan 2016 08:18:01 +0000 (03:18 -0500)
committerJerome St-Louis <jerome@ecere.com>
Mon, 21 Nov 2016 14:18:43 +0000 (09:18 -0500)
ecere/src/gfx/newFonts/drawManager.ec

index 85c9441..5f88f6b 100644 (file)
@@ -1165,9 +1165,12 @@ public:
          drawBuffer->glType = GL_FLOAT;
          drawBuffer->vertexCount = 0;
          drawBuffer->vertexAlloc = DM_CONTEXT_DRAW_BUFFER_VERTEX_ALLOC;
-         glGenBuffers( 1, &drawBuffer->vbo );
-         glBindBuffer( GL_ARRAY_BUFFER, drawBuffer->vbo );
-         glBufferData( GL_ARRAY_BUFFER, drawBuffer->vertexAlloc * vertexSize, 0, GL_DYNAMIC_DRAW );
+         if(vboAvailable)
+         {
+            glGenBuffers( 1, &drawBuffer->vbo );
+            glBindBuffer( GL_ARRAY_BUFFER, drawBuffer->vbo );
+            glBufferData( GL_ARRAY_BUFFER, drawBuffer->vertexAlloc * vertexSize, 0, GL_DYNAMIC_DRAW );
+         }
          drawBuffer->vertexBuffer = new byte[drawBuffer->vertexAlloc * vertexSize];
       }
 
@@ -1184,7 +1187,8 @@ public:
       for( i = 0 ; i < DM_CONTEXT_DRAW_BUFFER_COUNT ; i++ )
       {
          DMDrawBuffer *db = &drawBuffer[i];
-         glDeleteBuffers( 1, &db->vbo );
+         if(db->vbo)
+            glDeleteBuffers( 1, &db->vbo );
          delete db->vertexBuffer;
       }
 
@@ -1374,7 +1378,8 @@ public:
      else
        flushDrawImages( );
 
-     glBindBuffer( GL_ARRAY_BUFFER, 0 );
+     if(vboAvailable)
+        glBindBuffer( GL_ARRAY_BUFFER, 0 );
      glabCurArrayBuffer = 0;
      if( !flags.prehistoricOpenGL )
          glUseProgram( prevProgram );