Rev 6113 | Rev 6134 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6113 | Rev 6126 | ||
---|---|---|---|
Line 10... | Line 10... | ||
10 | mov [colorG],ah ;colorG=p2.g>>8 |
10 | mov [colorG],ah ;colorG=p2.g>>8 |
11 | mov eax,[ecx+offs_zbup_b] |
11 | mov eax,[ecx+offs_zbup_b] |
12 | mov [colorB],ah ;colorB=p2.b>>8 |
12 | mov [colorB],ah ;colorB=p2.b>>8 |
13 | ;else |
13 | ;else |
14 | ; color=RGB_TO_PIXEL(p2->r,p2->g,p2->b); |
14 | ;color=RGB_TO_PIXEL(p2.r,p2.g,p2.b) |
15 | end if |
15 | end if |
16 | } |
16 | } |
17 | 17 | ||
Line 18... | Line 18... | ||
18 | macro PUT_PIXEL _a |
18 | macro PUT_PIXEL _a |
19 | { |
19 | { |
20 | local .end_0 |
20 | local .end_0 |
21 | mov eax,[z] |
21 | mov eax,[z] |
22 | shr eax, ZB_POINT_Z_FRAC_BITS |
22 | shr eax,ZB_POINT_Z_FRAC_BITS |
23 | mov [zz],eax |
- | |
24 | mov ebx,[pz] |
- | |
25 | cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a]) |
23 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
26 | jl .end_0 |
24 | jl .end_0 |
27 | ;edi = pp |
25 | ;edi = pp |
28 | mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение |
26 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
29 | if TGL_FEATURE_RENDER_BITS eq 24 |
27 | if TGL_FEATURE_RENDER_BITS eq 24 |
30 | mov al,[colorR] |
28 | mov al,[colorR] |
31 | mov ah,[colorG] |
29 | mov ah,[colorG] |
32 | mov word[edi+3*_a],ax |
30 | mov word[edi+3*_a],ax |
33 | mov al,[colorB] |
31 | mov al,[colorB] |
34 | mov byte[edi+3*_a +2],al |
32 | mov byte[edi+3*_a +2],al |
35 | ;else |
33 | ;else |
36 | ; pp[_a]=color; |
34 | ;pp[_a]=color |
37 | end if |
35 | end if |
38 | .end_0: |
36 | .end_0: |
39 | mov eax,[dzdx] |
37 | mov eax,[dzdx] |
40 | add [z],eax |
38 | add [z],eax |
41 | } |
39 | } |
Line 68... | Line 66... | ||
68 | { |
66 | { |
69 | local .end_0 |
67 | local .end_0 |
70 | mov eax,[z] |
68 | mov eax,[z] |
71 | shr eax,ZB_POINT_Z_FRAC_BITS |
69 | shr eax,ZB_POINT_Z_FRAC_BITS |
72 | mov [zz],eax |
70 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
73 | mov ebx,[pz] |
- | |
74 | cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a]) |
- | |
75 | jl .end_0 |
71 | jl .end_0 |
76 | ;edi = pp |
72 | ;edi = pp |
77 | mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение |
73 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
78 | if TGL_FEATURE_RENDER_BITS eq 24 |
74 | if TGL_FEATURE_RENDER_BITS eq 24 |
79 | mov ebx,[or1] |
75 | mov ebx,[or1] |
80 | mov eax,[og1] |
76 | mov eax,[og1] |
81 | mov al,bh |
77 | mov al,bh |
82 | mov word[edi+3*_a],ax |
78 | mov word[edi+3*_a],ax |
83 | mov eax,[ob1] |
79 | mov eax,[ob1] |
84 | mov byte[edi+3*_a +2],ah |
80 | mov byte[edi+3*_a +2],ah |
85 | end if |
81 | end if |
86 | ;if TGL_FEATURE_RENDER_BITS eq 32 |
82 | ;if TGL_FEATURE_RENDER_BITS eq 32 |
87 | ; pp[_a] = RGB_TO_PIXEL(or1, og1, ob1); |
83 | ;pp[_a] = RGB_TO_PIXEL(or1, og1, ob1) |
88 | ;end if |
84 | ;end if |
89 | .end_0: |
85 | .end_0: |
90 | mov eax,[dzdx] |
86 | mov eax,[dzdx] |
91 | add [z],eax |
87 | add [z],eax |
92 | mov eax,[dgdx] |
88 | mov eax,[dgdx] |
93 | add [og1],eax |
89 | add [og1],eax |
Line 124... | Line 120... | ||
124 | { |
120 | { |
125 | local .end_0 |
121 | local .end_0 |
126 | mov eax,[z] |
122 | mov eax,[z] |
127 | shr eax,ZB_POINT_Z_FRAC_BITS |
123 | shr eax,ZB_POINT_Z_FRAC_BITS |
128 | mov [zz],eax |
124 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
129 | mov ebx,[pz] |
- | |
130 | cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a]) |
- | |
131 | jl .end_0 |
125 | jl .end_0 |
132 | ;edi = pp |
126 | ;edi = pp |
133 | mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение |
127 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
134 | if TGL_FEATURE_RENDER_BITS eq 24 |
128 | if TGL_FEATURE_RENDER_BITS eq 24 |
135 | mov ebx,[t] |
129 | mov ebx,[t] |
136 | and ebx,0x3fc00000 |
130 | and ebx,0x3fc00000 |
137 | or ebx,[s] |
131 | or ebx,[s] |
138 | shr ebx,14 |
132 | shr ebx,14 |
139 | imul ebx,3 |
133 | imul ebx,3 |
Line 142... | Line 136... | ||
142 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
136 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
143 | mov al,byte[ebx+2] |
137 | mov al,byte[ebx+2] |
144 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
138 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
145 | else |
139 | else |
146 | ; pp[_a]=texture[((t & 0x3FC00000) | s) >> 14]; |
140 | ;pp[_a]=texture[((t & 0x3FC00000) | s) >> 14] |
147 | end if |
141 | end if |
148 | .end_0: |
142 | .end_0: |
149 | mov eax,[dzdx] |
143 | mov eax,[dzdx] |
150 | add [z],eax |
144 | add [z],eax |
151 | mov eax,[dsdx] |
145 | mov eax,[dsdx] |
152 | add [s],eax |
146 | add [s],eax |
Line 194... | Line 188... | ||
194 | { |
188 | { |
195 | local .end_0 |
189 | local .end_0 |
196 | mov eax,[z] |
190 | mov eax,[z] |
197 | shr eax,ZB_POINT_Z_FRAC_BITS |
191 | shr eax,ZB_POINT_Z_FRAC_BITS |
198 | mov [zz],eax |
192 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
199 | mov ebx,[pz] |
- | |
200 | cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a]) |
- | |
201 | jl .end_0 |
193 | jl .end_0 |
202 | ;edi = pp |
194 | ;edi = pp |
203 | mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение |
195 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
204 | if TGL_FEATURE_RENDER_BITS eq 24 |
196 | if TGL_FEATURE_RENDER_BITS eq 24 |
205 | mov ebx,[t] |
197 | mov ebx,[t] |
206 | and ebx,0x3fc00000 |
198 | and ebx,0x3fc00000 |
207 | mov eax,[s] |
199 | mov eax,[s] |
208 | and eax,0x003fc000 |
200 | and eax,0x003fc000 |
209 | or ebx,eax |
201 | or ebx,eax |
Line 244... | Line 236... | ||
244 | fdivp |
236 | fdivp |
245 | fstp dword[zinv] ;zinv = 1.0 / fz |
237 | fstp dword[zinv] ;zinv = 1.0 / fz |
246 | imul edi,PSZB |
238 | imul edi,PSZB |
247 | add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
239 | add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
248 | mov eax,[x1] |
240 | mov esi,[x1] |
249 | shl eax,1 |
241 | shl esi,1 |
250 | add eax,[pz1] |
242 | add esi,[pz1] ;pz = pz1 + x1 |
251 | mov [pz],eax ;pz = pz1 + x1 |
- | |
252 | mov eax,[z1] |
243 | mov eax,[z1] |
253 | mov [z],eax ;z = z1 |
244 | mov [z],eax ;z = z1 |
254 | mov eax,[sz1] |
245 | mov eax,[sz1] |
255 | mov [s_z],eax ;sz = sz1 |
246 | mov [s_z],eax ;sz = sz1 |
256 | mov eax,[tz1] |
247 | mov eax,[tz1] |
257 | mov [t_z],eax ;tz = tz1 |
248 | mov [t_z],eax ;tz = tz1 |
Line 289... | Line 280... | ||
289 | PUT_PIXEL 4 |
280 | PUT_PIXEL 4 |
290 | PUT_PIXEL 5 |
281 | PUT_PIXEL 5 |
291 | PUT_PIXEL 6 |
282 | PUT_PIXEL 6 |
292 | PUT_PIXEL 7 |
283 | PUT_PIXEL 7 |
293 | add dword[pz],2*NB_INTERP ;pz += NB_INTERP |
284 | add esi,2*NB_INTERP ;pz += NB_INTERP |
294 | add edi,NB_INTERP*PSZB ;pp += NB_INTERP * PSZB |
285 | add edi,NB_INTERP*PSZB ;pp += NB_INTERP * PSZB |
295 | sub dword[n],NB_INTERP ;n -= NB_INTERP |
286 | sub dword[n],NB_INTERP ;n -= NB_INTERP |
296 | fld dword[ndszdx] |
287 | fld dword[ndszdx] |
297 | fadd dword[s_z] |
288 | fadd dword[s_z] |
298 | fstp dword[s_z] ;sz += ndszdx |
289 | fstp dword[s_z] ;sz += ndszdx |
299 | fld dword[ndtzdx] |
290 | fld dword[ndtzdx] |
Line 321... | Line 312... | ||
321 | .cycle_3: ;while (n>=0) |
312 | .cycle_3: ;while (n>=0) |
322 | cmp dword[n],0 |
313 | cmp dword[n],0 |
323 | jl .cycle_3_end |
314 | jl .cycle_3_end |
324 | PUT_PIXEL 0 |
315 | PUT_PIXEL 0 |
325 | add dword[pz],2 ;pz += 1 |
316 | add esi,2 ;pz += 1 |
326 | add edi,PSZB ;pp += PSZB |
317 | add edi,PSZB ;pp += PSZB |
327 | dec dword[n] |
318 | dec dword[n] |
328 | jmp .cycle_3 |
319 | jmp .cycle_3 |
329 | .cycle_3_end: |
320 | .cycle_3_end: |
330 | end if |
321 | end if |
331 | } |
322 | } |
Line 363... | Line 354... | ||
363 | { |
354 | { |
364 | local .end_0 |
355 | local .end_0 |
365 | mov eax,[z] |
356 | mov eax,[z] |
366 | shr eax,ZB_POINT_Z_FRAC_BITS |
357 | shr eax,ZB_POINT_Z_FRAC_BITS |
367 | mov [zz],eax |
358 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
368 | mov ebx,[pz] |
- | |
369 | cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a]) |
- | |
370 | jl .end_0 |
359 | jl .end_0 |
371 | ;edi = pp |
360 | ;edi = pp |
372 | mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение |
361 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
373 | fild dword[z] |
362 | fild dword[z] |
374 | fld dword[s_z] |
363 | fld dword[s_z] |
375 | fdiv st0,st1 |
364 | fdiv st0,st1 |
376 | fistp dword[esp-4] ;s = (int) (s_z / (float) z) |
365 | fistp dword[esp-4] ;s = (int) (s_z / (float) z) |
377 | fld dword[t_z] |
366 | fld dword[t_z] |
378 | fdiv st0,st1 |
367 | fdiv st0,st1 |