Rev 6126 | Rev 6141 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6126 | Rev 6134 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | mov eax,[dzdx] |
37 | mov eax,[dzdx] |
38 | add [z],eax |
38 | add [z],eax |
39 | } |
39 | } |
40 | 40 | ||
Line 41... | Line 41... | ||
41 | align 4 |
41 | align 16 |
42 | proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword |
42 | proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword |
43 | locals |
43 | locals |
44 | if TGL_FEATURE_RENDER_BITS eq 24 |
44 | if TGL_FEATURE_RENDER_BITS eq 24 |
45 | colorR db ? |
45 | colorR db ? |
46 | colorG db ? |
46 | colorG db ? |
Line 92... | Line 92... | ||
92 | mov eax,[dbdx] |
92 | mov eax,[dbdx] |
93 | add [ob1],eax |
93 | add [ob1],eax |
94 | } |
94 | } |
95 | 95 | ||
Line 96... | Line 96... | ||
96 | align 4 |
96 | align 16 |
97 | proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword |
97 | proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword |
98 | locals |
98 | locals |
99 | include 'ztriangle.inc' |
99 | include 'ztriangle.inc' |
Line 100... | Line 100... | ||
100 | 100 | ||
101 | align 4 |
101 | align 16 |
102 | proc ZB_setTexture uses eax ebx, zb:dword, texture:dword |
102 | proc ZB_setTexture uses eax ebx, zb:dword, texture:dword |
103 | mov eax,[zb] |
103 | mov eax,[zb] |
104 | mov ebx,[texture] |
104 | mov ebx,[texture] |
105 | mov dword[eax+offs_zbuf_current_texture],ebx |
105 | mov dword[eax+offs_zbuf_current_texture],ebx |
Line 118... | Line 118... | ||
118 | 118 | ||
Line 119... | Line 119... | ||
119 | macro PUT_PIXEL _a |
119 | macro PUT_PIXEL _a |
120 | { |
120 | { |
121 | local .end_0 |
121 | local .end_0 |
- | 122 | local .in_mem |
|
122 | mov eax,[z] |
123 | mov eax,[z] |
123 | shr eax,ZB_POINT_Z_FRAC_BITS |
124 | shr eax,ZB_POINT_Z_FRAC_BITS |
124 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
125 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
125 | jl .end_0 |
126 | jl .end_0 |
126 | ;edi = pp |
127 | ;edi = pp |
Line 129... | Line 130... | ||
129 | mov ebx,[t] |
130 | mov ebx,[t] |
130 | and ebx,0x3fc00000 |
131 | and ebx,0x3fc00000 |
131 | or ebx,[s] |
132 | or ebx,[s] |
132 | shr ebx,14 |
133 | shr ebx,14 |
133 | imul ebx,3 |
134 | cmp ebx,256*256-1 ;проверка на выход за пределы текстуры |
- | 135 | jl .in_mem ;координата 1.0,1.0 может выползать |
|
- | 136 | mov ebx,256*256-1 ;переход на последний пиксель текстуры |
|
- | 137 | .in_mem: |
|
- | 138 | imul ebx,3 |
|
134 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3 |
139 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3 |
135 | mov ax,word[ebx] |
140 | mov ax,word[ebx] |
136 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
141 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
137 | mov al,byte[ebx+2] |
142 | mov al,byte[ebx+2] |
138 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
143 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
Line 147... | Line 152... | ||
147 | mov eax,[dtdx] |
152 | mov eax,[dtdx] |
148 | add [t],eax |
153 | add [t],eax |
149 | } |
154 | } |
150 | 155 | ||
Line 151... | Line 156... | ||
151 | align 4 |
156 | align 16 |
152 | proc ZB_fillTriangleMapping, zb:dword, p0:dword, p1:dword, p2:dword |
157 | proc ZB_fillTriangleMapping, zb:dword, p0:dword, p1:dword, p2:dword |
153 | locals |
158 | locals |
154 | texture dd ? ;PIXEL* |
159 | texture dd ? ;PIXEL* |
155 | include 'ztriangle.inc' |
160 | include 'ztriangle.inc' |
Line 186... | Line 191... | ||
186 | 191 | ||
Line 187... | Line 192... | ||
187 | macro PUT_PIXEL _a |
192 | macro PUT_PIXEL _a |
188 | { |
193 | { |
189 | local .end_0 |
194 | local .end_0 |
- | 195 | local .in_mem |
|
190 | mov eax,[z] |
196 | mov eax,[z] |
191 | shr eax,ZB_POINT_Z_FRAC_BITS |
197 | shr eax,ZB_POINT_Z_FRAC_BITS |
192 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
198 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
193 | jl .end_0 |
199 | jl .end_0 |
194 | ;edi = pp |
200 | ;edi = pp |
Line 199... | Line 205... | ||
199 | mov eax,[s] |
205 | mov eax,[s] |
200 | and eax,0x003fc000 |
206 | and eax,0x003fc000 |
201 | or ebx,eax |
207 | or ebx,eax |
202 | shr ebx,14 |
208 | shr ebx,14 |
203 | imul ebx,3 |
209 | if 1 |
- | 210 | ; не знаю нужна ли сдесь эта проверка |
|
- | 211 | ; функция ZB_fillTriangleMapping без нее не работает |
|
- | 212 | ; на всякий случай делаю и тут такое же |
|
- | 213 | cmp ebx,256*256-1 ;проверка на выход за пределы текстуры |
|
- | 214 | jl .in_mem ;координата 1.0,1.0 может выползать |
|
- | 215 | mov ebx,256*256-1 ;переход на последний пиксель текстуры |
|
- | 216 | .in_mem: |
|
- | 217 | end if |
|
- | 218 | imul ebx,3 |
|
204 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3 |
219 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3 |
205 | mov ax,word[ebx] |
220 | mov ax,word[ebx] |
206 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
221 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
207 | mov al,byte[ebx+2] |
222 | mov al,byte[ebx+2] |
208 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
223 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
Line 231... | Line 246... | ||
231 | mov [n],eax ;n = (x2 >> 16) - x1 |
246 | mov [n],eax ;n = (x2 >> 16) - x1 |
232 | fld1 |
247 | fld1 |
233 | fild dword[z1] |
248 | fild dword[z1] |
234 | fst dword[f_z] ;fz = (float)z1 |
249 | fst dword[f_z] ;fz = (float)z1 |
235 | ;fld1 |
250 | fdivp |
236 | fdivp |
- | |
237 | fstp dword[zinv] ;zinv = 1.0 / fz |
251 | fstp dword[zinv] ;zinv = 1.0 / fz |
238 | imul edi,PSZB |
252 | imul edi,PSZB |
239 | add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
253 | add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
240 | mov esi,[x1] |
254 | mov esi,[x1] |
241 | shl esi,1 |
255 | shl esi,1 |
Line 269... | Line 283... | ||
269 | fld1 |
283 | fld1 |
270 | fld dword[f_z] |
284 | fld dword[f_z] |
271 | fadd dword[fndzdx] |
285 | fadd dword[fndzdx] |
272 | fst dword[f_z] ;fz += fndzdx |
286 | fst dword[f_z] ;fz += fndzdx |
273 | ;fld1 |
287 | fdivp |
274 | fdivp |
- | |
275 | fstp dword[zinv] ;zinv = 1.0 / fz |
288 | fstp dword[zinv] ;zinv = 1.0 / fz |
276 | PUT_PIXEL 0 |
289 | PUT_PIXEL 0 |
277 | PUT_PIXEL 1 |
290 | PUT_PIXEL 1 |
278 | PUT_PIXEL 2 |
291 | PUT_PIXEL 2 |
279 | PUT_PIXEL 3 |
292 | PUT_PIXEL 3 |
Line 290... | Line 303... | ||
290 | fld dword[ndtzdx] |
303 | fld dword[ndtzdx] |
291 | fadd dword[t_z] |
304 | fadd dword[t_z] |
292 | fstp dword[t_z] ;tz += ndtzdx |
305 | fstp dword[t_z] ;tz += ndtzdx |
293 | jmp .cycle_2 |
306 | jmp .cycle_2 |
294 | .cycle_2_end: |
307 | align 4 |
- | 308 | .cycle_2_end: |
|
295 | fld dword[zinv] |
309 | fld dword[zinv] |
296 | fld st0 |
310 | fld st0 |
297 | fmul dword[s_z] ;ss = (sz * zinv) |
311 | fmul dword[s_z] ;ss = (sz * zinv) |
298 | fist dword[s] ;s = (int) ss |
312 | fist dword[s] ;s = (int) ss |
299 | fmul dword[fdzdx] |
313 | fmul dword[fdzdx] |
Line 316... | Line 330... | ||
316 | add esi,2 ;pz += 1 |
330 | add esi,2 ;pz += 1 |
317 | add edi,PSZB ;pp += PSZB |
331 | add edi,PSZB ;pp += PSZB |
318 | dec dword[n] |
332 | dec dword[n] |
319 | jmp .cycle_3 |
333 | jmp .cycle_3 |
320 | .cycle_3_end: |
334 | align 4 |
- | 335 | .cycle_3_end: |
|
321 | end if |
336 | end if |
322 | } |
337 | } |
323 | 338 | ||
Line 324... | Line 339... | ||
324 | align 4 |
339 | align 16 |
325 | proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
340 | proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
326 | locals |
341 | locals |
327 | texture dd ? ;PIXEL * |
342 | texture dd ? ;PIXEL * |
328 | fdzdx dd ? ;float |
343 | fdzdx dd ? ;float |
329 | fndzdx dd ? ;float |
344 | fndzdx dd ? ;float |
Line 384... | Line 399... | ||
384 | fadd dword[t_z] |
399 | fadd dword[t_z] |
385 | fstp dword[t_z] |
400 | fstp dword[t_z] |
386 | } |
401 | } |
387 | 402 | ||
Line 388... | Line 403... | ||
388 | align 4 |
403 | align 16 |
389 | proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
404 | proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
390 | locals |
405 | locals |
391 | texture dd ? ;PIXEL* |
406 | texture dd ? ;PIXEL* |
392 | include 'ztriangle.inc' |
407 | include 'ztriangle.inc' |