Subversion Repositories Kolibri OS

Rev

Rev 6108 | Rev 6113 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6108 Rev 6111
Line 32... Line 32...
32
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
32
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
33
	jl .end_0
33
	jl .end_0
34
		;edi = pp
34
		;edi = pp
35
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
35
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
36
if TGL_FEATURE_RENDER_BITS eq 24
36
if TGL_FEATURE_RENDER_BITS eq 24
37
		mov cl,[colorR]
37
		mov al,[colorR]
38
		mov ch,[colorG]
38
		mov ah,[colorG]
39
		mov word[edi+3*_a],cx
39
		mov word[edi+3*_a],ax
40
		mov cl,[colorB]
40
		mov al,[colorB]
41
		mov byte[edi+3*_a +2],cl
41
		mov byte[edi+3*_a +2],al
42
;else
42
;else
43
;      pp[_a]=color;
43
;      pp[_a]=color;
44
end if
44
end if
45
	.end_0:
45
	.end_0:
46
	mov eax,[dzdx]
46
	mov eax,[dzdx]
Line 67... Line 67...
67
INTERP_Z equ 1
67
INTERP_Z equ 1
68
INTERP_RGB equ 1
68
INTERP_RGB equ 1
Line 69... Line 69...
69
 
69
 
70
macro DRAW_INIT
70
macro DRAW_INIT
71
{
-
 
72
if TGL_FEATURE_RENDER_BITS eq 16
-
 
73
;  _drgbdx=((drdx / (1<<6)) << 22) & 0xFFC00000;
-
 
74
;  _drgbdx|=(dgdx / (1<<5)) & 0x000007FF;
-
 
75
;  _drgbdx|=((dbdx / (1<<7)) << 12) & 0x001FF000;
-
 
76
end if
71
{
Line 77... Line 72...
77
}
72
}
78
 
73
 
79
macro PUT_PIXEL _a
74
macro PUT_PIXEL _a
Line 86... Line 81...
86
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
81
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
87
	jl .end_0
82
	jl .end_0
88
		;edi = pp
83
		;edi = pp
89
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
84
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
90
if TGL_FEATURE_RENDER_BITS eq 24
85
if TGL_FEATURE_RENDER_BITS eq 24
91
		mov ecx,[og1]
86
		mov ebx,[or1]
92
		mov eax,[or1]
87
		mov eax,[og1]
93
		mov cl,ah
88
		mov al,bh
94
		mov word[edi+3*_a],cx
89
		mov word[edi+3*_a],ax
95
		mov eax,[ob1]
90
		mov eax,[ob1]
96
		mov byte[edi+3*_a +2],ah
91
		mov byte[edi+3*_a +2],ah
97
end if
92
end if
98
if TGL_FEATURE_RENDER_BITS eq 16
93
;if TGL_FEATURE_RENDER_BITS eq 32
99
;      tmp=rgb & 0xF81F07E0;
-
 
100
;      pp[_a]=tmp | (tmp >> 16);
-
 
101
;else
-
 
102
;      pp[_a] = RGB_TO_PIXEL(or1, og1, ob1);
94
;      pp[_a] = RGB_TO_PIXEL(or1, og1, ob1);
103
end if
95
;end if
104
	.end_0:
96
	.end_0:
105
	mov eax,[dzdx]
97
	mov eax,[dzdx]
106
	add [z],eax
98
	add [z],eax
107
if TGL_FEATURE_RENDER_BITS eq 16
-
 
108
;    rgb=(rgb+drgbdx) & ( ~ 0x00200800);
-
 
109
end if
-
 
110
if TGL_FEATURE_RENDER_BITS <> 16
-
 
111
	mov eax,[dgdx]
99
	mov eax,[dgdx]
112
	add [og1],eax
100
	add [og1],eax
113
	mov eax,[drdx]
101
	mov eax,[drdx]
114
	add [or1],eax
102
	add [or1],eax
115
	mov eax,[dbdx]
103
	mov eax,[dbdx]
116
	add [ob1],eax
104
	add [ob1],eax
117
end if
-
 
118
}
-
 
119
 
-
 
120
macro DRAW_LINE code
-
 
121
{
-
 
122
local .cycle_0
-
 
123
local .cycle_1
-
 
124
if TGL_FEATURE_RENDER_BITS eq 16
-
 
125
if code eq 0
-
 
126
	tmp dd ? ;uint
-
 
127
	rgb dd ? ;uint
-
 
128
	drgbdx dd ? ;uint
-
 
129
end if
-
 
130
if code eq 1
-
 
131
	mov eax,[x2]
-
 
132
	sar eax,16
-
 
133
	sub eax,[x1]
-
 
134
	mov [n],eax ;n = (x2 >> 16) - x1
-
 
135
	mov edi,[pp1]
-
 
136
	add edi,[x1] ;pp = pp1 + x1
-
 
137
	mov eax,[pz1]
-
 
138
	add eax,[x1]
-
 
139
	mov [pz],eax ;pz = pz1 + x1
-
 
140
	mov eax,[z1]
-
 
141
	mov [z],eax ;z = z1
-
 
142
	mov eax,[r1]
-
 
143
	shl eax,16
-
 
144
	and eax,0xFFC00000
-
 
145
	mov [rgb],eax ;rgb = (r1 << 16) & 0xFFC00000
-
 
146
	mov eax,[g1]
-
 
147
	shr eax,5
-
 
148
	and eax,0x000007FF
-
 
149
	or [rgb],eax ;rgb |= (g1 >> 5) & 0x000007FF
-
 
150
	mov eax,[b1]
-
 
151
	shl eax,5
-
 
152
	and eax,0x001FF000
-
 
153
	or [rgb],eax ;rgb |= (b1 << 5) & 0x001FF000
-
 
154
	mov eax,[_drgbdx]
-
 
155
	mov [drgbdx],eax ;drgbdx = _drgbdx
-
 
156
align 4
-
 
157
	.cycle_0: ;while (n>=3)
-
 
158
	cmp dword[n],3
-
 
159
	jl .cycle_1
-
 
160
		PUT_PIXEL 0
-
 
161
		PUT_PIXEL 1
-
 
162
		PUT_PIXEL 2
-
 
163
		PUT_PIXEL 3
-
 
164
		add dword[pz],8
-
 
165
		add edi,4*3
-
 
166
		sub [n],4
-
 
167
	jmp .cycle_0
-
 
168
	.cycle_1: ;while (n>=0)
-
 
169
	cmp dword[n],0
-
 
170
	jl .cycle_1_end
-
 
171
		PUT_PIXEL 0
-
 
172
		add dword[pz],2
-
 
173
		add edi,3
-
 
174
		dec dword[n]
-
 
175
		jmp .cycle_1
-
 
176
	.cycle_1_end:
-
 
177
end if
-
 
178
end if
-
 
179
}
105
}
Line 180... Line 106...
180
 
106
 
181
align 4
107
align 4
182
proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword
108
proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword
183
locals
-
 
184
if TGL_FEATURE_RENDER_BITS eq 16
-
 
185
	_drgbdx dd ? ;int
-
 
186
end if
109
locals
Line 187... Line 110...
187
include 'ztriangle.inc'
110
include 'ztriangle.inc'
188
 
111
 
189
align 4
112
align 4
Line 317... Line 240...
317
{
240
{
318
if TGL_FEATURE_RENDER_BITS eq 24
241
if TGL_FEATURE_RENDER_BITS eq 24
319
if code eq 0
242
if code eq 0
320
	s dd ? ;uint
243
	s dd ? ;uint
321
	t dd ? ;uint
244
	t dd ? ;uint
322
	n1 dd ? ;int - длинна горизонтальной линии в пикселях
-
 
323
	dsdx dd ? ;int
245
	dsdx dd ? ;int
324
	dtdx dd ? ;int
246
	dtdx dd ? ;int
325
	fz dd ? ;float
247
	fz dd ? ;float
326
	zinv dd ? ;float
248
	zinv dd ? ;float
327
end if
249
end if
328
if code eq 1
250
if code eq 1
329
	mov eax,[x2]
251
	mov eax,[x2]
330
	sar eax,16
252
	sar eax,16
331
	sub eax,[x1]
253
	sub eax,[x1]
332
	mov [n1],eax ;n1 = (x2 >> 16) - x1
254
	mov [n],eax ;n = (x2 >> 16) - x1
333
fld1
255
fld1
334
	fild dword[z1]
256
	fild dword[z1]
335
	fst dword[fz] ;fz = (float)z1
257
	fst dword[fz] ;fz = (float)z1
336
	;fld1
258
	;fld1
337
	fdivp
259
	fdivp
338
	fstp dword[zinv] ;zinv = 1.0 / fz
260
	fstp dword[zinv] ;zinv = 1.0 / fz
339
	mov edi,[x1]
261
	mov edi,[x1]
340
	imul edi,PSZB
262
	imul edi,PSZB
341
	add edi,[pp1] ;pp = (pp1 + x1 * PSZB)
263
	add edi,[pp1] ;pp = (pp1 + x1 * PSZB)
342
	mov eax,[pz1]
264
	mov eax,[x1]
-
 
265
	shl eax,1
343
	add eax,[x1]
266
	add eax,[pz1]
344
	mov [pz],eax ;pz = pz1 + x1
267
	mov [pz],eax ;pz = pz1 + x1
345
	mov eax,[z1]
268
	mov eax,[z1]
346
	mov [z],eax ;z = z1
269
	mov [z],eax ;z = z1
347
	mov eax,[sz1]
270
	mov eax,[sz1]
348
	mov [s_z],eax ;sz = sz1
271
	mov [s_z],eax ;sz = sz1
349
	mov eax,[tz1]
272
	mov eax,[tz1]
350
	mov [t_z],eax ;tz = tz1
273
	mov [t_z],eax ;tz = tz1
351
align 4
274
align 4
352
	.cycle_2: ;while (n1>=(NB_INTERP-1))
275
	.cycle_2: ;while (n>=(NB_INTERP-1))
353
	cmp dword[n1],NB_INTERP-1
276
	cmp dword[n],NB_INTERP-1
354
	jl .cycle_2_end
277
	jl .cycle_2_end
355
		fld dword[zinv]
278
		fld dword[zinv]
356
		fld st0
279
		fld st0
357
		fmul dword[s_z] ;ss = (sz * zinv)
280
		fmul dword[s_z] ;ss = (sz * zinv)
358
		fist dword[s] ;s = (int) ss
281
		fist dword[s] ;s = (int) ss
Line 383... Line 306...
383
		PUT_PIXEL 5
306
		PUT_PIXEL 5
384
		PUT_PIXEL 6
307
		PUT_PIXEL 6
385
		PUT_PIXEL 7
308
		PUT_PIXEL 7
386
		add dword[pz],2*NB_INTERP ;pz += NB_INTERP
309
		add dword[pz],2*NB_INTERP ;pz += NB_INTERP
387
		add edi,NB_INTERP*PSZB ;pp += NB_INTERP * PSZB
310
		add edi,NB_INTERP*PSZB ;pp += NB_INTERP * PSZB
388
		sub dword[n1],NB_INTERP ;n1 -= NB_INTERP
311
		sub dword[n],NB_INTERP ;n -= NB_INTERP
389
		fld dword[ndszdx]
312
		fld dword[ndszdx]
390
		fadd dword[s_z]
313
		fadd dword[s_z]
391
		fstp dword[s_z] ;s_z += ndszdx
314
		fstp dword[s_z] ;sz += ndszdx
392
		fld dword[ndtzdx]
315
		fld dword[ndtzdx]
393
		fadd dword[t_z]
316
		fadd dword[t_z]
394
		fstp dword[t_z] ;tz += ndtzdx
317
		fstp dword[t_z] ;tz += ndtzdx
395
		jmp .cycle_2
318
		jmp .cycle_2
396
	.cycle_2_end:
319
	.cycle_2_end:
Line 409... Line 332...
409
	fchs
332
	fchs
410
	fadd dword[dtzdx]
333
	fadd dword[dtzdx]
411
	fmul dword[zinv]
334
	fmul dword[zinv]
412
	fistp dword[dtdx] ;dtdx = (int)( (dtzdx - tt*fdzdx)*zinv )
335
	fistp dword[dtdx] ;dtdx = (int)( (dtzdx - tt*fdzdx)*zinv )
413
align 4
336
align 4
414
	.cycle_3: ;while (n1>=0)
337
	.cycle_3: ;while (n>=0)
415
	cmp dword[n1],0
338
	cmp dword[n],0
416
	jl .cycle_3_end
339
	jl .cycle_3_end
417
		PUT_PIXEL 0
340
		PUT_PIXEL 0
418
		add dword[pz],2 ;pz += 1
341
		add dword[pz],2 ;pz += 1
419
		add edi,PSZB ;pp += PSZB
342
		add edi,PSZB ;pp += PSZB
420
		dec dword[n1]
343
		dec dword[n]
421
		jmp .cycle_3
344
		jmp .cycle_3
422
	.cycle_3_end:
345
	.cycle_3_end:
423
end if
346
end if
424
end if
347
end if
425
}
348
}
Line 464... Line 387...
464
		;edi = pp
387
		;edi = pp
465
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
388
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
466
		fild dword[z]
389
		fild dword[z]
467
		fld dword[s_z]
390
		fld dword[s_z]
468
		fdiv st0,st1
391
		fdiv st0,st1
469
		;fistp dword[...s...] ;s = (int) (s_z / (float) z)
392
		fistp dword[esp-4] ;s = (int) (s_z / (float) z)
-
 
393
		fld dword[t_z]
-
 
394
		fdiv st0,st1
470
;       t= (int) (t_z / (float) z);
395
		fistp dword[esp-8] ;t = (int) (t_z / (float) z)
-
 
396
		mov eax,dword[esp-8]
-
 
397
		and eax,0x3FC00000
-
 
398
		or eax,dword[esp-4]
-
 
399
		shr eax,12 ;14
-
 
400
		add eax,[texture]
-
 
401
		mov eax,[eax]
471
;       pp[_a]=texture[((t & 0x3FC00000) | s) >> 14];
402
		stosd ;pp[_a] = texture[((t & 0x3FC00000) | s) >> 14]
-
 
403
		sub edi,4
472
	.end_0:
404
	.end_0:
473
	mov eax,[dzdx]
405
	mov eax,[dzdx]
474
	add [z],eax
406
	add [z],eax
475
	fld dword[dszdx]
407
	fld dword[dszdx]
476
	fadd dword[s_z]
408
	fadd dword[s_z]