From 999aad1cb03f6449c87963e0101c4e1296d03b29 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 17 Feb 2010 04:42:52 +0000 Subject: [PATCH] Adam Strzelecki to SDL When graphic card has no GL_ARB_texture_rectangle YUV textures mapped with SDL_RenderCopy are stretched 2x horizontally, so only left half of texture is visible. This is due: data->texw = (GLfloat) (texture->w) / texture_w; data->texh = (GLfloat) texture->h / texture_h; But afterwards texture_w /= 2 for YUV texture, but data->texw stays as it was before, while it should be multiplied 2x. This bug can be seen in any program setting env variables: GL_APPLE_ycbcr_422=0 GL_EXT_texture_rectangle=0 GL_ARB_texture_rectangle=0 --- src/video/SDL_renderer_gl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/video/SDL_renderer_gl.c b/src/video/SDL_renderer_gl.c index af8f56ed7..224ed18d6 100644 --- a/src/video/SDL_renderer_gl.c +++ b/src/video/SDL_renderer_gl.c @@ -829,11 +829,14 @@ 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 /= 2; + if (data->type == GL_TEXTURE_2D) { + data->texw *= 2.0f; + } data->HACK_RYAN_FIXME = 2; } else { data->HACK_RYAN_FIXME = 1; } - texture_w /= data->HACK_RYAN_FIXME; data->format = format; data->formattype = type;