|
| 1 | +#define clip(X, HI, LO) std::clamp((X), (((LO) <= (HI)) ? (LO) : (HI)), (((HI) >= (LO)) ? (HI) : (LO))) |
| 2 | + |
1 | 3 | auto GPU::generateTables() -> void {
|
2 | 4 | static constexpr s8 table[4][4] = {
|
3 | 5 | {-4, +0, -3, +1},
|
@@ -165,10 +167,10 @@ auto GPU::Render::line() -> void {
|
165 | 167 | v0.x += drawingAreaOffsetX, v0.y += drawingAreaOffsetY;
|
166 | 168 | v1.x += drawingAreaOffsetX, v1.y += drawingAreaOffsetY;
|
167 | 169 |
|
168 |
| - v0.x = std::clamp(v0.x, drawingAreaOriginX1, drawingAreaOriginX2); |
169 |
| - v0.y = std::clamp(v0.y, drawingAreaOriginY1, drawingAreaOriginY2); |
170 |
| - v1.x = std::clamp(v1.x, drawingAreaOriginX1, drawingAreaOriginX2); |
171 |
| - v1.y = std::clamp(v1.y, drawingAreaOriginY1, drawingAreaOriginY2); |
| 170 | + v0.x = clip(v0.x, drawingAreaOriginX1, drawingAreaOriginX2); |
| 171 | + v0.y = clip(v0.y, drawingAreaOriginY1, drawingAreaOriginY2); |
| 172 | + v1.x = clip(v1.x, drawingAreaOriginX1, drawingAreaOriginX2); |
| 173 | + v1.y = clip(v1.y, drawingAreaOriginY1, drawingAreaOriginY2); |
172 | 174 |
|
173 | 175 | Point d = {v1.x - v0.x, v1.y - v0.y};
|
174 | 176 | s32 steps = abs(d.x) > abs(d.y) ? abs(d.x) : abs(d.y);
|
@@ -215,10 +217,10 @@ auto GPU::Render::triangle() -> void {
|
215 | 217 | if(vmax.x - vmin.x > 1024 || vmax.y - vmin.y > 512) return;
|
216 | 218 |
|
217 | 219 | //clip rendering to drawing area
|
218 |
| - vmin.x = std::clamp(vmin.x, drawingAreaOriginX1, drawingAreaOriginX2); |
219 |
| - vmin.y = std::clamp(vmin.y, drawingAreaOriginY1, drawingAreaOriginY2); |
220 |
| - vmax.x = std::clamp(vmax.x, drawingAreaOriginX1, drawingAreaOriginX2); |
221 |
| - vmax.y = std::clamp(vmax.y, drawingAreaOriginY1, drawingAreaOriginY2); |
| 220 | + vmin.x = clip(vmin.x, drawingAreaOriginX1, drawingAreaOriginX2); |
| 221 | + vmin.y = clip(vmin.y, drawingAreaOriginY1, drawingAreaOriginY2); |
| 222 | + vmax.x = clip(vmax.x, drawingAreaOriginX1, drawingAreaOriginX2); |
| 223 | + vmax.y = clip(vmax.y, drawingAreaOriginY1, drawingAreaOriginY2); |
222 | 224 |
|
223 | 225 | s32 area = weight(v0, v1, v2); //<0 = counter-clockwise; 0 = colinear, >0 = clockwise
|
224 | 226 | if(area == 0) return; //do not render colinear triangles
|
|
0 commit comments