# HG changeset patch # User Sam Lantinga # Date 1228587748 0 # Node ID e919f2e3700d74e6592a531d9ee97117ca4867a5 # Parent 97ba0be8b565b99e1108eedae265a73fdf615f6e 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? diff -r 97ba0be8b565 -r e919f2e3700d 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);