Subversion Repositories Kolibri OS

Rev

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

Rev 6134 Rev 6141
Line -... Line 1...
-
 
1
;
-
 
2
; Опции для функций:
-
 
3
;
-
 
4
;INTERP_Z - использование Z буфера (всегда включено)
-
 
5
;INTERP_RGB - сглажевание цветов
-
 
6
;INTERP_ST - наложение текстуры в ортогональной проэкции
-
 
7
;INTERP_STZ - наложение текстуры в перспективной проэкции
-
 
8
;
-
 
9
; Функции рисования треугольников:
-
 
10
;
-
 
11
;ZB_fillTriangleFlat - треугольник одного цвета
-
 
12
;ZB_fillTriangleSmooth - треугольник с разными цветами вершин
-
 
13
;ZB_fillTriangleMapping - треугольник с текстурой в ортогональной проэкции
-
 
14
;ZB_fillTriangleMappingPerspective - треугольник с текстурой в перспективной проэкции
-
 
15
;
-
 
16
 
-
 
17
macro calc_d1d2 f, r1, r2
-
 
18
{
-
 
19
	fld dword[fdy2]
-
 
20
	fmul st0,st2
-
 
21
	fld dword[fdy1]
-
 
22
	fmul st0,st2
-
 
23
	fsubp
-
 
24
	f#stp dword[r1] ;r1 = (fdy2*d1 - fdy1*d2)
-
 
25
	fld dword[fdx1]
-
 
26
	fmulp
-
 
27
	fld dword[fdx2]
-
 
28
	fmul st0,st2
-
 
29
	fsubp
-
 
30
	f#stp dword[r2] ;r2 = (fdx1*d2 - fdx2*d1)
-
 
31
	ffree st0 ;d1
-
 
32
	fincstp
-
 
33
}
Line 1... Line 34...
1
INTERP_Z equ 1
34
 
Line 2... Line 35...
2
 
35
INTERP_Z equ 1
3
macro DRAW_INIT
36
 
Line 118... Line 151...
118
 
151
}
Line 119... Line 152...
119
macro PUT_PIXEL _a
152
 
120
{
153
macro PUT_PIXEL _a
121
local .end_0
154
{
122
local .in_mem
-
 
123
	mov eax,[z]
155
local .end_0
124
	shr eax,ZB_POINT_Z_FRAC_BITS
156
	mov eax,[z]
125
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
157
	shr eax,ZB_POINT_Z_FRAC_BITS
126
	jl .end_0
158
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
127
		;edi = pp
159
	jl .end_0
128
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
160
		;edi = pp
129
if TGL_FEATURE_RENDER_BITS eq 24
161
		mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение
130
		mov ebx,[t]
162
if TGL_FEATURE_RENDER_BITS eq 24
131
		and ebx,0x3fc00000
163
		mov ebx,[t]
132
		or ebx,[s]
164
		and ebx,0x3fc00000
-
 
165
		mov eax,[s]
-
 
166
		and eax,0x003fc000
133
		shr ebx,14
167
		or ebx,eax
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
168
		shr ebx,14
139
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3
169
		imul ebx,3
140
		mov ax,word[ebx]
170
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3
141
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
171
		mov ax,word[ebx]
142
		mov al,byte[ebx+2]
172
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
Line 191... Line 221...
191
 
221
}
Line 192... Line 222...
192
macro PUT_PIXEL _a
222
 
193
{
223
macro PUT_PIXEL _a
194
local .end_0
224
{
195
local .in_mem
-
 
196
	mov eax,[z]
225
local .end_0
197
	shr eax,ZB_POINT_Z_FRAC_BITS
226
	mov eax,[z]
198
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
227
	shr eax,ZB_POINT_Z_FRAC_BITS
199
	jl .end_0
228
	cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
200
		;edi = pp
229
	jl .end_0
Line 205... Line 234...
205
		mov eax,[s]
234
		and ebx,0x3fc00000
206
		and eax,0x003fc000
235
		mov eax,[s]
207
		or ebx,eax
236
		and eax,0x003fc000
208
		shr ebx,14
237
		or ebx,eax
209
if 1
238
		shr ebx,14
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
-
 
219
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3
239
		imul ebx,3
220
		mov ax,word[ebx]
240
		add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3
221
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
241
		mov ax,word[ebx]
222
		mov al,byte[ebx+2]
242
		mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1]
223
		mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2]
243
		mov al,byte[ebx+2]