changeset 16233:f00a2826ee11

use GenBuffers to get a buffer number instead of hardcoding 1.
author reimar
date Tue, 16 Aug 2005 17:57:53 +0000
parents 56b82ee3df90
children 31660114d885
files libvo/gl_common.c libvo/gl_common.h libvo/vo_gl.c
diffstat 3 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/gl_common.c	Tue Aug 16 16:02:13 2005 +0000
+++ b/libvo/gl_common.c	Tue Aug 16 17:57:53 2005 +0000
@@ -2,6 +2,8 @@
 #include <string.h>
 #include "gl_common.h"
 
+void (APIENTRY *GenBuffers)(GLsizei, GLuint *);
+void (APIENTRY *DeleteBuffers)(GLsizei, const GLuint *);
 void (APIENTRY *BindBuffer)(GLenum, GLuint);
 GLvoid* (APIENTRY *MapBuffer)(GLenum, GLenum); 
 GLboolean (APIENTRY *UnmapBuffer)(GLenum);
@@ -203,6 +205,12 @@
 static void getFunctions() {
   if (!getProcAddress)
     getProcAddress = setNull;
+  GenBuffers = getProcAddress("glGenBuffers");
+  if (!GenBuffers)
+    GenBuffers = getProcAddress("glGenBuffersARB");
+  DeleteBuffers = getProcAddress("glDeleteBuffers");
+  if (!DeleteBuffers)
+    DeleteBuffers = getProcAddress("glDeleteBuffersARB");
   BindBuffer = getProcAddress("glBindBuffer");
   if (!BindBuffer)
     BindBuffer = getProcAddress("glBindBufferARB");
--- a/libvo/gl_common.h	Tue Aug 16 16:02:13 2005 +0000
+++ b/libvo/gl_common.h	Tue Aug 16 17:57:53 2005 +0000
@@ -85,6 +85,8 @@
 void releaseGlContext(XVisualInfo **vinfo, GLXContext *context);
 #endif
 
+extern void (APIENTRY *GenBuffers)(GLsizei, GLuint *);
+extern void (APIENTRY *DeleteBuffers)(GLsizei, const GLuint *);
 extern void (APIENTRY *BindBuffer)(GLenum, GLuint);
 extern GLvoid* (APIENTRY *MapBuffer)(GLenum, GLenum); 
 extern GLboolean (APIENTRY *UnmapBuffer)(GLenum);
--- a/libvo/vo_gl.c	Tue Aug 16 16:02:13 2005 +0000
+++ b/libvo/vo_gl.c	Tue Aug 16 17:57:53 2005 +0000
@@ -65,6 +65,7 @@
 static GLenum gl_texfmt;
 static GLenum gl_format;
 static GLenum gl_type;
+static GLint gl_buffer;
 static int gl_buffersize;
 
 static int int_pause;
@@ -147,6 +148,7 @@
 
   glClearColor( 0.0f,0.0f,0.0f,0.0f );
   glClear( GL_COLOR_BUFFER_BIT );
+  gl_buffer = 0;
   gl_buffersize = 0;
   err_shown = 0;
   return 1;
@@ -419,7 +421,7 @@
 }
 
 static uint32_t get_image(mp_image_t *mpi) {
-  if (!BindBuffer || !BufferData || !MapBuffer) {
+  if (!GenBuffers || !BindBuffer || !BufferData || !MapBuffer) {
     if (!err_shown)
       mp_msg(MSGT_VO, MSGL_ERR, "[gl] extensions missing for dr\n"
                                 "Expect a _major_ speed penalty\n");
@@ -429,7 +431,9 @@
   if (mpi->flags & MP_IMGFLAG_READABLE) return VO_FALSE;
   if (mpi->type == MP_IMGTYPE_IP || mpi->type == MP_IMGTYPE_IPB)
     return VO_FALSE; // we can not provide readable buffers
-  BindBuffer(GL_PIXEL_UNPACK_BUFFER, 1);
+  if (!gl_buffer)
+    GenBuffers(1, &gl_buffer);
+  BindBuffer(GL_PIXEL_UNPACK_BUFFER, gl_buffer);
   mpi->stride[0] = mpi->width * mpi->bpp / 8;
   if (mpi->stride[0] * mpi->h > gl_buffersize) {
     BufferData(GL_PIXEL_UNPACK_BUFFER, mpi->stride[0] * mpi->h,
@@ -457,7 +461,7 @@
     return VO_TRUE;
   if (mpi->flags & MP_IMGFLAG_DIRECT) {
     data = NULL;
-    BindBuffer(GL_PIXEL_UNPACK_BUFFER, 1);
+    BindBuffer(GL_PIXEL_UNPACK_BUFFER, gl_buffer);
     UnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
     slice = 0; // always "upload" full texture
   }