Subversion Repositories Kolibri OS

Rev

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