Fixed bug #5768 - SDL_RenderGeometry's software backend failed to render when texture coordinates are reversed handle flip vertical/horizontal when reconstructing rects from triangles
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 4224a70..771c36c 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -4007,7 +4007,23 @@ SDL_SW_RenderGeometryRaw(SDL_Renderer *renderer,
if (texture && s.w != 0 && s.h != 0) {
SDL_SetTextureAlphaMod(texture, col0_.a);
SDL_SetTextureColorMod(texture, col0_.r, col0_.g, col0_.b);
- SDL_RenderCopyF(renderer, texture, &s, &d);
+ if (s.w > 0 && s.h > 0) {
+ SDL_RenderCopyF(renderer, texture, &s, &d);
+ } else {
+ int flags = 0;
+ if (s.w < 0) {
+ flags |= SDL_FLIP_HORIZONTAL;
+ s.w *= -1;
+ s.x -= s.w;
+ }
+ if (s.h < 0) {
+ flags |= SDL_FLIP_VERTICAL;
+ s.h *= -1;
+ s.y -= s.h;
+ }
+ SDL_RenderCopyExF(renderer, texture, &s, &d, 0, NULL, flags);
+ }
+
#if DEBUG_SW_RENDER_GEOMETRY
SDL_Log("Rect-COPY: RGB %d %d %d - Alpha:%d - texture=%p: src=(%d,%d, %d x %d) dst (%f, %f, %f x %f)", col0_.r, col0_.g, col0_.b, col0_.a,
(void *)texture, s.x, s.y, s.w, s.h, d.x, d.y, d.w, d.h);
@@ -4017,8 +4033,8 @@ SDL_SW_RenderGeometryRaw(SDL_Renderer *renderer,
SDL_SetRenderDrawColor(renderer, col0_.r, col0_.g, col0_.b, col0_.a);
SDL_RenderFillRectF(renderer, &d);
#if DEBUG_SW_RENDER_GEOMETRY
- SDL_Log("Rect-FILL: RGB %d %d %d - Alpha:%d - texture=%p: src=(%d,%d, %d x %d) dst (%f, %f, %f x %f)", col0_.r, col0_.g, col0_.b, col0_.a,
- (void *)texture, s.x, s.y, s.w, s.h, d.x, d.y, d.w, d.h);
+ SDL_Log("Rect-FILL: RGB %d %d %d - Alpha:%d - texture=%p: dst (%f, %f, %f x %f)", col0_.r, col0_.g, col0_.b, col0_.a,
+ (void *)texture, d.x, d.y, d.w, d.h);
} else {
SDL_Log("Rect-DISMISS: RGB %d %d %d - Alpha:%d - texture=%p: src=(%d,%d, %d x %d) dst (%f, %f, %f x %f)", col0_.r, col0_.g, col0_.b, col0_.a,
(void *)texture, s.x, s.y, s.w, s.h, d.x, d.y, d.w, d.h);