summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-08-16 17:57:53 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-08-16 17:57:53 +0000
commit44ec3f7566a1dcfc7cb392226c30d05bb0793204 (patch)
treea0f7c71e0a5f1fe4b555aa7777c6f42326bcb21e /libvo
parent1d720784bd086d77059ad207066e6d312444688d (diff)
downloadmpv-44ec3f7566a1dcfc7cb392226c30d05bb0793204.tar.bz2
mpv-44ec3f7566a1dcfc7cb392226c30d05bb0793204.tar.xz
use GenBuffers to get a buffer number instead of hardcoding 1.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16234 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/gl_common.c8
-rw-r--r--libvo/gl_common.h2
-rw-r--r--libvo/vo_gl.c10
3 files changed, 17 insertions, 3 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c
index 78aa26e872..4139bd9de0 100644
--- a/libvo/gl_common.c
+++ b/libvo/gl_common.c
@@ -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 *(*getProcAddress)(const GLubyte *procName) = NULL;
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");
diff --git a/libvo/gl_common.h b/libvo/gl_common.h
index b2368f56d1..e4b8a7606c 100644
--- a/libvo/gl_common.h
+++ b/libvo/gl_common.h
@@ -85,6 +85,8 @@ int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win);
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);
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c
index 9499a0a0ec..d413a48d20 100644
--- a/libvo/vo_gl.c
+++ b/libvo/vo_gl.c
@@ -65,6 +65,7 @@ static GLenum gl_target;
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 @@ static int initGl(uint32_t d_width, uint32_t d_height) {
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 int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
}
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 @@ static uint32_t get_image(mp_image_t *mpi) {
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 @@ static uint32_t draw_image(mp_image_t *mpi) {
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
}