Subversion Repositories Kolibri OS

Rev

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])