ecere/gfx/drivers/OpenGL: GLAB fixes to build on Windows
authorJerome St-Louis <jerome@ecere.com>
Thu, 18 Jun 2015 05:42:10 +0000 (01:42 -0400)
committerJerome St-Louis <jerome@ecere.com>
Tue, 22 Dec 2015 06:45:21 +0000 (01:45 -0500)
ecere/src/gfx/drivers/OpenGLDisplayDriver.ec

index 59a24df..75039a7 100644 (file)
@@ -1348,12 +1348,9 @@ public struct GLAB
       if(this != null)
       {
          if(!buffer)
-            glGenBuffers(1, &buffer);
+            GLGenBuffers(1, this);
          if(curArrayBuffer != buffer)
-         {
-            glBindBuffer(GL_ARRAY_BUFFER, buffer);
-            curArrayBuffer = buffer;
-         }
+            GLBindBuffer(GL_ARRAY_BUFFER, buffer);
          glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);  //GL_DYNAMIC_DRAW);
       }
    }
@@ -1362,7 +1359,7 @@ public struct GLAB
    {
       if(this != null)
       {
-         glDeleteBuffers(1, &buffer);
+         GLDeleteBuffers(1, this);
          buffer = 0;
       }
    }
@@ -1370,10 +1367,7 @@ public struct GLAB
    void use(GLBufferContents contents, int n, int type, uint stride, void * pointer)
    {
       if(curArrayBuffer != ((this != null) ? buffer : 0))
-      {
-         glBindBuffer(GL_ARRAY_BUFFER, ((this != null) ? buffer : 0));
-         curArrayBuffer = ((this != null) ? buffer : 0);
-      }
+         GLBindBuffer(GL_ARRAY_BUFFER, ((this != null) ? buffer : 0));
       switch(contents)
       {
          case normal:   glNormalPointer(type, stride, pointer); break;
@@ -1397,13 +1391,10 @@ public struct GLEAB
       if(this != null)
       {
          if(!buffer)
-            glGenBuffers(1, &buffer);
+            GLGenBuffers(1, (GLAB *)this);
 
          if(curElementBuffer != buffer)
-         {
-            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
-            curElementBuffer = buffer;
-         }
+            GLBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
          glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);  //GL_DYNAMIC_DRAW);
       }
    }
@@ -1412,7 +1403,7 @@ public struct GLEAB
    {
       if(this != null)
       {
-         glDeleteBuffers(1, &buffer);
+         GLDeleteBuffers(1, (GLAB *)this);
          buffer = 0;
       }
    }
@@ -1420,10 +1411,7 @@ public struct GLEAB
    void draw(int primType, int count, int type, void * indices)
    {
       if(curElementBuffer != ((this != null) ? buffer : 0))
-      {
-         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ((this != null) ? buffer : 0));
-         curElementBuffer = ((this != null) ? buffer : 0);
-      }
+         GLBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ((this != null) ? buffer : 0));
       glDrawElements(primType, count, type, indices);
    }
 };
@@ -1442,6 +1430,15 @@ public void GLGenBuffers(int count, GLAB * buffers)
 
 public void GLDeleteBuffers(int count, GLAB * buffers)
 {
+   int i;
+   for(i = 0; i < count; i++)
+   {
+      uint buffer = buffers[i].buffer;
+      if(buffer == curArrayBuffer)
+         GLBindBuffer(GL_ARRAY_BUFFER_ARB, 0);
+      else if(buffer == curElementBuffer)
+         GLBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
+   }
 #if defined(__ANDROID__) || defined(__ODROID__)
    glDeleteBuffers(count, (GLuint *)buffers);
 #else