Rev 6145 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6145 | Rev 8069 | ||
---|---|---|---|
Line 117... | Line 117... | ||
117 | 117 | ||
118 | ; we sort the vertex with increasing y |
118 | ; we sort the vertex with increasing y |
119 | mov ebx,[p0] |
119 | mov ebx,[p0] |
120 | mov ecx,[p1] |
120 | mov ecx,[p1] |
121 | mov edx,[p2] |
121 | mov edx,[p2] |
122 | mov eax,[edx+offs_zbup_y] |
122 | mov eax,[edx+ZBufferPoint.y] |
123 | cmp [ecx+offs_zbup_y],eax ;(2-1) |
123 | cmp [ecx+ZBufferPoint.y],eax ;(2-1) |
124 | jle @f |
124 | jle @f |
125 | xchg edx,ecx |
125 | xchg edx,ecx |
126 | @@: |
126 | @@: |
127 | mov eax,[ecx+offs_zbup_y] |
127 | mov eax,[ecx+ZBufferPoint.y] |
128 | cmp [ebx+offs_zbup_y],eax ;(1-0) |
128 | cmp [ebx+ZBufferPoint.y],eax ;(1-0) |
129 | jle @f |
129 | jle @f |
130 | xchg ecx,ebx |
130 | xchg ecx,ebx |
131 | @@: |
131 | @@: |
132 | mov eax,[edx+offs_zbup_y] |
132 | mov eax,[edx+ZBufferPoint.y] |
133 | cmp [ecx+offs_zbup_y],eax ;(2-1) |
133 | cmp [ecx+ZBufferPoint.y],eax ;(2-1) |
134 | jle @f |
134 | jle @f |
135 | xchg edx,ecx |
135 | xchg edx,ecx |
136 | @@: |
136 | @@: |
137 | mov [p0],ebx |
137 | mov [p0],ebx |
138 | mov [p1],ecx |
138 | mov [p1],ecx |
Line 139... | Line 139... | ||
139 | mov [p2],edx |
139 | mov [p2],edx |
140 | 140 | ||
141 | ; we compute dXdx and dXdy for all interpolated values |
141 | ; we compute dXdx and dXdy for all interpolated values |
142 | mov eax,[ecx+offs_zbup_x] |
142 | mov eax,[ecx+ZBufferPoint.x] |
143 | sub eax,[ebx+offs_zbup_x] |
143 | sub eax,[ebx+ZBufferPoint.x] |
144 | mov [fdx1],eax ;p1.x - p0.x |
144 | mov [fdx1],eax ;p1.x - p0.x |
145 | mov eax,[ecx+offs_zbup_y] |
145 | mov eax,[ecx+ZBufferPoint.y] |
Line 146... | Line 146... | ||
146 | sub eax,[ebx+offs_zbup_y] |
146 | sub eax,[ebx+ZBufferPoint.y] |
147 | mov [fdy1],eax ;p1.y - p0.y |
147 | mov [fdy1],eax ;p1.y - p0.y |
148 | 148 | ||
149 | mov eax,[edx+offs_zbup_x] |
149 | mov eax,[edx+ZBufferPoint.x] |
150 | sub eax,[ebx+offs_zbup_x] |
150 | sub eax,[ebx+ZBufferPoint.x] |
151 | mov [fdx2],eax ;p2.x - p0.x |
151 | mov [fdx2],eax ;p2.x - p0.x |
Line 152... | Line 152... | ||
152 | mov eax,[edx+offs_zbup_y] |
152 | mov eax,[edx+ZBufferPoint.y] |
153 | sub eax,[ebx+offs_zbup_y] |
153 | sub eax,[ebx+ZBufferPoint.y] |
154 | mov [fdy2],eax ;p2.y - p0.y |
154 | mov [fdy2],eax ;p2.y - p0.y |
Line 181... | Line 181... | ||
181 | fild dword[fdy2] |
181 | fild dword[fdy2] |
182 | fmulp |
182 | fmulp |
183 | fstp dword[fdy2] ;fdy2 *= fz |
183 | fstp dword[fdy2] ;fdy2 *= fz |
Line 184... | Line 184... | ||
184 | 184 | ||
185 | if INTERP_Z eq 1 |
185 | if INTERP_Z eq 1 |
186 | mov eax,[ecx+offs_zbup_z] |
186 | mov eax,[ecx+ZBufferPoint.z] |
187 | sub eax,[ebx+offs_zbup_z] |
187 | sub eax,[ebx+ZBufferPoint.z] |
188 | mov [d1],eax |
188 | mov [d1],eax |
189 | mov eax,[edx+offs_zbup_z] |
189 | mov eax,[edx+ZBufferPoint.z] |
190 | sub eax,[ebx+offs_zbup_z] |
190 | sub eax,[ebx+ZBufferPoint.z] |
191 | mov [d2],eax |
191 | mov [d2],eax |
192 | fild dword[d1] ;d1 = p1.z - p0.z |
192 | fild dword[d1] ;d1 = p1.z - p0.z |
Line 193... | Line 193... | ||
193 | fild dword[d2] ;d2 = p2.z - p0.z |
193 | fild dword[d2] ;d2 = p2.z - p0.z |
194 | 194 | ||
195 | ;dzdx = (int) (fdy2*d1 - fdy1*d2) |
195 | ;dzdx = (int) (fdy2*d1 - fdy1*d2) |
196 | ;dzdy = (int) (fdx1*d2 - fdx2*d1) |
196 | ;dzdy = (int) (fdx1*d2 - fdx2*d1) |
Line 197... | Line 197... | ||
197 | calc_d1d2 fi, dzdx, dzdy |
197 | calc_d1d2 fi, dzdx, dzdy |
198 | end if |
198 | end if |
199 | 199 | ||
200 | if INTERP_RGB eq 1 |
200 | if INTERP_RGB eq 1 |
201 | mov eax,[ecx+offs_zbup_r] |
201 | mov eax,[ecx+ZBufferPoint.r] |
202 | sub eax,[ebx+offs_zbup_r] |
202 | sub eax,[ebx+ZBufferPoint.r] |
203 | mov [d1],eax |
203 | mov [d1],eax |
204 | mov eax,[edx+offs_zbup_r] |
204 | mov eax,[edx+ZBufferPoint.r] |
205 | sub eax,[ebx+offs_zbup_r] |
205 | sub eax,[ebx+ZBufferPoint.r] |
Line 206... | Line 206... | ||
206 | mov [d2],eax |
206 | mov [d2],eax |
207 | fild dword[d1] ;d1 = p1.r - p0.r |
207 | fild dword[d1] ;d1 = p1.r - p0.r |
208 | fild dword[d2] ;d2 = p2.r - p0.r |
208 | fild dword[d2] ;d2 = p2.r - p0.r |
Line 209... | Line 209... | ||
209 | 209 | ||
210 | ;drdx = (int) (fdy2*d1 - fdy1*d2) |
210 | ;drdx = (int) (fdy2*d1 - fdy1*d2) |
211 | ;drdy = (int) (fdx1*d2 - fdx2*d1) |
211 | ;drdy = (int) (fdx1*d2 - fdx2*d1) |
212 | calc_d1d2 fi, drdx, drdy |
212 | calc_d1d2 fi, drdx, drdy |
213 | 213 | ||
214 | mov eax,[ecx+offs_zbup_g] |
214 | mov eax,[ecx+ZBufferPoint.g] |
215 | sub eax,[ebx+offs_zbup_g] |
215 | sub eax,[ebx+ZBufferPoint.g] |
216 | mov [d1],eax |
216 | mov [d1],eax |
Line 217... | Line 217... | ||
217 | mov eax,[edx+offs_zbup_g] |
217 | mov eax,[edx+ZBufferPoint.g] |
218 | sub eax,[ebx+offs_zbup_g] |
218 | sub eax,[ebx+ZBufferPoint.g] |
219 | mov [d2],eax |
219 | mov [d2],eax |
Line 220... | Line 220... | ||
220 | fild dword[d1] ;d1 = p1.g - p0.g |
220 | fild dword[d1] ;d1 = p1.g - p0.g |
221 | fild dword[d2] ;d2 = p2.g - p0.g |
221 | fild dword[d2] ;d2 = p2.g - p0.g |
222 | 222 | ||
223 | ;dgdx = (int) (fdy2*d1 - fdy1*d2) |
223 | ;dgdx = (int) (fdy2*d1 - fdy1*d2) |
224 | ;dgdy = (int) (fdx1*d2 - fdx2*d1) |
224 | ;dgdy = (int) (fdx1*d2 - fdx2*d1) |
225 | calc_d1d2 fi, dgdx, dgdy |
225 | calc_d1d2 fi, dgdx, dgdy |
226 | 226 | ||
227 | mov eax,[ecx+offs_zbup_b] |
227 | mov eax,[ecx+ZBufferPoint.b] |
Line 228... | Line 228... | ||
228 | sub eax,[ebx+offs_zbup_b] |
228 | sub eax,[ebx+ZBufferPoint.b] |
229 | mov [d1],eax |
229 | mov [d1],eax |
230 | mov eax,[edx+offs_zbup_b] |
230 | mov eax,[edx+ZBufferPoint.b] |
231 | sub eax,[ebx+offs_zbup_b] |
231 | sub eax,[ebx+ZBufferPoint.b] |
Line 232... | Line 232... | ||
232 | mov [d2],eax |
232 | mov [d2],eax |
233 | fild dword[d1] ;d1 = p1.b - p0.b |
233 | fild dword[d1] ;d1 = p1.b - p0.b |
234 | fild dword[d2] ;d2 = p2.b - p0.b |
234 | fild dword[d2] ;d2 = p2.b - p0.b |
235 | 235 | ||
236 | ;dbdx = (int) (fdy2*d1 - fdy1*d2) |
236 | ;dbdx = (int) (fdy2*d1 - fdy1*d2) |
237 | ;dbdy = (int) (fdx1*d2 - fdx2*d1) |
237 | ;dbdy = (int) (fdx1*d2 - fdx2*d1) |
238 | calc_d1d2 fi, dbdx, dbdy |
238 | calc_d1d2 fi, dbdx, dbdy |
239 | end if |
239 | end if |
240 | 240 | ||
Line 241... | Line 241... | ||
241 | if INTERP_ST eq 1 |
241 | if INTERP_ST eq 1 |
242 | mov eax,[ecx+offs_zbup_s] |
242 | mov eax,[ecx+ZBufferPoint.s] |
243 | sub eax,[ebx+offs_zbup_s] |
243 | sub eax,[ebx+ZBufferPoint.s] |
Line 244... | Line 244... | ||
244 | mov [d1],eax |
244 | mov [d1],eax |
245 | mov eax,[edx+offs_zbup_s] |
245 | mov eax,[edx+ZBufferPoint.s] |
246 | sub eax,[ebx+offs_zbup_s] |
246 | sub eax,[ebx+ZBufferPoint.s] |
247 | mov [d2],eax |
247 | mov [d2],eax |
248 | fild dword[d1] ;d1 = p1.s - p0.s |
248 | fild dword[d1] ;d1 = p1.s - p0.s |
249 | fild dword[d2] ;d2 = p2.s - p0.s |
249 | fild dword[d2] ;d2 = p2.s - p0.s |
250 | 250 | ||
251 | ;dsdx = (int) (fdy2*d1 - fdy1*d2) |
251 | ;dsdx = (int) (fdy2*d1 - fdy1*d2) |
Line 252... | Line 252... | ||
252 | ;dsdy = (int) (fdx1*d2 - fdx2*d1) |
252 | ;dsdy = (int) (fdx1*d2 - fdx2*d1) |
253 | calc_d1d2 fi, dsdx, dsdy |
253 | calc_d1d2 fi, dsdx, dsdy |
254 | 254 | ||
255 | mov eax,[ecx+offs_zbup_t] |
255 | mov eax,[ecx+ZBufferPoint.t] |
Line 256... | Line 256... | ||
256 | sub eax,[ebx+offs_zbup_t] |
256 | sub eax,[ebx+ZBufferPoint.t] |
257 | mov [d1],eax |
257 | mov [d1],eax |
258 | mov eax,[edx+offs_zbup_t] |
258 | mov eax,[edx+ZBufferPoint.t] |
259 | sub eax,[ebx+offs_zbup_t] |
259 | sub eax,[ebx+ZBufferPoint.t] |
260 | mov [d2],eax |
260 | mov [d2],eax |
261 | fild dword[d1] ;d1 = p1.t - p0.t |
261 | fild dword[d1] ;d1 = p1.t - p0.t |
262 | fild dword[d2] ;d2 = p2.t - p0.t |
262 | fild dword[d2] ;d2 = p2.t - p0.t |
263 | 263 | ||
Line 264... | Line 264... | ||
264 | ;dtdx = (int) (fdy2*d1 - fdy1*d2) |
264 | ;dtdx = (int) (fdy2*d1 - fdy1*d2) |
265 | ;dtdy = (int) (fdx1*d2 - fdx2*d1) |
265 | ;dtdy = (int) (fdx1*d2 - fdx2*d1) |
266 | calc_d1d2 fi, dtdx, dtdy |
266 | calc_d1d2 fi, dtdx, dtdy |
267 | end if |
267 | end if |
268 | 268 | ||
269 | if INTERP_STZ eq 1 |
269 | if INTERP_STZ eq 1 |
270 | fild dword[ebx+offs_zbup_z] |
270 | fild dword[ebx+ZBufferPoint.z] |
Line 271... | Line 271... | ||
271 | fild dword[ebx+offs_zbup_s] |
271 | fild dword[ebx+ZBufferPoint.s] |
272 | fmul st0,st1 |
272 | fmul st0,st1 |
273 | fstp dword[ebx+offs_zbup_sz] ;p0.sz = (float) p0.s * p0.z |
273 | fstp dword[ebx+ZBufferPoint.fsz] ;p0.sz = (float) p0.s * p0.z |
274 | fild dword[ebx+offs_zbup_t] |
274 | fild dword[ebx+ZBufferPoint.t] |
275 | fmulp |
275 | fmulp |
276 | fstp dword[ebx+offs_zbup_tz] ;p0.tz = (float) p0.t * p0.z |
276 | fstp dword[ebx+ZBufferPoint.tz] ;p0.tz = (float) p0.t * p0.z |
277 | 277 | ||
Line 278... | Line 278... | ||
278 | fild dword[ecx+offs_zbup_z] |
278 | fild dword[ecx+ZBufferPoint.z] |
279 | fild dword[ecx+offs_zbup_s] |
279 | fild dword[ecx+ZBufferPoint.s] |
280 | fmul st0,st1 |
280 | fmul st0,st1 |
281 | fstp dword[ecx+offs_zbup_sz] ;p1.sz = (float) p1.s * p1.z |
281 | fstp dword[ecx+ZBufferPoint.fsz] ;p1.sz = (float) p1.s * p1.z |
Line 282... | Line 282... | ||
282 | fild dword[ecx+offs_zbup_t] |
282 | fild dword[ecx+ZBufferPoint.t] |
283 | fmulp |
283 | fmulp |
284 | fstp dword[ecx+offs_zbup_tz] ;p1.tz = (float) p1.t * p1.z |
284 | fstp dword[ecx+ZBufferPoint.tz] ;p1.tz = (float) p1.t * p1.z |
Line 285... | Line 285... | ||
285 | 285 | ||
286 | fild dword[edx+offs_zbup_z] |
286 | fild dword[edx+ZBufferPoint.z] |
287 | fild dword[edx+offs_zbup_s] |
287 | fild dword[edx+ZBufferPoint.s] |
288 | fmul st0,st1 |
288 | fmul st0,st1 |
Line 289... | Line 289... | ||
289 | fstp dword[edx+offs_zbup_sz] ;p2.sz = (float) p2.s * p2.z |
289 | fstp dword[edx+ZBufferPoint.fsz] ;p2.sz = (float) p2.s * p2.z |
290 | fild dword[edx+offs_zbup_t] |
290 | fild dword[edx+ZBufferPoint.t] |
291 | fmulp |
291 | fmulp |
292 | fstp dword[edx+offs_zbup_tz] ;p2.tz = (float) p2.t * p2.z |
292 | fstp dword[edx+ZBufferPoint.tz] ;p2.tz = (float) p2.t * p2.z |
Line 293... | Line 293... | ||
293 | 293 | ||
294 | fld dword[ecx+offs_zbup_sz] |
294 | fld dword[ecx+ZBufferPoint.fsz] |
295 | fsub dword[ebx+offs_zbup_sz] ;d1 = p1.sz - p0.sz |
295 | fsub dword[ebx+ZBufferPoint.fsz] ;d1 = p1.sz - p0.sz |
296 | fld dword[edx+offs_zbup_sz] |
296 | fld dword[edx+ZBufferPoint.fsz] |
297 | fsub dword[ebx+offs_zbup_sz] ;d2 = p2.sz - p0.sz |
297 | fsub dword[ebx+ZBufferPoint.fsz] ;d2 = p2.sz - p0.sz |
298 | 298 | ||
299 | ;dszdx = (fdy2*d1 - fdy1*d2) |
299 | ;dszdx = (fdy2*d1 - fdy1*d2) |
300 | ;dszdy = (fdx1*d2 - fdx2*d1) |
300 | ;dszdy = (fdx1*d2 - fdx2*d1) |
301 | calc_d1d2 f, dszdx, dszdy |
301 | calc_d1d2 f, dszdx, dszdy |
302 | 302 | ||
303 | fld dword[ecx+offs_zbup_tz] |
303 | fld dword[ecx+ZBufferPoint.tz] |
Line 304... | Line 304... | ||
304 | fsub dword[ebx+offs_zbup_tz] ;d1 = p1.tz - p0.tz |
304 | fsub dword[ebx+ZBufferPoint.tz] ;d1 = p1.tz - p0.tz |
Line 305... | Line 305... | ||
305 | fld dword[edx+offs_zbup_tz] |
305 | fld dword[edx+ZBufferPoint.tz] |
Line 347... | Line 347... | ||
347 | align 4 |
347 | align 4 |
348 | .els_1: |
348 | .els_1: |
349 | mov [l2],ecx |
349 | mov [l2],ecx |
350 | mov [pr2],edx |
350 | mov [pr2],edx |
351 | .end_1: |
351 | .end_1: |
352 | mov eax,[ecx+offs_zbup_y] |
352 | mov eax,[ecx+ZBufferPoint.y] |
353 | sub eax,[ebx+offs_zbup_y] |
353 | sub eax,[ebx+ZBufferPoint.y] |
354 | mov [nb_lines],eax ;nb_lines = p1.y - p0.y |
354 | mov [nb_lines],eax ;nb_lines = p1.y - p0.y |
355 | jmp .end_0 |
355 | jmp .end_0 |
356 | align 4 |
356 | align 4 |
357 | .els_0: |
357 | .els_0: |
358 | ; second part |
358 | ; second part |
Line 372... | Line 372... | ||
372 | mov dword[update_left],1 |
372 | mov dword[update_left],1 |
373 | mov dword[update_right],0 |
373 | mov dword[update_right],0 |
374 | mov [l1],ecx |
374 | mov [l1],ecx |
375 | mov [l2],edx |
375 | mov [l2],edx |
376 | .end_2: |
376 | .end_2: |
377 | mov eax,[edx+offs_zbup_y] |
377 | mov eax,[edx+ZBufferPoint.y] |
378 | sub eax,[ecx+offs_zbup_y] |
378 | sub eax,[ecx+ZBufferPoint.y] |
379 | inc eax |
379 | inc eax |
380 | mov [nb_lines],eax ;nb_lines = p2.y - p1.y + 1 |
380 | mov [nb_lines],eax ;nb_lines = p2.y - p1.y + 1 |
381 | .end_0: |
381 | .end_0: |
Line 382... | Line 382... | ||
382 | 382 | ||
383 | ; compute the values for the left edge |
383 | ; compute the values for the left edge |
384 | cmp dword[update_left],0 ;if (update_left) |
384 | cmp dword[update_left],0 ;if (update_left) |
385 | je .end_upd_l |
385 | je .end_upd_l |
386 | mov ebx,[l1] |
386 | mov ebx,[l1] |
387 | mov ecx,[l2] |
387 | mov ecx,[l2] |
388 | mov edx,[ecx+offs_zbup_y] |
388 | mov edx,[ecx+ZBufferPoint.y] |
389 | sub edx,[ebx+offs_zbup_y] |
389 | sub edx,[ebx+ZBufferPoint.y] |
390 | mov [dy1],edx ;dy1 = l2.y - l1.y |
390 | mov [dy1],edx ;dy1 = l2.y - l1.y |
391 | mov eax,[ecx+offs_zbup_x] |
391 | mov eax,[ecx+ZBufferPoint.x] |
392 | sub eax,[ebx+offs_zbup_x] |
392 | sub eax,[ebx+ZBufferPoint.x] |
393 | mov [dx1],eax ;dx1 = l2.x - l1.x |
393 | mov [dx1],eax ;dx1 = l2.x - l1.x |
394 | cmp edx,0 ;if (dy1 > 0) |
394 | cmp edx,0 ;if (dy1 > 0) |
395 | jle .els_3 |
395 | jle .els_3 |
396 | xor edx,edx |
396 | xor edx,edx |
Line 410... | Line 410... | ||
410 | jmp .end_3 |
410 | jmp .end_3 |
411 | align 4 |
411 | align 4 |
412 | .els_3: |
412 | .els_3: |
413 | xor eax,eax |
413 | xor eax,eax |
414 | .end_3: |
414 | .end_3: |
415 | mov edx,[ebx+offs_zbup_x] |
415 | mov edx,[ebx+ZBufferPoint.x] |
416 | mov [x1],edx ;x1 = l1.x |
416 | mov [x1],edx ;x1 = l1.x |
417 | mov dword[error],0 ;error = 0 |
417 | mov dword[error],0 ;error = 0 |
418 | mov dword[derror],eax |
418 | mov dword[derror],eax |
419 | and dword[derror],0xffff ;derror = eax & 0x0000ffff |
419 | and dword[derror],0xffff ;derror = eax & 0x0000ffff |
420 | sar eax,16 |
420 | sar eax,16 |
Line 422... | Line 422... | ||
422 | inc eax |
422 | inc eax |
423 | mov [dxdy_max],eax |
423 | mov [dxdy_max],eax |
Line 424... | Line 424... | ||
424 | 424 | ||
425 | if INTERP_Z eq 1 |
425 | if INTERP_Z eq 1 |
426 | mov eax,[l1] |
426 | mov eax,[l1] |
427 | mov eax,[eax+offs_zbup_z] |
427 | mov eax,[eax+ZBufferPoint.z] |
428 | mov [z1],eax ;z1 = l1.z |
428 | mov [z1],eax ;z1 = l1.z |
429 | mov eax,[dzdx] |
429 | mov eax,[dzdx] |
430 | imul eax,[dxdy_min] |
430 | imul eax,[dxdy_min] |
431 | add eax,[dzdy] |
431 | add eax,[dzdy] |
432 | mov [dzdl_min],eax ;dzdl_min = (dzdy +dzdx*dxdy_min) |
432 | mov [dzdl_min],eax ;dzdl_min = (dzdy +dzdx*dxdy_min) |
433 | add eax,[dzdx] |
433 | add eax,[dzdx] |
434 | mov [dzdl_max],eax ;dzdl_max = dzdl_min +dzdx |
434 | mov [dzdl_max],eax ;dzdl_max = dzdl_min +dzdx |
435 | end if |
435 | end if |
436 | if INTERP_RGB eq 1 |
436 | if INTERP_RGB eq 1 |
437 | mov ebx,[l1] |
437 | mov ebx,[l1] |
438 | mov eax,[ebx+offs_zbup_r] |
438 | mov eax,[ebx+ZBufferPoint.r] |
439 | mov [r1],eax ;r1 = l1.r |
439 | mov [r1],eax ;r1 = l1.r |
440 | mov eax,[drdx] |
440 | mov eax,[drdx] |
441 | imul eax,[dxdy_min] |
441 | imul eax,[dxdy_min] |
442 | add eax,[drdy] |
442 | add eax,[drdy] |
443 | mov [drdl_min],eax ;drdl_min = (drdy +drdx*dxdy_min) |
443 | mov [drdl_min],eax ;drdl_min = (drdy +drdx*dxdy_min) |
444 | add eax,[drdx] |
444 | add eax,[drdx] |
Line 445... | Line 445... | ||
445 | mov [drdl_max],eax ;drdl_max = drdl_min +drdx |
445 | mov [drdl_max],eax ;drdl_max = drdl_min +drdx |
446 | 446 | ||
447 | mov eax,[ebx+offs_zbup_g] |
447 | mov eax,[ebx+ZBufferPoint.g] |
448 | mov [g1],eax ;g1 = l1.g |
448 | mov [g1],eax ;g1 = l1.g |
449 | mov eax,[dgdx] |
449 | mov eax,[dgdx] |
450 | imul eax,[dxdy_min] |
450 | imul eax,[dxdy_min] |
451 | add eax,[dgdy] |
451 | add eax,[dgdy] |
452 | mov [dgdl_min],eax ;dgdl_min = (dgdy +dgdx*dxdy_min) |
452 | mov [dgdl_min],eax ;dgdl_min = (dgdy +dgdx*dxdy_min) |
Line 453... | Line 453... | ||
453 | add eax,[dgdx] |
453 | add eax,[dgdx] |
454 | mov [dgdl_max],eax ;dgdl_max = dgdl_min +dgdx |
454 | mov [dgdl_max],eax ;dgdl_max = dgdl_min +dgdx |
455 | 455 | ||
456 | mov eax,[ebx+offs_zbup_b] |
456 | mov eax,[ebx+ZBufferPoint.b] |
457 | mov [b1],eax ;b1 = l1.b |
457 | mov [b1],eax ;b1 = l1.b |
458 | mov eax,[dbdx] |
458 | mov eax,[dbdx] |
459 | imul eax,[dxdy_min] |
459 | imul eax,[dxdy_min] |
460 | add eax,[dbdy] |
460 | add eax,[dbdy] |
461 | mov [dbdl_min],eax ;dbdl_min = (dbdy +dbdx*dxdy_min) |
461 | mov [dbdl_min],eax ;dbdl_min = (dbdy +dbdx*dxdy_min) |
462 | add eax,[dbdx] |
462 | add eax,[dbdx] |
463 | mov [dbdl_max],eax ;dbdl_max = dbdl_min +dbdx |
463 | mov [dbdl_max],eax ;dbdl_max = dbdl_min +dbdx |
464 | end if |
464 | end if |
465 | if INTERP_ST eq 1 |
465 | if INTERP_ST eq 1 |
466 | mov ebx,[l1] |
466 | mov ebx,[l1] |
467 | mov eax,[ebx+offs_zbup_s] |
467 | mov eax,[ebx+ZBufferPoint.s] |
468 | mov [s1],eax ;s1 = l1.s |
468 | mov [s1],eax ;s1 = l1.s |
469 | mov eax,[dsdx] |
469 | mov eax,[dsdx] |
470 | imul eax,[dxdy_min] |
470 | imul eax,[dxdy_min] |
471 | add eax,[dsdy] |
471 | add eax,[dsdy] |
Line 472... | Line 472... | ||
472 | mov [dsdl_min],eax ;dsdl_min = (dsdy +dsdx*dxdy_min) |
472 | mov [dsdl_min],eax ;dsdl_min = (dsdy +dsdx*dxdy_min) |
473 | add eax,[dsdx] |
473 | add eax,[dsdx] |
474 | mov [dsdl_max],eax ;dsdl_max = dsdl_min +dsdx |
474 | mov [dsdl_max],eax ;dsdl_max = dsdl_min +dsdx |
475 | 475 | ||
476 | mov eax,[ebx+offs_zbup_t] |
476 | mov eax,[ebx+ZBufferPoint.t] |
477 | mov [t1],eax ;t1 = l1.t |
477 | mov [t1],eax ;t1 = l1.t |
478 | mov eax,[dtdx] |
478 | mov eax,[dtdx] |
479 | imul eax,[dxdy_min] |
479 | imul eax,[dxdy_min] |
480 | add eax,[dtdy] |
480 | add eax,[dtdy] |
481 | mov [dtdl_min],eax ;dtdl_min = (dtdy +dtdx*dxdy_min) |
481 | mov [dtdl_min],eax ;dtdl_min = (dtdy +dtdx*dxdy_min) |
482 | add eax,[dtdx] |
482 | add eax,[dtdx] |
483 | mov [dtdl_max],eax ;dtdl_max = dtdl_min +dtdx |
483 | mov [dtdl_max],eax ;dtdl_max = dtdl_min +dtdx |
484 | end if |
484 | end if |
485 | if INTERP_STZ eq 1 |
485 | if INTERP_STZ eq 1 |
486 | mov ebx,[l1] |
486 | mov ebx,[l1] |
487 | mov eax,[ebx+offs_zbup_sz] |
487 | mov eax,[ebx+ZBufferPoint.fsz] |
488 | mov [sz1],eax ;sz1 = l1.sz - преобразований нет, потому без сопроцессора |
488 | mov [sz1],eax ;sz1 = l1.sz - преобразований нет, потому без сопроцессора |
489 | fild dword[dxdy_min] |
489 | fild dword[dxdy_min] |
490 | fmul dword[dszdx] |
490 | fmul dword[dszdx] |
Line 491... | Line 491... | ||
491 | fadd dword[dszdy] |
491 | fadd dword[dszdy] |
492 | fst dword[dszdl_min] ;dszdl_min = (dszdy +dszdx*dxdy_min) |
492 | fst dword[dszdl_min] ;dszdl_min = (dszdy +dszdx*dxdy_min) |
493 | fadd dword[dszdx] |
493 | fadd dword[dszdx] |
494 | fstp dword[dszdl_max] ;dszdl_max = dszdl_min +dszdx |
494 | fstp dword[dszdl_max] ;dszdl_max = dszdl_min +dszdx |
495 | 495 | ||
496 | mov eax,[ebx+offs_zbup_tz] |
496 | mov eax,[ebx+ZBufferPoint.tz] |
Line 508... | Line 508... | ||
508 | 508 | ||
509 | cmp dword[update_right],0 ;if(update_right) |
509 | cmp dword[update_right],0 ;if(update_right) |
510 | je .end_upd_r |
510 | je .end_upd_r |
511 | mov ebx,[pr1] |
511 | mov ebx,[pr1] |
512 | mov ecx,[pr2] |
512 | mov ecx,[pr2] |
513 | mov edx,[ebx+offs_zbup_x] |
513 | mov edx,[ebx+ZBufferPoint.x] |
514 | mov eax,[ecx+offs_zbup_x] |
514 | mov eax,[ecx+ZBufferPoint.x] |
515 | sub eax,edx |
515 | sub eax,edx |
516 | ;mov [dx2],eax ;dx2 = pr2.x - pr1.x |
516 | ;mov [dx2],eax ;dx2 = pr2.x - pr1.x |
517 | shl edx,16 |
517 | shl edx,16 |
518 | mov [x2],edx ; x2 = pr1.x << 16 |
518 | mov [x2],edx ; x2 = pr1.x << 16 |
519 | mov edx,[ecx+offs_zbup_y] |
519 | mov edx,[ecx+ZBufferPoint.y] |
520 | sub edx,[ebx+offs_zbup_y] |
520 | sub edx,[ebx+ZBufferPoint.y] |
521 | mov [dy2],edx ;dy2 = pr2.y - pr1.y |
521 | mov [dy2],edx ;dy2 = pr2.y - pr1.y |
522 | cmp edx,0 ;if (dy2 > 0) |
522 | cmp edx,0 ;if (dy2 > 0) |
523 | jle .els_4 |
523 | jle .els_4 |
524 | xor edx,edx |
524 | xor edx,edx |
Line 761... | Line 761... | ||
761 | mov eax,[dx2dy2] |
761 | mov eax,[dx2dy2] |
762 | add [x2],eax |
762 | add [x2],eax |
Line 763... | Line 763... | ||
763 | 763 | ||
764 | ; screen coordinates |
764 | ; screen coordinates |
765 | mov ebx,[zb] |
765 | mov ebx,[zb] |
766 | mov eax,[ebx+offs_zbuf_linesize] |
766 | mov eax,[ebx+ZBuffer.linesize] |
767 | add [pp1],eax |
767 | add [pp1],eax |
768 | mov eax,[ebx+offs_zbuf_xsize] |
768 | mov eax,[ebx+ZBuffer.xsize] |
769 | shl eax,1 |
769 | shl eax,1 |
770 | add [pz1],eax |
770 | add [pz1],eax |
771 | jmp .beg_w_lin |
771 | jmp .beg_w_lin |
772 | align 4 |
772 | align 4 |