update 'gears' example

git-svn-id: svn://kolibrios.org@6120 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2016-02-01 19:03:43 +00:00
parent 0373dceb83
commit 09b80753fe
2 changed files with 107 additions and 38 deletions

View File

@ -0,0 +1,60 @@
;include '../../../../../KOSfuncs.inc'
;x,y - êîîðäèíàòû âûâîäà FPS íà îêíî
;âîçâðàùàåò âðåìß â ñîòûõ äîëßõ ñåêóíäû çàòðà÷èâàåìîå íà 1 öèêë
time1 dd 0 ;int
time2 dd 0 ;int
fps1 dd 0 ;int
timerend dd 0 ;int
;ôóíêöèß îïðåäåëåíèß FPS
proc Fps uses ebx ecx edx esi, x:dword, y:dword
locals
tr dd ?
endl
;îïðåäåëßåì âðåìß ïðîøåäøåå ñ ìîìåíòà çàïóñêà ñèñòåìû
mcall SF_SYSTEM_GET,SSF_TIME_COUNT
mov [time1],eax
cmp dword[timerend],0
jne @f
mov eax,[time1]
mov [time2],eax
mov [timerend],eax
@@:
mov eax,[time1]
sub eax,[timerend]
mov [tr],eax
mov eax,[time1]
sub eax,[time2]
cmp eax,100 ;åñëè ïðîøëî ìåíåå 1 ñåêóíäû
jge .else
inc dword[fps1] ;óâåëè÷èâàåì ñ÷åò÷èê fps
jmp @f
.else:
;âûâîäèì ÷èñëî fps
mov ebx,[x]
shl ebx,16
add ebx,23
mov ecx,[y]
shl ecx,16
add ecx,7
mcall SF_DRAW_RECT,,,0x00555555
mov edx,[x]
shl edx,16
add edx,[y]
mcall SF_DRAW_NUMBER,4 shl 16,[fps1],,0xfafafa
mov dword[fps1],0
mov eax,[time1]
mov [time2],eax
@@:
mov eax,[time1]
mov [timerend],eax
mov eax,[tr]
ret
endp

View File

@ -1,17 +1,15 @@
use32 use32
org 0x0 org 0x0
db 'MENUET01' db 'MENUET01'
dd 0x1 dd 1,start,i_end,mem,stacktop,0,cur_dir_path
dd start
dd i_end
dd mem,stacktop
dd 0,cur_dir_path
include '../../../../../proc32.inc' include '../../../../../proc32.inc'
include '../../../../../macros.inc' include '../../../../../macros.inc'
include '../../../../../KOSfuncs.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac' include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc' include '../../../../../dll.inc'
include '../opengl_const.inc' include '../opengl_const.inc'
include 'fps.inc'
@use_library @use_library
@ -27,10 +25,10 @@ start:
cmp eax,-1 cmp eax,-1
jz button.exit jz button.exit
mcall 40,0x27 mcall SF_SET_EVENTS_MASK,0x27
stdcall [kosglMakeCurrent], 10,10,400,350,ctx1 stdcall [kosglMakeCurrent], 0,15,400,380,ctx1
stdcall reshape, 400,350 stdcall reshape, 400,380
; *** init *** ; *** init ***
stdcall [glLightfv], GL_LIGHT0, GL_POSITION, pos stdcall [glLightfv], GL_LIGHT0, GL_POSITION, pos
@ -44,7 +42,6 @@ start:
mov [gear1],eax mov [gear1],eax
stdcall [glNewList], eax, GL_COMPILE stdcall [glNewList], eax, GL_COMPILE
stdcall [glMaterialfv], GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red stdcall [glMaterialfv], GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red
;;;stdcall [glColor4fv], red
stdcall gear, 1.0, 4.0, 1.0, 20, 0.7 stdcall gear, 1.0, 4.0, 1.0, 20, 0.7
call [glEndList] call [glEndList]
@ -52,7 +49,6 @@ start:
mov [gear2],eax mov [gear2],eax
stdcall [glNewList], eax, GL_COMPILE stdcall [glNewList], eax, GL_COMPILE
stdcall [glMaterialfv], GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green stdcall [glMaterialfv], GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green
;;;stdcall [glColor4fv], green
stdcall gear, 0.5, 2.0, 2.0, 10, 0.7 stdcall gear, 0.5, 2.0, 2.0, 10, 0.7
call [glEndList] call [glEndList]
@ -60,22 +56,29 @@ start:
mov [gear3],eax mov [gear3],eax
stdcall [glNewList], eax, GL_COMPILE stdcall [glNewList], eax, GL_COMPILE
stdcall [glMaterialfv], GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue stdcall [glMaterialfv], GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue
;;;stdcall [glColor4fv], blue
stdcall gear, 1.3, 2.0, 0.5, 10, 0.7 stdcall gear, 1.3, 2.0, 0.5, 10, 0.7
call [glEndList] call [glEndList]
stdcall [glEnable], GL_NORMALIZE stdcall [glEnable], GL_NORMALIZE
; *** end init *** ; *** end init ***
call draw_3d
align 4 align 4
red_win: red_win:
call draw_window call draw_window
align 4 align 16
still: still:
mcall 10 call draw_3d
stdcall Fps, 330,4
mov dword[esp-4],eax
fild dword[esp-4]
fmul dword[a2]
fadd dword[a1]
fadd dword[angle]
fstp dword[angle]
mcall SF_CHECK_EVENT
cmp al,1 cmp al,1
jz red_win jz red_win
cmp al,2 cmp al,2
@ -84,6 +87,10 @@ still:
jz button jz button
jmp still jmp still
align 4
a1 dd 0.01
a2 dd 0.3
; new window size or exposure ; new window size or exposure
align 4 align 4
proc reshape uses ebx ecx, width:dword, height:dword proc reshape uses ebx ecx, width:dword, height:dword
@ -121,19 +128,23 @@ p6 dq 60.0
align 4 align 4
draw_window: draw_window:
pushad pushad
mcall 12,1 mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx,0x33ffffff ;0x73ffffff mcall SF_CREATE_WINDOW,(50 shl 16)+410,(30 shl 16)+425,0x33ffffff,,title1
mcall 0,(50 shl 16)+430,(30 shl 16)+400,,,caption
stdcall [kosglSwapBuffers] stdcall [kosglSwapBuffers]
mcall 12,2 ;Title
mcall SF_DRAW_TEXT,(300 shl 16)+4,0x808080,fps, fps.end-fps
mcall SF_DRAW_TEXT,(8 shl 16)+4,0x808080,title3,title3.end-title3
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0x808080,title2,title2.end-title2
mcall SF_REDRAW,SSF_END_DRAW
popad popad
ret ret
align 4 align 4
key: key:
mcall 2 mcall SF_GET_KEY
cmp ah,27 ;Esc cmp ah,27 ;Esc
je button.exit je button.exit
@ -144,7 +155,6 @@ key:
fdiv dword[delt_sc] fdiv dword[delt_sc]
fstp dword[scale] fstp dword[scale]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,45 ;- cmp ah,45 ;-
jne @f jne @f
@ -152,7 +162,6 @@ key:
fmul dword[delt_sc] fmul dword[delt_sc]
fstp dword[scale] fstp dword[scale]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,178 ;Up cmp ah,178 ;Up
jne @f jne @f
@ -160,7 +169,6 @@ key:
fadd dword[delt_size] fadd dword[delt_size]
fstp dword[view_rotx] fstp dword[view_rotx]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,177 ;Down cmp ah,177 ;Down
jne @f jne @f
@ -168,7 +176,6 @@ key:
fsub dword[delt_size] fsub dword[delt_size]
fstp dword[view_rotx] fstp dword[view_rotx]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,176 ;Left cmp ah,176 ;Left
jne @f jne @f
@ -176,7 +183,6 @@ key:
fadd dword[delt_size] fadd dword[delt_size]
fstp dword[view_roty] fstp dword[view_roty]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers]
@@: @@:
cmp ah,179 ;Right cmp ah,179 ;Right
jne @f jne @f
@ -184,32 +190,39 @@ key:
fsub dword[delt_size] fsub dword[delt_size]
fstp dword[view_roty] fstp dword[view_roty]
call draw_3d call draw_3d
stdcall [kosglSwapBuffers]
@@: @@:
jmp still jmp still
align 4 align 4
button: button:
mcall 17 mcall SF_GET_BUTTON
cmp ah,1 cmp ah,1
jne still jne still
.exit: .exit:
mcall -1 mcall SF_TERMINATE_PROCESS
align 4 align 4
caption db 'Gears, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0 title1: db 'TinyGL in KolibriOS'
.end: db 0
title2: db 'F full screen'
.end: db 0
title3: db 'ESC - exit'
.end: db 0
fps: db 'FPS:'
.end: db 0
align 4 align 4
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
;sizeof.TinyGLContext = 28 ;sizeof.TinyGLContext = 28
align 4 align 16
draw_3d: draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
stdcall [glPushMatrix] stdcall [glPushMatrix]
;;;stdcall [glScalef], [scale], [scale], [scale] ;??? ;stdcall [glScalef], [scale], [scale], [scale]
stdcall [glRotatef], [view_rotx], 1.0, 0.0, 0.0 stdcall [glRotatef], [view_rotx], 1.0, 0.0, 0.0
stdcall [glRotatef], [view_roty], 0.0, 1.0, 0.0 stdcall [glRotatef], [view_roty], 0.0, 1.0, 0.0
stdcall [glRotatef], [view_rotz], 0.0, 0.0, 1.0 stdcall [glRotatef], [view_rotz], 0.0, 0.0, 1.0
@ -260,17 +273,16 @@ draw_3d:
stdcall [glPopMatrix] stdcall [glPopMatrix]
;;; tkSwapBuffers(); stdcall [kosglSwapBuffers]
; count++; ; count++;
; if (count==limit) { ; if (count==limit) {
; exit(0); ; exit(0);
ret ret
align 4 align 4
an_9 dd 9.0 an_9 dd 9.0
an_25 dd 25.0 an_25 dd 25.0
qObj dd 0 ;???
scale dd 0.14 ;??? scale dd 0.14 ;???
delt_sc dd 0.85 ;??? delt_sc dd 0.85 ;???
delt_size dd 5.0 delt_size dd 5.0
@ -802,7 +814,7 @@ endl
faddp faddp
fldpi fldpi
fmul st0,st1 fmulp
fimul dword[i] fimul dword[i]
fidiv dword[teeth] fidiv dword[teeth]
fst dword[angle] ;angle = i * 2.0*M_PI / teeth fst dword[angle] ;angle = i * 2.0*M_PI / teeth
@ -842,9 +854,6 @@ endl
@@: @@:
call [glEnd] call [glEnd]
;ffree st0 ;2.0
;fincstp
ret ret
endp endp