Rev 6243 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6243 | Rev 8069 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | 36 | ||
37 | macro DRAW_INIT |
37 | macro DRAW_INIT |
38 | { |
38 | { |
39 | if TGL_FEATURE_RENDER_BITS eq 24 |
39 | if TGL_FEATURE_RENDER_BITS eq 24 |
40 | mov ecx,[p2] |
40 | mov ecx,[p2] |
41 | mov eax,[ecx+offs_zbup_r] |
41 | mov eax,[ecx+ZBufferPoint.r] |
42 | mov [colorR],ah ;colorR=p2.r>>8 |
42 | mov [colorB],ah ;colorB=p2.r>>8 |
43 | mov eax,[ecx+offs_zbup_g] |
43 | mov eax,[ecx+ZBufferPoint.g] |
44 | mov [colorG],ah ;colorG=p2.g>>8 |
44 | mov [colorG],ah ;colorG=p2.g>>8 |
45 | mov eax,[ecx+offs_zbup_b] |
45 | mov eax,[ecx+ZBufferPoint.b] |
46 | mov [colorB],ah ;colorB=p2.b>>8 |
46 | mov [colorR],ah ;colorR=p2.b>>8 |
47 | ;else |
47 | ;else |
48 | ;color=RGB_TO_PIXEL(p2.r,p2.g,p2.b) |
48 | ;color=RGB_TO_PIXEL(p2.r,p2.g,p2.b) |
49 | end if |
49 | end if |
Line 50... | Line 50... | ||
50 | } |
50 | } |
51 | 51 | ||
52 | macro PUT_PIXEL _a |
52 | macro PUT_PIXEL _a |
- | 53 | { |
|
- | 54 | local .end_0 |
|
- | 55 | if _a eq 0 |
|
53 | { |
56 | mov ebx,[dzdx] |
54 | local .end_0 |
57 | end if |
55 | mov eax,[z] |
58 | mov eax,[z] |
56 | shr eax,ZB_POINT_Z_FRAC_BITS |
59 | shr eax,ZB_POINT_Z_FRAC_BITS |
57 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
60 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
58 | jl .end_0 |
61 | jl .end_0 |
59 | ;edi = pp |
62 | ;edi = pp |
60 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
- | |
61 | if TGL_FEATURE_RENDER_BITS eq 24 |
63 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
62 | mov al,[colorR] |
64 | if TGL_FEATURE_RENDER_BITS eq 24 |
63 | mov ah,[colorG] |
65 | mov ax,word[colorB] ;сохраняем colorB и colorG |
64 | mov word[edi+3*_a],ax |
66 | mov word[edi+3*_a],ax |
65 | mov al,[colorB] |
67 | mov al,[colorR] |
66 | mov byte[edi+3*_a +2],al |
68 | mov byte[edi+3*_a +2],al |
67 | ;else |
69 | ;else |
68 | ;pp[_a]=color |
70 | ;pp[_a]=color |
69 | end if |
- | |
70 | .end_0: |
71 | end if |
71 | mov eax,[dzdx] |
72 | .end_0: |
Line 72... | Line 73... | ||
72 | add [z],eax |
73 | add [z],ebx |
73 | } |
74 | } |
74 | 75 | ||
75 | align 16 |
76 | align 16 |
76 | proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword |
77 | proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword |
77 | locals |
78 | locals |
78 | if TGL_FEATURE_RENDER_BITS eq 24 |
79 | if TGL_FEATURE_RENDER_BITS eq 24 |
79 | colorR db ? |
80 | colorB db ? |
80 | colorG db ? |
81 | colorG db ? |
81 | colorB db ? ;unsigned char |
82 | colorR db ? ;unsigned char |
82 | else |
83 | else |
Line 104... | Line 105... | ||
104 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
105 | cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) |
105 | jl .end_0 |
106 | jl .end_0 |
106 | ;edi = pp |
107 | ;edi = pp |
107 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
108 | mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение |
108 | if TGL_FEATURE_RENDER_BITS eq 24 |
109 | if TGL_FEATURE_RENDER_BITS eq 24 |
109 | mov ebx,[or1] |
- | |
110 | mov eax,[og1] |
110 | mov eax,[og1] |
111 | mov al,bh |
111 | mov al,byte[or1+1] |
112 | mov word[edi+3*_a],ax |
112 | mov word[edi+3*_a],ax |
113 | mov eax,[ob1] |
113 | mov eax,[ob1] |
114 | mov byte[edi+3*_a +2],ah |
114 | mov byte[edi+3*_a +2],ah |
115 | end if |
115 | end if |
116 | ;if TGL_FEATURE_RENDER_BITS eq 32 |
116 | ;if TGL_FEATURE_RENDER_BITS eq 32 |
117 | ;pp[_a] = RGB_TO_PIXEL(or1, og1, ob1) |
117 | ;pp[_a] = RGB_TO_PIXEL(or1, og1, ob1) |
118 | ;end if |
118 | ;end if |
119 | .end_0: |
119 | .end_0: |
- | 120 | if _a eq 0 |
|
120 | mov eax,[dzdx] |
121 | mov ebx,[dzdx] |
121 | add [z],eax |
122 | mov ecx,[dgdx] |
122 | mov eax,[dgdx] |
123 | mov edx,[drdx] |
- | 124 | end if |
|
123 | add [og1],eax |
125 | add [z],ebx |
124 | mov eax,[drdx] |
126 | add [og1],ecx |
125 | add [or1],eax |
127 | add [or1],edx |
126 | mov eax,[dbdx] |
128 | mov eax,[dbdx] |
127 | add [ob1],eax |
129 | add [ob1],eax |
128 | } |
130 | } |
Line 129... | Line 131... | ||
129 | 131 | ||
Line 135... | Line 137... | ||
135 | align 16 |
137 | align 16 |
136 | proc ZB_setTexture uses eax ebx, zb:dword, texture:dword,\ |
138 | proc ZB_setTexture uses eax ebx, zb:dword, texture:dword,\ |
137 | s_bound:dword, t_bound:dword, s_log2:dword |
139 | s_bound:dword, t_bound:dword, s_log2:dword |
138 | mov eax,[zb] |
140 | mov eax,[zb] |
139 | mov ebx,[texture] |
141 | mov ebx,[texture] |
140 | mov dword[eax+offs_zbuf_current_texture],ebx |
142 | mov dword[eax+ZBuffer.current_texture],ebx |
141 | mov ebx,[s_log2] |
143 | mov ebx,[s_log2] |
142 | mov dword[eax+offs_zbuf_s_log2],ebx |
144 | mov dword[eax+ZBuffer.s_log2],ebx |
143 | mov ebx,[s_bound] |
145 | mov ebx,[s_bound] |
144 | mov dword[eax+offs_zbuf_s_bound],ebx |
146 | mov dword[eax+ZBuffer.s_bound],ebx |
145 | mov ebx,[t_bound] |
147 | mov ebx,[t_bound] |
146 | mov dword[eax+offs_zbuf_t_bound],ebx |
148 | mov dword[eax+ZBuffer.t_bound],ebx |
147 | ret |
149 | ret |
148 | endp |
150 | endp |
Line 149... | Line 151... | ||
149 | 151 | ||
150 | INTERP_Z equ 1 |
152 | INTERP_Z equ 1 |
Line 151... | Line 153... | ||
151 | INTERP_ST equ 1 |
153 | INTERP_ST equ 1 |
152 | 154 | ||
153 | macro DRAW_INIT |
155 | macro DRAW_INIT |
154 | { |
156 | { |
155 | mov eax,[zb] |
157 | mov eax,[zb] |
156 | mov ebx,[eax+offs_zbuf_current_texture] |
158 | mov ebx,[eax+ZBuffer.current_texture] |
157 | mov [texture],ebx |
159 | mov [texture],ebx |
158 | mov ebx,[eax+offs_zbuf_s_log2] |
160 | mov ebx,[eax+ZBuffer.s_log2] |
159 | mov [s_log2],ebx ;s_log2 = zb.s_log2 |
161 | mov [s_log2],ebx ;s_log2 = zb.s_log2 |
160 | mov ebx,[eax+offs_zbuf_s_bound] |
162 | mov ebx,[eax+ZBuffer.s_bound] |
161 | mov [s_bound],ebx ;s_bound = zb.s_bound |
163 | mov [s_bound],ebx ;s_bound = zb.s_bound |
162 | mov ebx,[eax+offs_zbuf_t_bound] |
164 | mov ebx,[eax+ZBuffer.t_bound] |
Line 163... | Line 165... | ||
163 | mov [t_bound],ebx ;t_bound = zb.t_bound |
165 | mov [t_bound],ebx ;t_bound = zb.t_bound |
164 | } |
166 | } |
Line 179... | Line 181... | ||
179 | shr ebx,cl ;(t & t_bound) >> s_log2 |
181 | shr ebx,cl ;(t & t_bound) >> s_log2 |
180 | mov eax,[s] |
182 | mov eax,[s] |
181 | and eax,[s_bound] |
183 | and eax,[s_bound] |
182 | shr eax,ZB_POINT_TEXEL_SIZE |
184 | shr eax,ZB_POINT_TEXEL_SIZE |
183 | or ebx,eax |
185 | or ebx,eax |
184 | imul ebx,3 |
186 | lea ebx,[ebx+2*ebx] |
185 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3 |
187 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3 |
186 | mov ax,word[ebx] |
188 | mov ax,word[ebx] |
187 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
189 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
188 | mov al,byte[ebx+2] |
190 | mov al,byte[ebx+2] |
189 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
191 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
Line 220... | Line 222... | ||
220 | NB_INTERP equ 8 |
222 | NB_INTERP equ 8 |
Line 221... | Line 223... | ||
221 | 223 | ||
222 | macro DRAW_INIT |
224 | macro DRAW_INIT |
223 | { |
225 | { |
224 | mov eax,[zb] |
226 | mov eax,[zb] |
225 | mov ebx,[eax+offs_zbuf_current_texture] |
227 | mov ebx,[eax+ZBuffer.current_texture] |
226 | mov [texture],ebx |
228 | mov [texture],ebx |
227 | mov ebx,[eax+offs_zbuf_s_log2] |
229 | mov ebx,[eax+ZBuffer.s_log2] |
228 | mov [s_log2],ebx ;s_log2 = zb.s_log2 |
230 | mov [s_log2],ebx ;s_log2 = zb.s_log2 |
229 | mov ebx,[eax+offs_zbuf_s_bound] |
231 | mov ebx,[eax+ZBuffer.s_bound] |
230 | mov [s_bound],ebx ;s_bound = zb.s_bound |
232 | mov [s_bound],ebx ;s_bound = zb.s_bound |
231 | mov ebx,[eax+offs_zbuf_t_bound] |
233 | mov ebx,[eax+ZBuffer.t_bound] |
232 | mov [t_bound],ebx ;t_bound = zb.t_bound |
234 | mov [t_bound],ebx ;t_bound = zb.t_bound |
233 | mov dword[esp-4],NB_INTERP |
235 | mov dword[esp-4],NB_INTERP |
234 | fild dword[esp-4] |
236 | fild dword[esp-4] |
235 | fild dword[dzdx] |
237 | fild dword[dzdx] |
Line 259... | Line 261... | ||
259 | shr ebx,cl ;(t & t_bound) >> s_log2 |
261 | shr ebx,cl ;(t & t_bound) >> s_log2 |
260 | mov eax,[s] |
262 | mov eax,[s] |
261 | and eax,[s_bound] |
263 | and eax,[s_bound] |
262 | shr eax,ZB_POINT_TEXEL_SIZE |
264 | shr eax,ZB_POINT_TEXEL_SIZE |
263 | or ebx,eax |
265 | or ebx,eax |
264 | imul ebx,3 |
266 | lea ebx,[ebx+2*ebx] |
265 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3 |
267 | add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3 |
266 | mov ax,word[ebx] |
268 | mov ax,word[ebx] |
267 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
269 | mov word[edi+3*_a],ax ;pp[3 * _a]= ptr[0,1] |
268 | mov al,byte[ebx+2] |
270 | mov al,byte[ebx+2] |
269 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |
271 | mov byte[edi+3*_a +2],al ;pp[3 * _a + 2]= ptr[2] |