|
13 | 13 |
|
14 | 14 | #include "C_EXTERN.H" |
15 | 15 |
|
| 16 | +#define MAX_SCAN_LINES 480 |
| 17 | + |
16 | 18 | /*──────────────────────────────────────────────────────────────────────────*/ |
17 | 19 | //▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ |
18 | | -S32 TabCoorPoint[480][4]; |
19 | | -S32 TabNbPoint[480]; |
| 20 | +S32 TabCoorPoint[MAX_SCAN_LINES][4]; |
| 21 | +S32 TabNbPoint[MAX_SCAN_LINES]; |
20 | 22 | S32 MinYTabPoint,MaxYTabPoint; |
21 | 23 |
|
22 | 24 | S32 XS0,YS0,XS1,YS1,XS2,YS2,XS3,YS3 ; |
@@ -55,22 +57,21 @@ void CalculeLigneOmbre( S32 x1, S32 y1, S32 x2, S32 y2 ) |
55 | 57 | } |
56 | 58 |
|
57 | 59 | if (y2>ClipYMax) y2=ClipYMax; |
| 60 | + x+=ix; |
| 61 | + y1++; |
58 | 62 |
|
59 | 63 | if (y1<MinYTabPoint) MinYTabPoint=y1; |
60 | | - |
61 | 64 | if (y2>MaxYTabPoint) MaxYTabPoint=y2; |
62 | 65 |
|
63 | | - |
64 | | - x+=ix; |
65 | | - y1++; |
66 | | - |
67 | | - for( y=y1; y<=y2; y++ ) |
| 66 | + for (y=y1; y<=y2; y++) |
68 | 67 | { |
69 | | - TabCoorPoint[y][TabNbPoint[y]++]=FTOW(x); |
| 68 | + if ((U32)y < MAX_SCAN_LINES AND (U32)TabNbPoint[y] < 4) |
| 69 | + { |
| 70 | + TabCoorPoint[y][TabNbPoint[y]++]=FTOW(x); |
| 71 | + } |
70 | 72 | //Plot(FTOW(x),y,15); |
71 | 73 | x+=ix; |
72 | 74 | } |
73 | | - |
74 | 75 | } |
75 | 76 | } |
76 | 77 |
|
@@ -208,13 +209,19 @@ void DrawLineShade( S32 x0, S32 z0, S32 x1, S32 z1, S32 x2, S32 z2, S32 x3, S32 |
208 | 209 | { |
209 | 210 | S32 y,j,k; |
210 | 211 | S32 temp; |
| 212 | + S32 yStart, yEnd; |
211 | 213 |
|
212 | | - MinYTabPoint=ClipYMax; |
213 | | - MaxYTabPoint=ClipYMin; |
214 | | - |
| 214 | + MinYTabPoint = ClipYMax; |
| 215 | + MaxYTabPoint = ClipYMin; |
215 | 216 | DrawOmbre(x0,z0,x1,z1,x2,z2,x3,z3); |
216 | 217 |
|
217 | | - for ( y = MinYTabPoint; y <= MaxYTabPoint; y++ ) |
| 218 | + yStart = MinYTabPoint; |
| 219 | + yEnd = MaxYTabPoint; |
| 220 | + |
| 221 | + if (yStart < 0) yStart = 0; |
| 222 | + if (yEnd > MAX_SCAN_LINES - 1) yEnd = MAX_SCAN_LINES - 1; |
| 223 | + |
| 224 | + for (y = yStart; y <= yEnd; y++) |
218 | 225 | { |
219 | 226 | switch( TabNbPoint[y] ) |
220 | 227 | { |
|
0 commit comments