Commit d96742b0 authored by Sunny Sachanandani's avatar Sunny Sachanandani

Fixed a huge bug with texture scaling.

parent dd3e79b2
...@@ -1021,8 +1021,9 @@ X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -1021,8 +1021,9 @@ X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
return -1; return -1;
} }
texture->blendMode = SDL_BLENDMODE_NONE; texture->blendMode = SDL_BLENDMODE_NONE;
texture->scaleMode = SDL_TEXTURESCALEMODE_NONE;
data->blend_op = PictOpSrc; data->blend_op = PictOpSrc;
data->filter = "fast"; data->filter = NULL;
} }
#endif #endif
return 0; return 0;
...@@ -1159,6 +1160,11 @@ X11_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -1159,6 +1160,11 @@ X11_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture)
switch (texture->scaleMode) { switch (texture->scaleMode) {
case SDL_TEXTURESCALEMODE_NONE: case SDL_TEXTURESCALEMODE_NONE:
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
if (renderdata->use_xrender) {
data->filter = NULL;
}
#endif
return 0; return 0;
case SDL_TEXTURESCALEMODE_FAST: case SDL_TEXTURESCALEMODE_FAST:
/* We can sort of fake it for streaming textures */ /* We can sort of fake it for streaming textures */
...@@ -1186,8 +1192,8 @@ X11_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -1186,8 +1192,8 @@ X11_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture)
SDL_Unsupported(); SDL_Unsupported();
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
if (renderdata->use_xrender) { if (renderdata->use_xrender) {
texture->scaleMode = SDL_TEXTURESCALEMODE_FAST; texture->scaleMode = SDL_TEXTURESCALEMODE_NONE;
data->filter = FilterFast; data->filter = NULL;
} }
else else
#endif #endif
...@@ -1900,7 +1906,7 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -1900,7 +1906,7 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
} }
else else
{ {
mask = texturedata->picture; mask = src;
mrect = srcrect; mrect = srcrect;
} }
...@@ -1919,8 +1925,8 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -1919,8 +1925,8 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
mrect->x, mrect->y, dstrect->x, dstrect->y, mrect->x, mrect->y, dstrect->x, dstrect->y,
dstrect->w, dstrect->h); dstrect->w, dstrect->h);
} else { } else {
double xscale = ((double) dstrect->w) / srcrect->w; double xscale = ((double) srcrect->w) / dstrect->w;
double yscale = ((double) dstrect->h) / srcrect->h; double yscale = ((double) srcrect->h) / dstrect->h;
XTransform xform = {{ XTransform xform = {{
{XDoubleToFixed(xscale), XDoubleToFixed(0), XDoubleToFixed(0)}, {XDoubleToFixed(xscale), XDoubleToFixed(0), XDoubleToFixed(0)},
{XDoubleToFixed(0), XDoubleToFixed(yscale), XDoubleToFixed(0)}, {XDoubleToFixed(0), XDoubleToFixed(yscale), XDoubleToFixed(0)},
...@@ -1937,8 +1943,10 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -1937,8 +1943,10 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
CPComponentAlpha, &attr); CPComponentAlpha, &attr);
} }
XRenderSetPictureFilter(data->display, src, if (texture->scaleMode != SDL_TEXTURESCALEMODE_NONE) {
texturedata->filter, 0, 0); XRenderSetPictureFilter(data->display, src,
texturedata->filter, 0, 0);
}
XRenderComposite(data->display, texturedata->blend_op, XRenderComposite(data->display, texturedata->blend_op,
src, mask, data->drawable_pict, src, mask, data->drawable_pict,
...@@ -1951,6 +1959,7 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -1951,6 +1959,7 @@ X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
{XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1)}}}; {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1)}}};
XRenderSetPictureTransform(data->display, src, &identity); XRenderSetPictureTransform(data->display, src, &identity);
} }
if (renderer->blendMode == SDL_BLENDMODE_MOD) { if (renderer->blendMode == SDL_BLENDMODE_MOD) {
attr.component_alpha = False; attr.component_alpha = False;
XRenderChangePicture(data->display, data->stencil_pict, XRenderChangePicture(data->display, data->stencil_pict,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment