From f03cab2b46b39e393093cfb2e0ce11074481b57b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 6 Dec 2008 18:22:28 +0000 Subject: [PATCH] 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? --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403304 --- src/video/SDL_renderer_gl.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/video/SDL_renderer_gl.c b/src/video/SDL_renderer_gl.c index bc165dc45..587431f26 100644 --- a/src/video/SDL_renderer_gl.c +++ b/src/video/SDL_renderer_gl.c @@ -184,6 +184,7 @@ typedef struct void *pixels; int pitch; SDL_DirtyRectList dirty; +int HACK_RYAN_FIXME; } GL_TextureData; @@ -732,8 +733,11 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) /* 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 @@ SetupTextureUpdate(GL_RenderData * renderdata, SDL_Texture * texture, } 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 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, 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);