diff libvo/gl_common.c @ 17220:a27e52b838e3

support negative stride (flipping) in vo_gl.
author reimar
date Sun, 18 Dec 2005 12:04:08 +0000
parents 724353364790
children 3e49b98ad314
line wrap: on
line diff
--- a/libvo/gl_common.c	Sun Dec 18 11:57:25 2005 +0000
+++ b/libvo/gl_common.c	Sun Dec 18 12:04:08 2005 +0000
@@ -493,6 +493,10 @@
   if (w <= 0 || h <= 0) return;
   if (slice <= 0)
     slice = h;
+  if (stride < 0) {
+    data += h * stride;
+    stride = -stride;
+  }
   // this is not always correct, but should work for MPlayer
   glAdjustAlignment(stride);
   glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / glFmt2bpp(format, type));
@@ -910,16 +914,21 @@
  * \param sy height of texture in pixels
  * \param rect_tex whether this texture uses texture_rectangle extension
  * \param is_yv12 if set, also draw the textures from units 1 and 2
+ * \param flip flip the texture upside down
  * \ingroup gltexture
  */
 void glDrawTex(GLfloat x, GLfloat y, GLfloat w, GLfloat h,
                GLfloat tx, GLfloat ty, GLfloat tw, GLfloat th,
-               int sx, int sy, int rect_tex, int is_yv12) {
+               int sx, int sy, int rect_tex, int is_yv12, int flip) {
   GLfloat tx2 = tx / 2, ty2 = ty / 2, tw2 = tw / 2, th2 = th / 2;
   if (!rect_tex) {
     tx /= sx; ty /= sy; tw /= sx; th /= sy;
     tx2 = tx, ty2 = ty, tw2 = tw, th2 = th;
   }
+  if (flip) {
+    y += h;
+    h = -h;
+  }
   glBegin(GL_QUADS);
   glTexCoord2f(tx, ty);
   if (is_yv12) {