Subversion Repositories Kolibri OS

Rev

Rev 180 | Rev 316 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
;
2
; TRIANGLE SPEED TEST 3
3
; 32 triangle draw use! 12300 triangle in sec on 800Mhz processor
4
;
5
; Pavlushin Evgeni 11.09.2004
6
; mail: waptap@mail.ru       site: www.deck4.narod.ru
7
;                                www.cyberdeck.fatal.ru
8
 
9
use32
10
               org     0x0
11
               db     'MENUET01'              ; 8 byte id
12
               dd     0x01                    ; header version
13
               dd     START                   ; start of code
14
               dd     I_END                   ; size of image
180 heavyiron 15
               dd     0x100000                ; memory for app
16
               dd     0x100000                ; esp
31 halyavin 17
               dd     0x0 , 0x0               ; I_Param , I_Icon
18
 
19
SCREEN_X equ 320 ;800
20
SCREEN_Y equ 200 ;600
21
 
22
include 'lang.inc'
23
include 'ascl.inc'
24
include 'ascgl.inc'
25
 
26
START:
180 heavyiron 27
red:
31 halyavin 28
    call draw_window
29
 
30
still:
31
    scevent red,key,button
195 heavyiron 32
    fps  250,8,cl_White,cl_Black
31 halyavin 33
 
34
main_loop:
35
     random SCREEN_X,eax
36
     mov [@@tx1],eax
37
     random SCREEN_Y,eax
38
     mov [@@ty1],eax
39
     random SCREEN_X,eax
40
     mov [@@tx2],eax
41
     random SCREEN_Y,eax
42
     mov [@@ty2],eax
43
     random SCREEN_X,eax
44
     mov [@@tx3],eax
45
     random SCREEN_Y,eax
46
     mov [@@ty3],eax
47
 
48
     random 255,eax
49
     mov byte [@@rgb],al
50
     random 255,eax
51
     mov byte [@@rgb+1],al
52
     random 255,eax
53
     mov byte [@@rgb+2],al
54
     pushad
55
     call filled_triangle
56
     popad
57
 
58
     dec [count]  ;for max speed
59
     jnz xxx
60
     call outscr
61
     mov [count],100
62
xxx:
63
     jmp still
64
 
65
count dd 100
66
 
67
key:
68
     mov eax,2
69
     int 0x40
70
     jmp still
71
button:
72
     mov eax,17
73
     int 0x40
74
     cmp ah,1
75
     jne still
76
exit:
77
     mov eax,-1
78
     int 0x40
79
 
80
;Draw window
81
draw_window:
180 heavyiron 82
 
31 halyavin 83
    mov eax,12  ;Start
84
    mov ebx,1
85
    int 0x40
86
 
180 heavyiron 87
    xor eax,eax   ;Draw window
195 heavyiron 88
    mov ebx,100*65536+(SCREEN_X+9) ;x start*65536+x size
89
    mov ecx,100*65536+(SCREEN_Y+26) ;y start*65536+y size
90
    mov edx,0x13000000              ;0x33 use skinned window
180 heavyiron 91
    mov edi,header
31 halyavin 92
    int 0x40
93
 
94
    mov eax,12  ;End
95
    mov ebx,2
96
    int 0x40
97
    ret
98
 
180 heavyiron 99
header db '3D TEST SAMPLE',0
31 halyavin 100
 
101
outscr:
102
 
103
;outscrbuf
104
 mov ebx,scrbuf
105
 mov ecx,SCREEN_X*65536+SCREEN_Y
106
 mov edx,5*65536+22
107
 mov ax,7
108
 int 0x40
109
 
110
	ret
111
 
112
;filled trangle 32 bit draw procedure
113
;from NAAG3d demo
114
 
115
@@tx1  dd 0
116
@@ty1  dd 0
117
@@tx2  dd 0
118
@@ty2  dd 0
119
@@tx3  dd 0
120
@@ty3  dd 0
121
@@rgb  dd 0
122
 
123
@@dx12 dd 0
124
@@dx13 dd 0
125
@@dx23 dd 0
126
 
127
filled_triangle:
128
	mov eax,[@@ty1]
129
	cmp eax,[@@ty3]
130
	jle @@ok13
131
 
132
	xchg eax,[@@ty3]
133
	mov [@@ty1],eax
134
 
135
	mov eax,[@@tx1]
136
	xchg eax,[@@tx3]
137
	mov [@@tx1],eax
138
@@ok13:
139
	mov eax,[@@ty2]
140
	cmp eax,[@@ty3]
141
	jle @@ok23
142
 
143
	xchg eax,[@@ty3]
144
	mov [@@ty2],eax
145
 
146
	mov eax,[@@tx2]
147
	xchg eax,[@@tx3]
148
	mov [@@tx2],eax
149
@@ok23:
150
	mov eax,[@@ty1]
151
	cmp eax,[@@ty2]
152
	jle @@ok12
153
 
154
	xchg eax,[@@ty2]
155
	mov [@@ty1],eax
156
 
157
	mov eax,[@@tx1]
158
	xchg eax,[@@tx2]
159
	mov [@@tx1],eax
160
@@ok12:
161
 
162
	mov ebx,[@@ty2]
163
	sub ebx,[@@ty1]
164
	jnz @@make_d12
165
 
166
	mov [@@dx12],dword 0
167
	jmp @@done_d12
168
@@make_d12:
169
	mov eax,[@@tx2]
170
	sub eax,[@@tx1]
171
	shl eax,12 ;7
172
	cdq
173
	idiv ebx
174
	mov [@@dx12],eax			; dx12 = (x2-x1)/(y2-y1)
175
@@done_d12:
176
 
177
	mov ebx,[@@ty3]
178
	sub ebx,[@@ty1]
179
	jnz @@make_d13
180
 
181
	mov [@@dx13],dword 0
182
	jmp @@done_d13
183
@@make_d13:
184
	mov eax,[@@tx3]
185
	sub eax,[@@tx1]
186
	shl eax,12 ;7
187
	cdq
188
	idiv ebx
189
	mov [@@dx13],eax			; dx13 = (x3-x1)/(y3-y1)
190
@@done_d13:
191
 
192
	mov ebx,[@@ty3]
193
	sub ebx,[@@ty2]
194
	jnz @@make_d23
195
 
196
	mov [@@dx23],dword 0
197
	jmp @@done_d23
198
@@make_d23:
199
	mov eax,[@@tx3]
200
	sub eax,[@@tx2]
201
	shl eax,12 ;7
202
	cdq
203
	idiv ebx
204
	mov [@@dx23],eax			; dx23 = (x3-x2)/(y3-y2)
205
@@done_d23:
206
 
207
	mov eax,[@@tx1]
208
	shl eax,12 ;7
209
	mov ebx,eax
210
 
211
	mov ecx,[@@ty1]
212
 cmp ecx,[@@ty2]
213
 jge @@end_loop12
214
 
215
@@loop12:
216
 
217
 call flat_line
218
 
219
	add eax,[@@dx13]
220
	add ebx,[@@dx12]
221
	inc ecx
222
	cmp ecx,[@@ty2]
223
	jl  @@loop12
224
@@end_loop12:
225
 
226
 mov ecx,[@@ty2]
227
 cmp ecx,[@@ty3]
228
 jge @@end_loop23
229
 
230
	mov ebx,[@@tx2]
231
	shl ebx,12 ;7
232
@@loop23:
233
 
234
 call flat_line
235
 
236
	add eax,[@@dx13]
237
	add ebx,[@@dx23]
238
	inc ecx
239
	cmp ecx,[@@ty3]
240
	jl  @@loop23
241
@@end_loop23:
242
 
243
	ret
244
 
245
;flatline proc
246
 
247
flat_line:
248
 push eax
249
 push ebx
250
 push ecx
251
 
252
 or ecx,ecx
253
 jl @@quit
254
 cmp ecx,SCREEN_Y-1 ;199
255
 jg @@quit
256
 
257
 sar eax,12
258
 sar ebx,12
259
 
260
 or eax,eax
261
 jge @@ok1
262
 xor eax,eax
263
 jmp @@ok2
264
@@ok1:
265
 cmp eax,SCREEN_X-1 ;319
266
 jle @@ok2
267
 mov eax,SCREEN_X-1 ;319
268
@@ok2:
269
 or ebx,ebx
270
 jge @@ok3
271
 xor ebx,ebx
272
 jmp @@ok4
273
@@ok3:
274
 cmp ebx,SCREEN_X-1 ;319
275
 jle @@ok4
276
 mov ebx,SCREEN_X-1 ;319
277
@@ok4:
278
 cmp eax,ebx
279
 jl @@ok
280
 je @@quit
281
 
282
 xchg eax,ebx
283
@@ok:
284
 mov edi,ecx
285
 
286
; shl edi,6    ;for 320 speed+
287
; shl ecx,8
288
; add edi,ecx
289
 
290
 push eax
291
 mov eax,SCREEN_X
292
 mul edi
293
 mov edi,eax
294
 pop eax
295
 
296
 add edi,eax
297
 
298
 mov ebp,edi
299
 shl ebp,1
300
 add edi,ebp
301
 
302
 add edi,scrbuf
303
 
304
 mov ecx,ebx
305
 sub ecx,eax
306
 
307
lineout:
308
 mov eax,[@@rgb]
309
 mov byte [edi],al
310
 shr eax,8
311
 mov byte [edi+1],al
312
 shr eax,8
313
 mov byte [edi+2],al
314
 add edi,3
315
 dec ecx
316
 jnz lineout
317
 
318
@@quit:
319
 pop ecx
320
 pop ebx
321
 pop eax
322
 ret
323
 
324
scrbuf:
325
I_END: