Subversion Repositories Kolibri OS

Rev

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

Rev 6113 Rev 6126
Line 10... Line 10...
10
	mov [colorG],ah ;colorG=p2.g>>8
10
	mov [colorG],ah ;colorG=p2.g>>8
11
	mov eax,[ecx+offs_zbup_b]
11
	mov eax,[ecx+offs_zbup_b]
12
	mov [colorB],ah ;colorB=p2.b>>8
12
	mov [colorB],ah ;colorB=p2.b>>8
13
;else
13
;else
14
;  color=RGB_TO_PIXEL(p2->r,p2->g,p2->b);
14
;color=RGB_TO_PIXEL(p2.r,p2.g,p2.b)
15
end if
15
end if
16
}
16
}
17
 
17
 
Line 18... Line 18...
18
macro PUT_PIXEL _a
18
macro PUT_PIXEL _a
19
{
19
{
20
local .end_0
20
local .end_0
21
	mov eax,[z]
21
	mov eax,[z]
22
	shr eax, ZB_POINT_Z_FRAC_BITS
22
	shr eax,ZB_POINT_Z_FRAC_BITS
23
	mov [zz],eax
-
 
24
	mov ebx,[pz]
-
 
25
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
23
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
26
	jl .end_0
24
	jl .end_0
27
		;edi = pp
25
		;edi = pp
28
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
26
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
29
if TGL_FEATURE_RENDER_BITS eq 24
27
if TGL_FEATURE_RENDER_BITS eq 24
30
		mov al,[colorR]
28
		mov al,[colorR]
31
		mov ah,[colorG]
29
		mov ah,[colorG]
32
		mov word[edi+3*_a],ax
30
		mov word[edi+3*_a],ax
33
		mov al,[colorB]
31
		mov al,[colorB]
34
		mov byte[edi+3*_a +2],al
32
		mov byte[edi+3*_a +2],al
35
;else
33
;else
36
;      pp[_a]=color;
34
;pp[_a]=color
37
end if
35
end if
38
	.end_0:
36
	.end_0:
39
	mov eax,[dzdx]
37
	mov eax,[dzdx]
40
	add [z],eax
38
	add [z],eax
41
}
39
}
Line 68... Line 66...
68
{
66
{
69
local .end_0
67
local .end_0
70
	mov eax,[z]
68
	mov eax,[z]
71
	shr eax,ZB_POINT_Z_FRAC_BITS
69
	shr eax,ZB_POINT_Z_FRAC_BITS
72
	mov [zz],eax
70
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
73
	mov ebx,[pz]
-
 
74
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
-
 
75
	jl .end_0
71
	jl .end_0
76
		;edi = pp
72
		;edi = pp
77
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
73
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
78
if TGL_FEATURE_RENDER_BITS eq 24
74
if TGL_FEATURE_RENDER_BITS eq 24
79
		mov ebx,[or1]
75
		mov ebx,[or1]
80
		mov eax,[og1]
76
		mov eax,[og1]
81
		mov al,bh
77
		mov al,bh
82
		mov word[edi+3*_a],ax
78
		mov word[edi+3*_a],ax
83
		mov eax,[ob1]
79
		mov eax,[ob1]
84
		mov byte[edi+3*_a +2],ah
80
		mov byte[edi+3*_a +2],ah
85
end if
81
end if
86
;if TGL_FEATURE_RENDER_BITS eq 32
82
;if TGL_FEATURE_RENDER_BITS eq 32
87
;      pp[_a] = RGB_TO_PIXEL(or1, og1, ob1);
83
;pp[_a] = RGB_TO_PIXEL(or1, og1, ob1)
88
;end if
84
;end if
89
	.end_0:
85
	.end_0:
90
	mov eax,[dzdx]
86
	mov eax,[dzdx]
91
	add [z],eax
87
	add [z],eax
92
	mov eax,[dgdx]
88
	mov eax,[dgdx]
93
	add [og1],eax
89
	add [og1],eax
Line 124... Line 120...
124
{
120
{
125
local .end_0
121
local .end_0
126
	mov eax,[z]
122
	mov eax,[z]
127
	shr eax,ZB_POINT_Z_FRAC_BITS
123
	shr eax,ZB_POINT_Z_FRAC_BITS
128
	mov [zz],eax
124
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
129
	mov ebx,[pz]
-
 
130
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
-
 
131
	jl .end_0
125
	jl .end_0
132
		;edi = pp
126
		;edi = pp
133
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
127
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
134
if TGL_FEATURE_RENDER_BITS eq 24
128
if TGL_FEATURE_RENDER_BITS eq 24
135
		mov ebx,[t]
129
		mov ebx,[t]
136
		and ebx,0x3fc00000
130
		and ebx,0x3fc00000
137
		or ebx,[s]
131
		or ebx,[s]
138
		shr ebx,14
132
		shr ebx,14
139
		imul ebx,3
133
		imul ebx,3
Line 142... Line 136...
142
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
136
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
143
		mov al,byte[ebx+2]
137
		mov al,byte[ebx+2]
144
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
138
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
145
else
139
else
146
;       pp[_a]=texture[((t & 0x3FC00000) | s) >> 14];
140
;pp[_a]=texture[((t & 0x3FC00000) | s) >> 14]
147
end if
141
end if
148
	.end_0:
142
	.end_0:
149
	mov eax,[dzdx]
143
	mov eax,[dzdx]
150
	add [z],eax
144
	add [z],eax
151
	mov eax,[dsdx]
145
	mov eax,[dsdx]
152
	add [s],eax
146
	add [s],eax
Line 194... Line 188...
194
{
188
{
195
local .end_0
189
local .end_0
196
	mov eax,[z]
190
	mov eax,[z]
197
	shr eax,ZB_POINT_Z_FRAC_BITS
191
	shr eax,ZB_POINT_Z_FRAC_BITS
198
	mov [zz],eax
192
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
199
	mov ebx,[pz]
-
 
200
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
-
 
201
	jl .end_0
193
	jl .end_0
202
		;edi = pp
194
		;edi = pp
203
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
195
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
204
if TGL_FEATURE_RENDER_BITS eq 24
196
if TGL_FEATURE_RENDER_BITS eq 24
205
		mov ebx,[t]
197
		mov ebx,[t]
206
		and ebx,0x3fc00000
198
		and ebx,0x3fc00000
207
		mov eax,[s]
199
		mov eax,[s]
208
		and eax,0x003fc000
200
		and eax,0x003fc000
209
		or ebx,eax
201
		or ebx,eax
Line 244... Line 236...
244
	fdivp
236
	fdivp
245
	fstp dword[zinv] ;zinv = 1.0 / fz
237
	fstp dword[zinv] ;zinv = 1.0 / fz
246
	imul edi,PSZB
238
	imul edi,PSZB
247
	add edi,[pp1] ;pp = (pp1 + x1 * PSZB)
239
	add edi,[pp1] ;pp = (pp1 + x1 * PSZB)
248
	mov eax,[x1]
240
	mov esi,[x1]
249
	shl eax,1
241
	shl esi,1
250
	add eax,[pz1]
242
	add esi,[pz1] ;pz = pz1 + x1
251
	mov [pz],eax ;pz = pz1 + x1
-
 
252
	mov eax,[z1]
243
	mov eax,[z1]
253
	mov [z],eax ;z = z1
244
	mov [z],eax ;z = z1
254
	mov eax,[sz1]
245
	mov eax,[sz1]
255
	mov [s_z],eax ;sz = sz1
246
	mov [s_z],eax ;sz = sz1
256
	mov eax,[tz1]
247
	mov eax,[tz1]
257
	mov [t_z],eax ;tz = tz1
248
	mov [t_z],eax ;tz = tz1
Line 289... Line 280...
289
		PUT_PIXEL 4
280
		PUT_PIXEL 4
290
		PUT_PIXEL 5
281
		PUT_PIXEL 5
291
		PUT_PIXEL 6
282
		PUT_PIXEL 6
292
		PUT_PIXEL 7
283
		PUT_PIXEL 7
293
		add dword[pz],2*NB_INTERP ;pz += NB_INTERP
284
		add esi,2*NB_INTERP ;pz += NB_INTERP
294
		add edi,NB_INTERP*PSZB ;pp += NB_INTERP * PSZB
285
		add edi,NB_INTERP*PSZB ;pp += NB_INTERP * PSZB
295
		sub dword[n],NB_INTERP ;n -= NB_INTERP
286
		sub dword[n],NB_INTERP ;n -= NB_INTERP
296
		fld dword[ndszdx]
287
		fld dword[ndszdx]
297
		fadd dword[s_z]
288
		fadd dword[s_z]
298
		fstp dword[s_z] ;sz += ndszdx
289
		fstp dword[s_z] ;sz += ndszdx
299
		fld dword[ndtzdx]
290
		fld dword[ndtzdx]
Line 321... Line 312...
321
	.cycle_3: ;while (n>=0)
312
	.cycle_3: ;while (n>=0)
322
	cmp dword[n],0
313
	cmp dword[n],0
323
	jl .cycle_3_end
314
	jl .cycle_3_end
324
		PUT_PIXEL 0
315
		PUT_PIXEL 0
325
		add dword[pz],2 ;pz += 1
316
		add esi,2 ;pz += 1
326
		add edi,PSZB ;pp += PSZB
317
		add edi,PSZB ;pp += PSZB
327
		dec dword[n]
318
		dec dword[n]
328
		jmp .cycle_3
319
		jmp .cycle_3
329
	.cycle_3_end:
320
	.cycle_3_end:
330
end if
321
end if
331
}
322
}
Line 363... Line 354...
363
{
354
{
364
local .end_0
355
local .end_0
365
	mov eax,[z]
356
	mov eax,[z]
366
	shr eax,ZB_POINT_Z_FRAC_BITS
357
	shr eax,ZB_POINT_Z_FRAC_BITS
367
	mov [zz],eax
358
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
368
	mov ebx,[pz]
-
 
369
	cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
-
 
370
	jl .end_0
359
	jl .end_0
371
		;edi = pp
360
		;edi = pp
372
		mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
361
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
373
		fild dword[z]
362
		fild dword[z]
374
		fld dword[s_z]
363
		fld dword[s_z]
375
		fdiv st0,st1
364
		fdiv st0,st1
376
		fistp dword[esp-4] ;s = (int) (s_z / (float) z)
365
		fistp dword[esp-4] ;s = (int) (s_z / (float) z)
377
		fld dword[t_z]
366
		fld dword[t_z]
378
		fdiv st0,st1
367
		fdiv st0,st1