changeset 13653:799f81d3cb19

added gl_common for code used by both vo_gl.c and vo_gl2.c.
author reimar
date Sun, 17 Oct 2004 13:28:22 +0000
parents 3427a9f4b6e3
children fe1282bdee25
files configure libvo/gl_common.c libvo/gl_common.h libvo/vo_gl.c libvo/vo_gl2.c
diffstat 5 files changed, 41 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/configure	Sat Oct 16 14:10:57 2004 +0000
+++ b/configure	Sun Oct 17 13:28:22 2004 +0000
@@ -3526,9 +3526,9 @@
   _def_gl='#define HAVE_GL 1'
   if test "$_gl_win32" = yes ; then
     _def_gl_win32='#define GL_WIN32 1' 
-    _vosrc="$_vosrc vo_gl2.c w32_common.c"
+    _vosrc="$_vosrc vo_gl2.c w32_common.c gl_common.c"
   else
-    _vosrc="$_vosrc vo_gl.c vo_gl2.c"
+    _vosrc="$_vosrc vo_gl.c vo_gl2.c gl_common.c"
   fi
   _vomodules="opengl $_vomodules"
 else
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libvo/gl_common.c	Sun Oct 17 13:28:22 2004 +0000
@@ -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);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libvo/gl_common.h	Sun Oct 17 13:28:22 2004 +0000
@@ -0,0 +1,8 @@
+#ifndef __GL_COMMON_H__
+#define __GL_COMMON_H__
+
+#include <GL/gl.h>
+
+void glAdjustAlignment(int stride);
+
+#endif
--- a/libvo/vo_gl.c	Sat Oct 16 14:10:57 2004 +0000
+++ b/libvo/vo_gl.c	Sun Oct 17 13:28:22 2004 +0000
@@ -21,6 +21,7 @@
 
 #include <GL/gl.h>
 
+#include "gl_common.h"
 #include "x11_common.h"
 #include "aspect.h"
 
@@ -180,7 +181,6 @@
 	XSizeHints hint;
 	XVisualInfo *vinfo;
 	XEvent xev;
-	GLint gl_alignment;
 
 //	XGCValues xgcv;
 
@@ -280,15 +280,7 @@
   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 @@
                                  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 @@
   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 @@
                  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);
+#endif
   glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
-#endif
+  glAdjustAlignment(image_width * image_bytes);
 
   glBindTexture(GL_TEXTURE_2D, 0);
   free(clearTexture);
--- a/libvo/vo_gl2.c	Sat Oct 16 14:10:57 2004 +0000
+++ b/libvo/vo_gl2.c	Sun Oct 17 13:28:22 2004 +0000
@@ -31,6 +31,7 @@
 #endif
 #include <errno.h>
 
+#include "gl_common.h"
 #ifdef GL_WIN32
     #include "w32_common.h"
 #else
@@ -96,7 +97,6 @@
 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 @@
    * 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 @@
   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);