Subversion Repositories Kolibri OS

Rev

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

Rev 6126 Rev 6134
Line 37... Line 37...
37
	mov eax,[dzdx]
37
	mov eax,[dzdx]
38
	add [z],eax
38
	add [z],eax
39
}
39
}
40
 
40
 
Line 41... Line 41...
41
align 4
41
align 16
42
proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword
42
proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword
43
locals
43
locals
44
if TGL_FEATURE_RENDER_BITS eq 24
44
if TGL_FEATURE_RENDER_BITS eq 24
45
	colorR db ?
45
	colorR db ?
46
	colorG db ?
46
	colorG db ?
Line 92... Line 92...
92
	mov eax,[dbdx]
92
	mov eax,[dbdx]
93
	add [ob1],eax
93
	add [ob1],eax
94
}
94
}
95
 
95
 
Line 96... Line 96...
96
align 4
96
align 16
97
proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword
97
proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword
98
locals
98
locals
99
include 'ztriangle.inc'
99
include 'ztriangle.inc'
Line 100... Line 100...
100
 
100
 
101
align 4
101
align 16
102
proc ZB_setTexture uses eax ebx, zb:dword, texture:dword
102
proc ZB_setTexture uses eax ebx, zb:dword, texture:dword
103
	mov eax,[zb]
103
	mov eax,[zb]
104
	mov ebx,[texture]
104
	mov ebx,[texture]
105
	mov dword[eax+offs_zbuf_current_texture],ebx
105
	mov dword[eax+offs_zbuf_current_texture],ebx
Line 118... Line 118...
118
 
118
 
Line 119... Line 119...
119
macro PUT_PIXEL _a
119
macro PUT_PIXEL _a
120
{
120
{
121
local .end_0
121
local .end_0
-
 
122
local .in_mem
122
	mov eax,[z]
123
	mov eax,[z]
123
	shr eax,ZB_POINT_Z_FRAC_BITS
124
	shr eax,ZB_POINT_Z_FRAC_BITS
124
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
125
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
125
	jl .end_0
126
	jl .end_0
126
		;edi = pp
127
		;edi = pp
Line 129... Line 130...
129
		mov ebx,[t]
130
		mov ebx,[t]
130
		and ebx,0x3fc00000
131
		and ebx,0x3fc00000
131
		or ebx,[s]
132
		or ebx,[s]
132
		shr ebx,14
133
		shr ebx,14
133
		imul ebx,3
134
		cmp ebx,256*256-1 ;проверка на выход за пределы текстуры
-
 
135
		jl .in_mem ;координата 1.0,1.0 может выползать
-
 
136
			mov ebx,256*256-1 ;переход на последний пиксель текстуры
-
 
137
		.in_mem:
-
 
138
		imul ebx,3
134
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3
139
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3
135
		mov ax,word[ebx]
140
		mov ax,word[ebx]
136
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
141
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
137
		mov al,byte[ebx+2]
142
		mov al,byte[ebx+2]
138
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
143
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
Line 147... Line 152...
147
	mov eax,[dtdx]
152
	mov eax,[dtdx]
148
	add [t],eax
153
	add [t],eax
149
}
154
}
150
 
155
 
Line 151... Line 156...
151
align 4
156
align 16
152
proc ZB_fillTriangleMapping, zb:dword, p0:dword, p1:dword, p2:dword
157
proc ZB_fillTriangleMapping, zb:dword, p0:dword, p1:dword, p2:dword
153
locals
158
locals
154
	texture dd ? ;PIXEL*
159
	texture dd ? ;PIXEL*
155
include 'ztriangle.inc'
160
include 'ztriangle.inc'
Line 186... Line 191...
186
 
191
 
Line 187... Line 192...
187
macro PUT_PIXEL _a
192
macro PUT_PIXEL _a
188
{
193
{
189
local .end_0
194
local .end_0
-
 
195
local .in_mem
190
	mov eax,[z]
196
	mov eax,[z]
191
	shr eax,ZB_POINT_Z_FRAC_BITS
197
	shr eax,ZB_POINT_Z_FRAC_BITS
192
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
198
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
193
	jl .end_0
199
	jl .end_0
194
		;edi = pp
200
		;edi = pp
Line 199... Line 205...
199
		mov eax,[s]
205
		mov eax,[s]
200
		and eax,0x003fc000
206
		and eax,0x003fc000
201
		or ebx,eax
207
		or ebx,eax
202
		shr ebx,14
208
		shr ebx,14
203
		imul ebx,3
209
if 1
-
 
210
; не знаю нужна ли сдесь эта проверка
-
 
211
; функция ZB_fillTriangleMapping без нее не работает
-
 
212
; на всякий случай делаю и тут такое же
-
 
213
		cmp ebx,256*256-1 ;проверка на выход за пределы текстуры
-
 
214
		jl .in_mem ;координата 1.0,1.0 может выползать
-
 
215
			mov ebx,256*256-1 ;переход на последний пиксель текстуры
-
 
216
		.in_mem:
-
 
217
end if
-
 
218
		imul ebx,3
204
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3
219
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3
205
		mov ax,word[ebx]
220
		mov ax,word[ebx]
206
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
221
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
207
		mov al,byte[ebx+2]
222
		mov al,byte[ebx+2]
208
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
223
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
Line 231... Line 246...
231
	mov [n],eax ;n = (x2 >> 16) - x1
246
	mov [n],eax ;n = (x2 >> 16) - x1
232
fld1
247
	fld1
233
	fild dword[z1]
248
	fild dword[z1]
234
	fst dword[f_z] ;fz = (float)z1
249
	fst dword[f_z] ;fz = (float)z1
235
	;fld1
250
	fdivp
236
	fdivp
-
 
237
	fstp dword[zinv] ;zinv = 1.0 / fz
251
	fstp dword[zinv] ;zinv = 1.0 / fz
238
	imul edi,PSZB
252
	imul edi,PSZB
239
	add edi,[pp1] ;pp = (pp1 + x1 * PSZB)
253
	add edi,[pp1] ;pp = (pp1 + x1 * PSZB)
240
	mov esi,[x1]
254
	mov esi,[x1]
241
	shl esi,1
255
	shl esi,1
Line 269... Line 283...
269
fld1
283
		fld1
270
		fld dword[f_z]
284
		fld dword[f_z]
271
		fadd dword[fndzdx]
285
		fadd dword[fndzdx]
272
		fst dword[f_z] ;fz += fndzdx
286
		fst dword[f_z] ;fz += fndzdx
273
		;fld1
287
		fdivp
274
		fdivp
-
 
275
		fstp dword[zinv] ;zinv = 1.0 / fz
288
		fstp dword[zinv] ;zinv = 1.0 / fz
276
		PUT_PIXEL 0
289
		PUT_PIXEL 0
277
		PUT_PIXEL 1
290
		PUT_PIXEL 1
278
		PUT_PIXEL 2
291
		PUT_PIXEL 2
279
		PUT_PIXEL 3
292
		PUT_PIXEL 3
Line 290... Line 303...
290
		fld dword[ndtzdx]
303
		fld dword[ndtzdx]
291
		fadd dword[t_z]
304
		fadd dword[t_z]
292
		fstp dword[t_z] ;tz += ndtzdx
305
		fstp dword[t_z] ;tz += ndtzdx
293
		jmp .cycle_2
306
		jmp .cycle_2
294
	.cycle_2_end:
307
align 4
-
 
308
	.cycle_2_end:
295
	fld dword[zinv]
309
	fld dword[zinv]
296
	fld st0
310
	fld st0
297
	fmul dword[s_z] ;ss = (sz * zinv)
311
	fmul dword[s_z] ;ss = (sz * zinv)
298
	fist dword[s] ;s = (int) ss
312
	fist dword[s] ;s = (int) ss
299
	fmul dword[fdzdx]
313
	fmul dword[fdzdx]
Line 316... Line 330...
316
		add esi,2 ;pz += 1
330
		add esi,2 ;pz += 1
317
		add edi,PSZB ;pp += PSZB
331
		add edi,PSZB ;pp += PSZB
318
		dec dword[n]
332
		dec dword[n]
319
		jmp .cycle_3
333
		jmp .cycle_3
320
	.cycle_3_end:
334
align 4
-
 
335
	.cycle_3_end:
321
end if
336
end if
322
}
337
}
323
 
338
 
Line 324... Line 339...
324
align 4
339
align 16
325
proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword
340
proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword
326
locals
341
locals
327
	texture dd ? ;PIXEL *
342
	texture dd ? ;PIXEL *
328
	fdzdx dd ? ;float
343
	fdzdx dd ? ;float
329
	fndzdx dd ? ;float
344
	fndzdx dd ? ;float
Line 384... Line 399...
384
	fadd dword[t_z]
399
	fadd dword[t_z]
385
	fstp dword[t_z]
400
	fstp dword[t_z]
386
}
401
}
387
 
402
 
Line 388... Line 403...
388
align 4
403
align 16
389
proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword
404
proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword
390
locals
405
locals
391
	texture dd ? ;PIXEL*
406
	texture dd ? ;PIXEL*
392
include 'ztriangle.inc'
407
include 'ztriangle.inc'