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?
--- 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);