Rev 6111 | Rev 6126 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6111 | Rev 6113 | ||
---|---|---|---|
Line 1... | Line -... | ||
1 | ; |
- | |
2 | ; Макрос DRAW_LINE имеет параметр code, от которого зависит |
- | |
3 | ; будет ли включен код или объявлены переменные. |
- | |
4 | ; В версии на C++ параметра code нет, потому что там переменные |
- | |
5 | ; можно ставить в любом месте функции, в asm версии такое не проходит. |
- | |
6 | ; |
- | |
Line 7... | Line 1... | ||
7 | 1 | INTERP_Z equ 1 |
|
Line 8... | Line 2... | ||
8 | INTERP_Z equ 1 |
2 | |
9 | 3 | macro DRAW_INIT |
|
Line 234... | Line 228... | ||
234 | add [t],eax |
228 | } |
235 | } |
229 | |
Line 236... | Line 230... | ||
236 | 230 | DRAW_LINE_M equ 1 |
|
Line 237... | Line 231... | ||
237 | DRAW_LINE_M equ 1 |
231 | |
238 | 232 | macro DRAW_LINE |
|
239 | macro DRAW_LINE code |
233 | { |
240 | { |
- | |
241 | if TGL_FEATURE_RENDER_BITS eq 24 |
- | |
242 | if code eq 0 |
- | |
243 | s dd ? ;uint |
- | |
244 | t dd ? ;uint |
- | |
245 | dsdx dd ? ;int |
- | |
246 | dtdx dd ? ;int |
- | |
247 | fz dd ? ;float |
- | |
248 | zinv dd ? ;float |
- | |
249 | end if |
234 | if TGL_FEATURE_RENDER_BITS eq 24 |
250 | if code eq 1 |
235 | mov eax,[x2] |
- | 236 | sar eax,16 |
|
251 | mov eax,[x2] |
237 | mov edi,[x1] |
252 | sar eax,16 |
238 | sub eax,edi |
253 | sub eax,[x1] |
239 | mov [n],eax ;n = (x2 >> 16) - x1 |
254 | mov [n],eax ;n = (x2 >> 16) - x1 |
240 | fld1 |
255 | fld1 |
241 | fild dword[z1] |
256 | fild dword[z1] |
242 | fst dword[f_z] ;fz = (float)z1 |
257 | fst dword[fz] ;fz = (float)z1 |
243 | ;fld1 |
258 | ;fld1 |
244 | fdivp |
259 | fdivp |
- | |
260 | fstp dword[zinv] ;zinv = 1.0 / fz |
245 | fstp dword[zinv] ;zinv = 1.0 / fz |
261 | mov edi,[x1] |
246 | imul edi,PSZB |
262 | imul edi,PSZB |
247 | add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
263 | add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
248 | mov eax,[x1] |
264 | mov eax,[x1] |
249 | shl eax,1 |
Line 290... | Line 275... | ||
290 | fchs |
275 | fadd dword[dtzdx] |
291 | fadd dword[dtzdx] |
276 | fmul dword[zinv] |
292 | fmul dword[zinv] |
277 | fistp dword[dtdx] ;dtdx = (int)( (dtzdx - tt*fdzdx)*zinv ) |
293 | fistp dword[dtdx] ;dtdx = (int)( (dtzdx - tt*fdzdx)*zinv ) |
278 | fld1 |
294 | fld1 |
279 | fld dword[f_z] |
295 | fld dword[fz] |
280 | fadd dword[fndzdx] |
296 | fadd dword[fndzdx] |
281 | fst dword[f_z] ;fz += fndzdx |
297 | fst dword[fz] ;fz += fndzdx |
282 | ;fld1 |
298 | ;fld1 |
283 | fdivp |
299 | fdivp |
284 | fstp dword[zinv] ;zinv = 1.0 / fz |
300 | fstp dword[zinv] ;zinv = 1.0 / fz |
285 | PUT_PIXEL 0 |
301 | PUT_PIXEL 0 |
286 | PUT_PIXEL 1 |
302 | PUT_PIXEL 1 |
287 | PUT_PIXEL 2 |
Line 342... | Line 327... | ||
342 | add edi,PSZB ;pp += PSZB |
327 | dec dword[n] |
343 | dec dword[n] |
328 | jmp .cycle_3 |
344 | jmp .cycle_3 |
329 | .cycle_3_end: |
345 | .cycle_3_end: |
330 | end if |
346 | end if |
331 | } |
347 | end if |
- | |
348 | } |
332 | |
Line 349... | Line 333... | ||
349 | 333 | align 4 |
|
350 | align 4 |
334 | proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
351 | proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
335 | locals |
352 | locals |
336 | texture dd ? ;PIXEL * |
353 | texture dd ? ;PIXEL * |
337 | fdzdx dd ? ;float |
354 | fdzdx dd ? ;float |
338 | fndzdx dd ? ;float |
355 | fndzdx dd ? ;float |
339 | ndszdx dd ? ;float |
356 | ndszdx dd ? ;float |
340 | ndtzdx dd ? ;float |
- | 341 | zinv dd ? ;float |
|
- | 342 | f_z dd ? ;float - переменная отвечающая за геометрию текстуры |
|
357 | ndtzdx dd ? ;float |
343 | include 'ztriangle.inc' |
Line 358... | Line 344... | ||
358 | include 'ztriangle.inc' |
344 | |
Line 359... | Line 345... | ||
359 | 345 | end if |
|
Line 375... | Line 361... | ||
375 | } |
361 | |
Line 376... | Line 362... | ||
376 | 362 | macro PUT_PIXEL _a |
|
377 | macro PUT_PIXEL _a |
363 | { |
378 | { |
364 | local .end_0 |
379 | local .end_0 |
- | |
380 | ; int s,t; |
365 | mov eax,[z] |
381 | mov eax,[z] |
366 | shr eax,ZB_POINT_Z_FRAC_BITS |
382 | shr eax,ZB_POINT_Z_FRAC_BITS |
367 | mov [zz],eax |
383 | mov [zz],eax |
368 | mov ebx,[pz] |
384 | mov ebx,[pz] |
369 | cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a]) |