From 0164758aa8879c8344d7191a9258f3aa32eb64d7 Mon Sep 17 00:00:00 2001 From: reimar Date: Sun, 17 Oct 2004 13:28:22 +0000 Subject: added gl_common for code used by both vo_gl.c and vo_gl2.c. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13654 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/gl_common.c | 19 +++++++++++++++++++ libvo/gl_common.h | 8 ++++++++ libvo/vo_gl.c | 23 ++++++++--------------- libvo/vo_gl2.c | 17 ++++------------- 4 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 libvo/gl_common.c create mode 100644 libvo/gl_common.h (limited to 'libvo') diff --git a/libvo/gl_common.c b/libvo/gl_common.c new file mode 100644 index 0000000000..900c8a3ec6 --- /dev/null +++ b/libvo/gl_common.c @@ -0,0 +1,19 @@ +#include "gl_common.h" + +/** + * \brief adjusts the GL_UNPACK_ALGNMENT to fit the stride. + * \param stride number of bytes per line for which alignment should fit. + */ +void glAdjustAlignment(int stride) { + GLint gl_alignment; + if (stride % 8 == 0) + gl_alignment=8; + else if (stride % 4 == 0) + gl_alignment=4; + else if (stride % 2 == 0) + gl_alignment=2; + else + gl_alignment=1; + glPixelStorei (GL_UNPACK_ALIGNMENT, gl_alignment); +} + diff --git a/libvo/gl_common.h b/libvo/gl_common.h new file mode 100644 index 0000000000..2d31c3058f --- /dev/null +++ b/libvo/gl_common.h @@ -0,0 +1,8 @@ +#ifndef __GL_COMMON_H__ +#define __GL_COMMON_H__ + +#include + +void glAdjustAlignment(int stride); + +#endif diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c index 666c3f7ba7..82376e65d3 100644 --- a/libvo/vo_gl.c +++ b/libvo/vo_gl.c @@ -21,6 +21,7 @@ #include +#include "gl_common.h" #include "x11_common.h" #include "aspect.h" @@ -180,7 +181,6 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin XSizeHints hint; XVisualInfo *vinfo; XEvent xev; - GLint gl_alignment; // XGCValues xgcv; @@ -280,15 +280,7 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin glEnable(GL_TEXTURE_2D); // set alignment as default is 4 which will break some files - if ((image_width * image_bytes) % 8 == 0) - gl_alignment=8; - else if ((image_width * image_bytes) % 4 == 0) - gl_alignment=4; - else if ((image_width * image_bytes) % 2 == 0) - gl_alignment=2; - else - gl_alignment=1; - glPixelStorei (GL_UNPACK_ALIGNMENT, gl_alignment); + glAdjustAlignment(image_width * image_bytes); mp_msg(MSGT_VO, MSGL_V, "[gl] Creating %dx%d texture...\n",texture_width,texture_height); @@ -330,7 +322,8 @@ static void create_osd_texture(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride) { - int sx = 1, sy = 1; + // initialize to 8 to avoid special-casing on alignment + int sx = 8, sy = 8; GLfloat xcov, ycov; char *clearTexture; while (sx < w) sx *= 2; @@ -346,16 +339,16 @@ static void create_osd_texture(int x0, int y0, int w, int h, memset(clearTexture, 0, sx * sy); // create Textures for OSD part + glAdjustAlignment(stride); + glPixelStorei(GL_UNPACK_ROW_LENGTH, stride); glGenTextures(1, &osdtex[osdtexCnt]); glBindTexture(GL_TEXTURE_2D, osdtex[osdtexCnt]); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, sx, sy, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, clearTexture); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glPixelStorei(GL_UNPACK_ROW_LENGTH, stride); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_LUMINANCE, GL_UNSIGNED_BYTE, src); - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); #ifndef FAST_OSD glGenTextures(1, &osdatex[osdtexCnt]); @@ -364,11 +357,11 @@ static void create_osd_texture(int x0, int y0, int w, int h, GL_LUMINANCE, GL_UNSIGNED_BYTE, clearTexture); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glPixelStorei(GL_UNPACK_ROW_LENGTH, stride); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, srca); - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); #endif + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glAdjustAlignment(image_width * image_bytes); glBindTexture(GL_TEXTURE_2D, 0); free(clearTexture); diff --git a/libvo/vo_gl2.c b/libvo/vo_gl2.c index 60d15bcbca..976ff29838 100644 --- a/libvo/vo_gl2.c +++ b/libvo/vo_gl2.c @@ -31,6 +31,7 @@ #endif #include +#include "gl_common.h" #ifdef GL_WIN32 #include "w32_common.h" #else @@ -96,7 +97,6 @@ static GLint gl_bitmap_format; static char * gl_bitmap_format_s; static GLint gl_bitmap_type; static char * gl_bitmap_type_s; -static int gl_alignment; static int isGL12 = GL_FALSE; static int gl_bilinear=1; @@ -821,16 +821,7 @@ static int initGl(uint32_t d_width, uint32_t d_height) * may give a little speed up for a kinda burst read .. * Also, the default of 4 will break some files. */ - if( (image_width*image_bytes)%8 == 0 ) - gl_alignment=8; - else if( (image_width*image_bytes)%4 == 0 ) - gl_alignment=4; - else if( (image_width*image_bytes)%2 == 0 ) - gl_alignment=2; - else - gl_alignment=1; - - glPixelStorei (GL_UNPACK_ALIGNMENT, gl_alignment); + glAdjustAlignment(image_width*image_bytes); glEnable (GL_TEXTURE_2D); @@ -842,9 +833,9 @@ static int initGl(uint32_t d_width, uint32_t d_height) free (ImageData); ImageData = NULL; - mp_msg(MSGT_VO, MSGL_V, "[gl2] Using image_bpp=%d, image_bytes=%d, isBGR=%d, \n\tgl_bitmap_format=%s, gl_bitmap_type=%s, \n\tgl_alignment=%d, rgb_size=%d (%d,%d,%d), a_sz=%d, \n\tgl_internal_format=%s\n", + mp_msg(MSGT_VO, MSGL_V, "[gl2] Using image_bpp=%d, image_bytes=%d, isBGR=%d, \n\tgl_bitmap_format=%s, gl_bitmap_type=%s, \n\trgb_size=%d (%d,%d,%d), a_sz=%d, \n\tgl_internal_format=%s\n", image_bpp, image_bytes, image_mode==MODE_BGR, - gl_bitmap_format_s, gl_bitmap_type_s, gl_alignment, + gl_bitmap_format_s, gl_bitmap_type_s, rgb_sz, r_sz, g_sz, b_sz, a_sz, gl_internal_format_s); resize(&d_width, &d_height); -- cgit v1.2.3