summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-05-08 21:38:41 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-05-08 21:38:41 +0000
commitca4e501dc06accd4a44c69a5e289ca25d65999cd (patch)
tree81d6251ccd99428b477d53bbb860d73486b3f363 /libvo
parent8b4237a3ece830303092d47f9f765e6c35fb5f73 (diff)
downloadmpv-ca4e501dc06accd4a44c69a5e289ca25d65999cd.tar.bz2
mpv-ca4e501dc06accd4a44c69a5e289ca25d65999cd.tar.xz
changes to get manyfmts nearer to working and fixed memory leak
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12446 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_gl.c36
1 files changed, 16 insertions, 20 deletions
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c
index 55b32b5dc8..e8a9b5525d 100644
--- a/libvo/vo_gl.c
+++ b/libvo/vo_gl.c
@@ -32,9 +32,6 @@ static vo_info_t info =
LIBVO_EXTERN(gl)
-/* local data */
-static unsigned char *ImageData=NULL;
-
static GLXContext wsGLXContext;
static int wsGLXAttrib[] = { GLX_RGBA,
GLX_RED_SIZE,1,
@@ -48,6 +45,7 @@ static uint32_t image_width;
static uint32_t image_height;
static uint32_t image_bytes;
static int many_fmts;
+static GLenum gl_texfmt;
static GLenum gl_format;
static GLenum gl_type;
@@ -72,17 +70,22 @@ static void resize(int x,int y){
static int find_gl_format (uint32_t format)
{
+ image_bytes = (IMGFMT_RGB_DEPTH(format)+7)/8;
+ gl_texfmt = 3;
switch (format) {
case IMGFMT_RGB24:
gl_format = GL_RGB;
gl_type = GL_UNSIGNED_BYTE;
break;
case IMGFMT_RGB32:
+ gl_texfmt = 4;
gl_format = GL_RGBA;
gl_type = GL_UNSIGNED_BYTE;
break;
case IMGFMT_Y800:
case IMGFMT_Y8:
+ gl_texfmt = 1;
+ image_bytes = 1;
gl_format = GL_LUMINANCE;
gl_type = GL_UNSIGNED_BYTE;
break;
@@ -120,15 +123,20 @@ static int find_gl_format (uint32_t format)
gl_type = GL_UNSIGNED_BYTE;
break;
case IMGFMT_BGR32:
+ gl_texfmt = 4;
gl_format = GL_BGRA;
gl_type = GL_UNSIGNED_BYTE;
break;
#endif
default:
+ gl_texfmt = 4;
gl_format = GL_RGBA;
gl_type = GL_UNSIGNED_BYTE;
return 0;
}
+#ifdef TEXTUREFORMAT_32BPP
+ gl_texfmt = GL_RGB8;
+#endif
return 1;
}
@@ -138,6 +146,7 @@ static int find_gl_format (uint32_t format)
static uint32_t
config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
{
+ unsigned char *ImageData=NULL;
// int screen;
unsigned int fg, bg;
XSizeHints hint;
@@ -230,9 +239,6 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
while(texture_width<image_width || texture_width<image_height) texture_width*=2;
texture_height=texture_width;
- image_bytes=(IMGFMT_RGB_DEPTH(format)+7)/8;
-
- if ( ImageData ) free( ImageData );
ImageData=malloc(texture_width*texture_height*image_bytes);
memset(ImageData,128,texture_width*texture_height*image_bytes);
@@ -249,22 +255,12 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
// glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- /* Old OpenGL 1.0 used the third parameter (known as internalFormat) as an
- integer, which indicated the bytes per pixel (bpp). Later in OpenGL 1.1
- they switched to constants, like GL_RGB8. GL_RGB8 means 8 bits for each
- channel (R,G,B), so it's equal to RGB24. It should be safe to pass the
- image_bytes to internalFormat with newer OpenGL versions.
- Anyway, I'm leaving this so as it was, it doesn't hurt, as OpenGL 1.1 is
- about 10 years old too. -- alex
- */
-#ifdef TEXTUREFORMAT_32BPP
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, texture_width, texture_height, 0,
-#else
- glTexImage2D(GL_TEXTURE_2D, 0, image_bytes, texture_width, texture_height, 0,
-#endif
- (image_bytes==4)?GL_RGBA:GL_BGR, GL_UNSIGNED_BYTE, ImageData);
+ glTexImage2D(GL_TEXTURE_2D, 0, gl_texfmt, texture_width, texture_height, 0,
+ gl_format, gl_type, ImageData);
#endif
+ free (ImageData);
+
resize(d_width,d_height);
glClearColor( 1.0f,0.0f,1.0f,0.0f );