Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
5381 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01'
6287 IgorA 4
	dd 1,start,i_end,mem,stacktop,0,cur_dir_path
5381 IgorA 5
 
6
include '../../../../../proc32.inc'
7
include '../../../../../macros.inc'
6287 IgorA 8
include '../../../../../KOSfuncs.inc'
5381 IgorA 9
include '../../../../../develop/libraries/box_lib/load_lib.mac'
10
include '../../../../../dll.inc'
11
include '../opengl_const.inc'
12
 
13
@use_library
14
 
15
align 4
16
start:
17
	load_library name_tgl, cur_dir_path, library_path, system_path, \
18
		err_message_found_lib, head_f_l, import_lib_tinygl, err_message_import, head_f_i
6287 IgorA 19
	cmp eax,SF_TERMINATE_PROCESS
5381 IgorA 20
	jz button.exit
21
 
6287 IgorA 22
	mcall SF_SET_EVENTS_MASK,0x27
5381 IgorA 23
 
24
	;заполняем массив индексов из файла house.3ds (который вшит внутрь данной программы)
25
	mov esi,house_3ds
26
	add esi,0x1798 ;смещение по которому идет информация о гранях в файле 3ds (получено с использованием программы info_3ds)
27
	mov edi,Indices
28
	mov eax,0x1a6 ;число граней в файле 3ds (получено с использованием программы info_3ds)
29
	@@:
30
		movsd
31
		movsw
32
		add esi,2 ;пропускаем свойства грани
33
		dec eax
34
		or eax,eax
35
	jnz @b
36
 
37
	;первоначальные настройки контекста tinygl
38
	stdcall [kosglMakeCurrent], 10,10,400,350,ctx1
39
	stdcall [glEnable], GL_DEPTH_TEST
40
	stdcall [glClearColor], 0.0,0.0,0.0,0.0
41
	stdcall [glShadeModel], GL_SMOOTH
42
 
43
	call draw_3d
44
 
45
align 4
46
red_win:
47
	call draw_window
48
 
49
align 4
50
still:
6287 IgorA 51
	mcall SF_WAIT_EVENT
5381 IgorA 52
	cmp al,1
53
	jz red_win
54
	cmp al,2
55
	jz key
56
	cmp al,3
57
	jz button
58
	jmp still
59
 
60
align 4
61
draw_window:
62
	pushad
6287 IgorA 63
	mcall SF_REDRAW,SSF_BEGIN_DRAW
5381 IgorA 64
 
65
	mov edx,0x33ffffff
6287 IgorA 66
	mcall SF_CREATE_WINDOW,(50 shl 16)+430,(30 shl 16)+400,,,caption
5381 IgorA 67
	stdcall [kosglSwapBuffers]
68
 
6287 IgorA 69
	mcall SF_REDRAW,SSF_END_DRAW
5381 IgorA 70
	popad
71
	ret
72
 
73
align 4
74
key:
6287 IgorA 75
	mcall SF_GET_KEY
5381 IgorA 76
 
77
	cmp ah,27 ;Esc
78
	je button.exit
79
 
80
	cmp ah,61 ;+
81
	jne @f
82
		fld dword[scale]
83
		fadd dword[delt_sc]
84
		fstp dword[scale]
85
		call draw_3d
86
		stdcall [kosglSwapBuffers]
87
	@@:
88
	cmp ah,45 ;-
89
	jne @f
90
		fld dword[scale]
91
		fsub dword[delt_sc]
92
		fstp dword[scale]
93
		call draw_3d
94
		stdcall [kosglSwapBuffers]
95
	@@:
96
	cmp ah,178 ;Up
97
	jne @f
98
		fld dword[angle_y]
99
		fadd dword[delt_size]
100
		fstp dword[angle_y]
101
		call draw_3d
102
		stdcall [kosglSwapBuffers]
103
	@@:
104
	cmp ah,177 ;Down
105
	jne @f
106
		fld dword[angle_y]
107
		fsub dword[delt_size]
108
		fstp dword[angle_y]
109
		call draw_3d
110
		stdcall [kosglSwapBuffers]
111
	@@:
112
	cmp ah,176 ;Left
113
	jne @f
114
		fld dword[angle_x]
115
		fadd dword[delt_size]
116
		fstp dword[angle_x]
117
		call draw_3d
118
		stdcall [kosglSwapBuffers]
119
	@@:
120
	cmp ah,179 ;Right
121
	jne @f
122
		fld dword[angle_x]
123
		fsub dword[delt_size]
124
		fstp dword[angle_x]
125
		call draw_3d
126
		stdcall [kosglSwapBuffers]
127
	@@:
128
 
129
	jmp still
130
 
131
align 4
132
button:
6287 IgorA 133
	mcall SF_GET_BUTTON
5381 IgorA 134
	cmp ah,1
135
	jne still
136
.exit:
6287 IgorA 137
	mcall SF_TERMINATE_PROCESS
5381 IgorA 138
 
139
 
140
align 4
141
caption db 'Test opengl 1.1 arrays, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
142
align 4
143
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
144
;sizeof.TinyGLContext = 28
145
 
146
align 4
147
draw_3d:
148
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
149
stdcall [glPushMatrix]
150
 
151
	;масштаб и повороты
152
	stdcall [glTranslatef], 0.0,0.0,0.5
153
	stdcall [glScalef], [scale], [scale], [scale]
154
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
155
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
156
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
157
 
158
	;рисование через тндексный массив
159
	mov eax,house_3ds ;начало внедренного файла 3ds
160
	add eax,0xeb ;смещение по которому идут координаты вершин (получено с использованием программы info_3ds)
161
	stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;задаем массив для вершин, 3 - число координат для одной вершины
162
	stdcall [glEnableClientState], GL_VERTEX_ARRAY ;включаем режим рисования вершин
163
	stdcall [glDrawElements], GL_TRIANGLES, 0x1a6*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices
164
	stdcall [glDisableClientState], GL_VERTEX_ARRAY ;отключаем режим рисования вершин
165
 
166
stdcall [glPopMatrix]
167
ret
168
 
169
align 4
170
scale dd 0.0065 ;начальный масштаб (в идеальном случае должен вычислятся, но для даного примера подобран в ручную на глаз)
171
delt_sc dd 0.0005
172
angle_z dd 90.0
173
angle_y dd 90.0
174
angle_x dd 0.0
175
delt_size dd 3.0
176
 
177
align 4
178
house_3ds: ;внедряем файл внутрь программы (в идеальном случае должен открыватся через окно диалога, но для облегчения примера вшит внутрь)
6287 IgorA 179
file '../../../../../demos/3DS/3ds_objects/House.3ds'
5381 IgorA 180
align 4
181
Indices rb 0x1a6*6 ;0x1a6 - число граней, на каждую грань по 3 точки, индекс точки 2 байта
182
 
183
;--------------------------------------------------
184
align 4
185
import_lib_tinygl:
186
 
187
macro E_LIB n
188
{
189
	n dd sz_#n
190
}
191
include '../export.inc'
192
	dd 0,0
193
macro E_LIB n
194
{
195
	sz_#n db `n,0
196
}
197
include '../export.inc'
198
 
199
;--------------------------------------------------
200
system_path db '/sys/lib/'
201
name_tgl db 'tinygl.obj',0
6287 IgorA 202
err_message_found_lib db 'Sorry I cannot load library ',39,'tinygl.obj',39,0
5381 IgorA 203
head_f_i:
204
head_f_l db 'System error',0
6287 IgorA 205
err_message_import db 'Error on load import library ',39,'tinygl.obj',39,0
5381 IgorA 206
;--------------------------------------------------
207
 
208
i_end:
209
	rb 4096
210
stacktop:
211
cur_dir_path:
212
	rb 4096
213
library_path:
214
	rb 4096
215
mem: