summaryrefslogtreecommitdiffhomepage
path: root/src/textures.c
diff options
context:
space:
mode:
authorChris <[email protected]>2021-03-23 13:40:26 +0000
committerGitHub <[email protected]>2021-03-23 14:40:26 +0100
commit2532c396edf08c997588c4fe2d8ddebaf224508b (patch)
treec427178a0e2a49d6d808f2e49fb0f50c6ad9f8de /src/textures.c
parent71fe0bff95108fc905c3bcf5da3d95a09ce824ae (diff)
downloadraylib-2532c396edf08c997588c4fe2d8ddebaf224508b.tar.gz
raylib-2532c396edf08c997588c4fe2d8ddebaf224508b.zip
Fix 90 degree bug with DrawTexturePro and DrawRectanglePro (#1673)
- The vertices did not map to where I expected causing rotation to be off by 90 degrees. I reorganized the vertices making it easier to reason about which fixes this. - The order for drawing is now topLeft, bottomLeft, bottomRight, topRight.
Diffstat (limited to 'src/textures.c')
-rw-r--r--src/textures.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/textures.c b/src/textures.c
index f98a4ad2..2e844f45 100644
--- a/src/textures.c
+++ b/src/textures.c
@@ -3206,20 +3206,20 @@ void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2
if (source.width < 0) { flipX = true; source.width *= -1; }
if (source.height < 0) source.y -= source.height;
+ Vector2 topLeft = { 0 };
+ Vector2 topRight = { 0 };
Vector2 bottomLeft = { 0 };
Vector2 bottomRight = { 0 };
- Vector2 topRight = { 0 };
- Vector2 topLeft = { 0 };
// Only calculate rotation if needed
if (rotation == 0.0f)
{
float x = dest.x - origin.x;
float y = dest.y - origin.y;
- bottomLeft = (Vector2){ x, y };
- bottomRight = (Vector2){ x, y + dest.height };
- topRight = (Vector2){ x + dest.width, y + dest.height };
- topLeft = (Vector2){ x + dest.width, y };
+ topLeft = (Vector2){ x, y };
+ topRight = (Vector2){ x + dest.width, y };
+ bottomLeft = (Vector2){ x, y + dest.height };
+ bottomRight = (Vector2){ x + dest.width, y + dest.height };
}
else
{
@@ -3230,17 +3230,17 @@ void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2
float dx = -origin.x;
float dy = -origin.y;
- bottomLeft.x = x + dx*cosRotation - (dy + dest.height)*sinRotation;
- bottomLeft.y = y + dx*sinRotation + (dy + dest.height)*cosRotation;
-
- bottomRight.x = x + (dx + dest.width)*cosRotation - (dy + dest.height) *sinRotation;
- bottomRight.y = y + (dx + dest.width)*sinRotation + (dy + dest.height)*cosRotation;
+ topLeft.x = x + dx*cosRotation - dy*sinRotation;
+ topLeft.y = y + dx*sinRotation + dy*cosRotation;
topRight.x = x + (dx + dest.width)*cosRotation - dy*sinRotation;
topRight.y = y + (dx + dest.width)*sinRotation + dy*cosRotation;
- topLeft.x = x + dx*cosRotation - dy*sinRotation;
- topLeft.y = y + dx*sinRotation + dy*cosRotation;
+ bottomLeft.x = x + dx*cosRotation - (dy + dest.height)*sinRotation;
+ bottomLeft.y = y + dx*sinRotation + (dy + dest.height)*cosRotation;
+
+ bottomRight.x = x + (dx + dest.width)*cosRotation - (dy + dest.height)*sinRotation;
+ bottomRight.y = y + (dx + dest.width)*sinRotation + (dy + dest.height)*cosRotation;
}
rlEnableTexture(texture.id);
@@ -3249,25 +3249,25 @@ void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2
rlColor4ub(tint.r, tint.g, tint.b, tint.a);
rlNormal3f(0.0f, 0.0f, 1.0f); // Normal vector pointing towards viewer
- // Bottom-left corner for texture and quad
+ // Top-left corner for texture and quad
if (flipX) rlTexCoord2f((source.x + source.width)/width, source.y/height);
else rlTexCoord2f(source.x/width, source.y/height);
- rlVertex2f(bottomLeft.x, bottomLeft.y);
+ rlVertex2f(topLeft.x, topLeft.y);
- // Bottom-right corner for texture and quad
+ // Bottom-left corner for texture and quad
if (flipX) rlTexCoord2f((source.x + source.width)/width, (source.y + source.height)/height);
else rlTexCoord2f(source.x/width, (source.y + source.height)/height);
- rlVertex2f(bottomRight.x, bottomRight.y);
+ rlVertex2f(bottomLeft.x, bottomLeft.y);
- // Top-right corner for texture and quad
+ // Bottom-right corner for texture and quad
if (flipX) rlTexCoord2f(source.x/width, (source.y + source.height)/height);
else rlTexCoord2f((source.x + source.width)/width, (source.y + source.height)/height);
- rlVertex2f(topRight.x, topRight.y);
+ rlVertex2f(bottomRight.x, bottomRight.y);
- // Top-left corner for texture and quad
+ // Top-right corner for texture and quad
if (flipX) rlTexCoord2f(source.x/width, source.y/height);
else rlTexCoord2f((source.x + source.width)/width, source.y/height);
- rlVertex2f(topLeft.x, topLeft.y);
+ rlVertex2f(topRight.x, topRight.y);
rlEnd();
rlDisableTexture();