Adam Strzelecki to SDL
authorSam Lantinga <slouken@libsdl.org>
Wed, 17 Feb 2010 04:42:52 +0000
changeset 3707d8308bc267bc
parent 3706 9676307d93be
child 3708 d3f7cf8b0db0
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
     1.1 --- a/src/video/SDL_renderer_gl.c	Sun Feb 14 15:55:10 2010 +0000
     1.2 +++ b/src/video/SDL_renderer_gl.c	Wed Feb 17 04:42:52 2010 +0000
     1.3 @@ -829,11 +829,14 @@
     1.4  
     1.5      /* YUV formats use RGBA but are really two bytes per pixel */
     1.6      if (internalFormat == GL_RGBA && bytes_per_pixel(texture->format) < 4) {
     1.7 +        texture_w /= 2;
     1.8 +        if (data->type == GL_TEXTURE_2D) {
     1.9 +            data->texw *= 2.0f;
    1.10 +        }
    1.11          data->HACK_RYAN_FIXME = 2;
    1.12      } else {
    1.13          data->HACK_RYAN_FIXME = 1;
    1.14      }
    1.15 -    texture_w /= data->HACK_RYAN_FIXME;
    1.16  
    1.17      data->format = format;
    1.18      data->formattype = type;