Fixed the shader fragment problems using 2 byte YUV data in a 4 byte RGB
authorSam Lantinga <slouken@libsdl.org>
Sat, 06 Dec 2008 18:22:28 +0000
changeset 2843 e919f2e3700d
parent 2842 97ba0be8b565
child 2844 70b63882d2ef
Fixed the shader fragment problems using 2 byte YUV data in a 4 byte RGB texture. This is a total hack though. Maybe we should be using a different texture format?
src/video/SDL_renderer_gl.c
--- a/src/video/SDL_renderer_gl.c	Sat Dec 06 17:50:50 2008 +0000
+++ b/src/video/SDL_renderer_gl.c	Sat Dec 06 18:22:28 2008 +0000
@@ -184,6 +184,7 @@
     void *pixels;
     int pitch;
     SDL_DirtyRectList dirty;
+int HACK_RYAN_FIXME;
 } GL_TextureData;
 
 
@@ -732,8 +733,11 @@
 
     /* YUV formats use RGBA but are really two bytes per pixel */
     if (internalFormat == GL_RGBA && bytes_per_pixel(texture->format) < 4) {
-        texture_w = (texture_w * bytes_per_pixel(texture->format)) / 4;
+data->HACK_RYAN_FIXME = 2;
+    } else {
+data->HACK_RYAN_FIXME = 1;
     }
+    texture_w /= data->HACK_RYAN_FIXME;
 
     data->format = format;
     data->formattype = type;
@@ -863,7 +867,7 @@
     }
     renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
     renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH,
-                              pitch / bytes_per_pixel(texture->format));
+                              (pitch / bytes_per_pixel(texture->format) / ((GL_TextureData *)texture->driverdata)->HACK_RYAN_FIXME));
 }
 
 static int
@@ -1011,7 +1015,7 @@
                           rect->x * bpp);
 printf("texsubimage2d(%d,%d,%d,%d)\n", (int) rect->x, (int) rect->y, (int) rect->w, (int) rect->h);
             data->glTexSubImage2D(texturedata->type, 0, rect->x, rect->y,
-                                  rect->w, rect->h, texturedata->format,
+                                  rect->w / texturedata->HACK_RYAN_FIXME, rect->h, texturedata->format,
                                   texturedata->formattype, pixels);
         }
         SDL_ClearDirtyRects(&texturedata->dirty);