浏览代码

[rshapes] Review `DrawRectangleLines()` pixel offset (#4261)

* [rshapes] Remove `DrawRectangleLines()`'s + 1 offset

* ... and replace it with a -/+ 0.5 offset divided by current cam's zoom.
RadsammyT 10 月之前
父节点
当前提交
385187f795
共有 1 个文件被更改,包括 10 次插入8 次删除
  1. 10 8
      src/rshapes.c

+ 10 - 8
src/rshapes.c

@@ -807,19 +807,21 @@ void DrawRectangleGradientEx(Rectangle rec, Color topLeft, Color bottomLeft, Col
 // but it solves another issue: https://github.com/raysan5/raylib/issues/3884
 void DrawRectangleLines(int posX, int posY, int width, int height, Color color)
 {
+    Matrix mat = rlGetMatrixModelview();
+    float zoomElement = 0.5f / mat.m0;
     rlBegin(RL_LINES);
         rlColor4ub(color.r, color.g, color.b, color.a);
-        rlVertex2f((float)posX, (float)posY);
-        rlVertex2f((float)posX + (float)width, (float)posY + 1);
+        rlVertex2f((float)posX - zoomElement, (float)posY);
+        rlVertex2f((float)posX + (float)width + zoomElement, (float)posY);
 
-        rlVertex2f((float)posX + (float)width, (float)posY + 1);
-        rlVertex2f((float)posX + (float)width, (float)posY + (float)height);
+        rlVertex2f((float)posX + (float)width, (float)posY - zoomElement);
+        rlVertex2f((float)posX + (float)width, (float)posY + (float)height + zoomElement);
 
-        rlVertex2f((float)posX + (float)width, (float)posY + (float)height);
-        rlVertex2f((float)posX + 1, (float)posY + (float)height);
+        rlVertex2f((float)posX + (float)width + zoomElement, (float)posY + (float)height);
+        rlVertex2f((float)posX - zoomElement, (float)posY + (float)height);
 
-        rlVertex2f((float)posX + 1, (float)posY + (float)height);
-        rlVertex2f((float)posX + 1, (float)posY + 1);
+        rlVertex2f((float)posX, (float)posY + (float)height + zoomElement);
+        rlVertex2f((float)posX, (float)posY - zoomElement);
     rlEnd();
 }