Mercurial > mplayer.hg
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 }