# HG changeset patch # User Sunny Sachanandani # Date 1280727820 -19800 # Node ID 44fd1f0b895a287ef788fb82f3ed32d293770e13 # Parent b70b99ab75b82281605f4916f67d7dee24fc6d31 Fixed a huge bug with texture scaling. diff -r b70b99ab75b8 -r 44fd1f0b895a src/video/x11/SDL_x11render.c --- a/src/video/x11/SDL_x11render.c Wed Jul 28 15:35:18 2010 +0530 +++ b/src/video/x11/SDL_x11render.c Mon Aug 02 11:13:40 2010 +0530 @@ -1021,8 +1021,9 @@ return -1; } texture->blendMode = SDL_BLENDMODE_NONE; + texture->scaleMode = SDL_TEXTURESCALEMODE_NONE; data->blend_op = PictOpSrc; - data->filter = "fast"; + data->filter = NULL; } #endif return 0; @@ -1159,6 +1160,11 @@ switch (texture->scaleMode) { case SDL_TEXTURESCALEMODE_NONE: +#ifdef SDL_VIDEO_DRIVER_X11_XRENDER + if (renderdata->use_xrender) { + data->filter = NULL; + } +#endif return 0; case SDL_TEXTURESCALEMODE_FAST: /* We can sort of fake it for streaming textures */ @@ -1186,8 +1192,8 @@ SDL_Unsupported(); #ifdef SDL_VIDEO_DRIVER_X11_XRENDER if (renderdata->use_xrender) { - texture->scaleMode = SDL_TEXTURESCALEMODE_FAST; - data->filter = FilterFast; + texture->scaleMode = SDL_TEXTURESCALEMODE_NONE; + data->filter = NULL; } else #endif @@ -1900,7 +1906,7 @@ } else { - mask = texturedata->picture; + mask = src; mrect = srcrect; } @@ -1919,8 +1925,8 @@ mrect->x, mrect->y, dstrect->x, dstrect->y, dstrect->w, dstrect->h); } else { - double xscale = ((double) dstrect->w) / srcrect->w; - double yscale = ((double) dstrect->h) / srcrect->h; + double xscale = ((double) srcrect->w) / dstrect->w; + double yscale = ((double) srcrect->h) / dstrect->h; XTransform xform = {{ {XDoubleToFixed(xscale), XDoubleToFixed(0), XDoubleToFixed(0)}, {XDoubleToFixed(0), XDoubleToFixed(yscale), XDoubleToFixed(0)}, @@ -1937,8 +1943,10 @@ CPComponentAlpha, &attr); } - XRenderSetPictureFilter(data->display, src, - texturedata->filter, 0, 0); + if (texture->scaleMode != SDL_TEXTURESCALEMODE_NONE) { + XRenderSetPictureFilter(data->display, src, + texturedata->filter, 0, 0); + } XRenderComposite(data->display, texturedata->blend_op, src, mask, data->drawable_pict, @@ -1951,6 +1959,7 @@ {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1)}}}; XRenderSetPictureTransform(data->display, src, &identity); } + if (renderer->blendMode == SDL_BLENDMODE_MOD) { attr.component_alpha = False; XRenderChangePicture(data->display, data->stencil_pict,