Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
6189 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01'
6200 IgorA 4
	dd 1,start,i_end,mem,stacktop,0,cur_dir_path
6189 IgorA 5
 
6
include '../../../../../proc32.inc'
7
include '../../../../../macros.inc'
8
include '../../../../../KOSfuncs.inc'
6200 IgorA 9
include '../../../../../load_img.inc'
6189 IgorA 10
include '../opengl_const.inc'
11
include '../../../../../develop/info3ds/info_fun_float.inc'
12
 
13
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
14
 
15
align 4
16
image_data_toolbar dd 0
17
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
18
 
19
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
20
 
21
align 4
22
start:
23
load_libraries l_libs_start,l_libs_end
24
	;проверка на сколько удачно загузились библиотеки
25
	mov	ebp,lib_0
26
	.test_lib_open:
27
	cmp	dword [ebp+ll_struc_size-4],0
28
	jz	@f
29
		mcall SF_TERMINATE_PROCESS
30
	@@:
31
	add ebp,ll_struc_size
32
	cmp ebp,l_libs_end
33
	jl .test_lib_open
34
 
35
	mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
36
	mcall SF_SET_EVENTS_MASK,0x27
37
 
38
	stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
39
	stdcall [glEnable], GL_DEPTH_TEST
40
	stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
41
	stdcall [gluNewQuadric]
42
	mov [qObj],eax
43
	stdcall [gluQuadricDrawStyle], eax,GLU_FILL
44
	stdcall [gluQuadricTexture], eax,GL_TRUE
45
 
46
	stdcall [glClearColor], 0.0,0.0,0.0,0.0
47
	stdcall [glShadeModel], GL_SMOOTH
48
 
49
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
50
	mov eax,[eax] ;eax -> ZBuffer
51
	mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
52
	mov dword[buf_ogl],eax
53
 
6200 IgorA 54
	load_image_file 'font8x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
6189 IgorA 55
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
56
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
57
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
58
	stdcall [buf2d_convert_text_matrix], buf_1
59
 
60
	load_image_file 'toolb_1.png', image_data_toolbar
61
	load_image_file 'text_3.png', texture, text_w,text_h ;открытие файла текстуры
62
 
63
	;* Setup texturing *
64
	stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
65
 
66
	;* generate texture object IDs *
67
	stdcall [glGenTextures], 1, TexObj
68
	stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
69
	stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, [text_w], [text_h],\
70
		0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
71
 
72
	stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
73
	stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
74
	stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT
75
	stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT
76
	stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
77
	stdcall [glEnable], GL_TEXTURE_2D
78
 
79
	call draw_3d
80
 
81
align 4
82
red_win:
83
	call draw_window
84
 
85
align 4
86
still:
87
	mcall SF_WAIT_EVENT
88
	cmp al,1
89
	jz red_win
90
	cmp al,2
91
	jz key
92
	cmp al,3
93
	jz button
94
	jmp still
95
 
96
align 4
97
draw_window:
98
	pushad
99
	mcall SF_REDRAW,SSF_BEGIN_DRAW
100
	mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
101
 
102
	mov esi,[sc.work_button]
103
	mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;масштаб +
104
	mcall ,(36 shl 16)+19,,4+0x40000000 ;масштаб -
105
 
106
	mov ebx,[image_data_toolbar]
107
	add ebx,3*IMAGE_TOOLBAR_ICON_SIZE
108
	mcall SF_PUT_IMAGE,,(21 shl 16)+21,(5 shl 16)+5 ;масштаб +
109
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
110
	mcall ,,,(35 shl 16)+5 ;масштаб -
111
 
112
	stdcall [kosglSwapBuffers]
113
	mcall SF_REDRAW,SSF_END_DRAW
114
	popad
115
	ret
116
 
117
align 4
118
key:
119
	mcall SF_GET_KEY
120
 
121
	cmp ah,27 ;Esc
122
	je button.exit
123
 
124
	cmp ah,61 ;+
125
	jne @f
126
		call but_zoom_p
127
		jmp still
128
	@@:
129
	cmp ah,45 ;-
130
	jne @f
131
		call but_zoom_m
132
		jmp still
133
	@@:
134
	cmp ah,176 ;Left
135
	jne @f
136
		finit
137
		fld dword[angle_y]
138
		fadd dword[delt_size]
139
		fst dword[angle_y]
140
		mov word[NumberSymbolsAD],2
141
		fstp qword[Data_Double]
142
		call DoubleFloat_to_String
143
		mov byte[txt_angle_y.v],0
144
		stdcall str_cat, txt_angle_y.v,Data_String
145
		call draw_3d
146
		stdcall [kosglSwapBuffers]
147
	@@:
148
	cmp ah,179 ;Right
149
	jne @f
150
		finit
151
		fld dword[angle_y]
152
		fsub dword[delt_size]
153
		fst dword[angle_y]
154
		mov word[NumberSymbolsAD],2
155
		fstp qword[Data_Double]
156
		call DoubleFloat_to_String
157
		mov byte[txt_angle_y.v],0
158
		stdcall str_cat, txt_angle_y.v,Data_String
159
		call draw_3d
160
		stdcall [kosglSwapBuffers]
161
	@@:
162
	cmp ah,178 ;Up
163
	jne @f
164
		finit
165
		fld dword[angle_x]
166
		fadd dword[delt_size]
167
		fst dword[angle_x]
168
		mov word[NumberSymbolsAD],2
169
		fstp qword[Data_Double]
170
		call DoubleFloat_to_String
171
		mov byte[txt_angle_x.v],0
172
		stdcall str_cat, txt_angle_x.v,Data_String
173
		call draw_3d
174
		stdcall [kosglSwapBuffers]
175
	@@:
176
	cmp ah,177 ;Down
177
	jne @f
178
		finit
179
		fld dword[angle_x]
180
		fsub dword[delt_size]
181
		fst dword[angle_x]
182
		mov word[NumberSymbolsAD],2
183
		fstp qword[Data_Double]
184
		call DoubleFloat_to_String
185
		mov byte[txt_angle_x.v],0
186
		stdcall str_cat, txt_angle_x.v,Data_String
187
		call draw_3d
188
		stdcall [kosglSwapBuffers]
189
	@@:
190
 
191
	jmp still
192
 
193
align 4
194
button:
195
	mcall SF_GET_BUTTON
196
	cmp ah,3
197
	jne @f
198
		call but_zoom_p
199
		jmp still
200
	@@:
201
	cmp ah,4
202
	jne @f
203
		call but_zoom_m
204
		jmp still
205
	@@:
206
	cmp ah,1
207
	jne still
208
.exit:
209
	stdcall [gluDeleteQuadric], [qObj]
210
	stdcall mem.Free,[image_data_toolbar]
211
	mcall SF_TERMINATE_PROCESS
212
 
213
align 4
214
but_zoom_p:
215
	finit
216
	fld dword[scale]
6200 IgorA 217
	fadd dword[sc_delt]
218
	fcom dword[sc_max]
219
	fstsw ax
220
	sahf
221
	jbe @f
222
		ffree st0
223
		fincstp
224
		fld dword[sc_max]
225
	@@:
6189 IgorA 226
	fst dword[scale]
227
	mov word[NumberSymbolsAD],3
228
	fstp qword[Data_Double]
229
	call DoubleFloat_to_String
230
	mov byte[txt_scale.v],0
231
	stdcall str_cat, txt_scale.v,Data_String
232
	call draw_3d
233
	stdcall [kosglSwapBuffers]
234
	ret
235
 
236
align 4
237
but_zoom_m:
238
	finit
239
	fld dword[scale]
6200 IgorA 240
	fsub dword[sc_delt]
241
	fcom dword[sc_min]
242
	fstsw ax
243
	sahf
244
	ja @f
245
		ffree st0
246
		fincstp
247
		fld dword[sc_min]
248
	@@:
6189 IgorA 249
	fst dword[scale]
250
	mov word[NumberSymbolsAD],3
251
	fstp qword[Data_Double]
252
	call DoubleFloat_to_String
253
	mov byte[txt_scale.v],0
254
	stdcall str_cat, txt_scale.v,Data_String
255
	call draw_3d
256
	stdcall [kosglSwapBuffers]
257
	ret
258
 
6200 IgorA 259
 
6189 IgorA 260
align 4
261
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
262
align 4
263
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
264
;sizeof.TinyGLContext = 28
265
 
266
align 4
267
draw_3d:
268
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
269
 
270
stdcall [glPushMatrix]
271
	stdcall [glScalef], [scale], [scale], [scale]
272
	stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
273
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
274
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
275
 
276
	; рисование панорамы
277
	stdcall [gluSphere], [qObj], 1.0, 64,64
278
stdcall [glPopMatrix]
279
 
280
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
281
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,15,0xffff00
282
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
283
	ret
284
 
285
qObj dd 0
286
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
287
texture dd 0 ;указатель на память с текстурой
288
text_w dd 0
289
text_h dd 0
290
 
6200 IgorA 291
scale dd 1.5 ;начальный масштаб
292
sc_delt dd 0.05 ;изменение масштаба при нажатии
293
sc_min dd 0.95 ;минимальный масштаб
294
sc_max dd 2.5 ;максимальный масштаб
6189 IgorA 295
angle_z dd 0.0
296
angle_x dd 90.0
297
angle_y dd 0.0
298
delt_size dd 3.0
299
 
300
;--------------------------------------------------
301
align 4
302
import_lib_tinygl:
303
 
304
macro E_LIB n
305
{
306
	n dd sz_#n
307
}
308
include '../export.inc'
309
	dd 0,0
310
macro E_LIB n
311
{
312
	sz_#n db `n,0
313
}
314
include '../export.inc'
315
 
316
align 4
317
import_buf2d:
318
	dd sz_init0
319
	buf2d_create dd sz_buf2d_create
320
	buf2d_create_f_img dd sz_buf2d_create_f_img
321
	buf2d_clear dd sz_buf2d_clear
322
	buf2d_draw dd sz_buf2d_draw
323
	buf2d_delete dd sz_buf2d_delete
324
	buf2d_resize dd sz_buf2d_resize
325
	buf2d_line dd sz_buf2d_line
326
	buf2d_rect_by_size dd sz_buf2d_rect_by_size
327
	buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
328
	buf2d_circle dd sz_buf2d_circle
329
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
330
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
331
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
332
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
333
	buf2d_bit_blt dd sz_buf2d_bit_blt
334
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
335
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
336
	buf2d_curve_bezier dd sz_buf2d_curve_bezier
337
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
338
	buf2d_draw_text dd sz_buf2d_draw_text
339
	buf2d_crop_color dd sz_buf2d_crop_color
340
	buf2d_offset_h dd sz_buf2d_offset_h
341
	buf2d_flood_fill dd sz_buf2d_flood_fill
342
	buf2d_set_pixel dd sz_buf2d_set_pixel
343
	dd 0,0
344
	sz_init0 db 'lib_init',0
345
	sz_buf2d_create db 'buf2d_create',0
346
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
347
	sz_buf2d_clear db 'buf2d_clear',0
348
	sz_buf2d_draw db 'buf2d_draw',0
349
	sz_buf2d_delete db 'buf2d_delete',0
350
	sz_buf2d_resize db 'buf2d_resize',0
351
	sz_buf2d_line db 'buf2d_line',0
352
	sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
353
	sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
354
	sz_buf2d_circle db 'buf2d_circle',0
355
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
356
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
357
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
358
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
359
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
360
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
361
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
362
	sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
363
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
364
	sz_buf2d_draw_text db 'buf2d_draw_text',0
365
	sz_buf2d_crop_color db 'buf2d_crop_color',0
366
	sz_buf2d_offset_h db 'buf2d_offset_h',0
367
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
368
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
369
 
370
align 4
371
import_libimg:
372
	dd alib_init1
373
	img_is_img  dd aimg_is_img
374
	img_info    dd aimg_info
375
	img_from_file dd aimg_from_file
376
	img_to_file dd aimg_to_file
377
	img_from_rgb dd aimg_from_rgb
378
	img_to_rgb  dd aimg_to_rgb
379
	img_to_rgb2 dd aimg_to_rgb2
380
	img_decode  dd aimg_decode
381
	img_encode  dd aimg_encode
382
	img_create  dd aimg_create
383
	img_destroy dd aimg_destroy
384
	img_destroy_layer dd aimg_destroy_layer
385
	img_count   dd aimg_count
386
	img_lock_bits dd aimg_lock_bits
387
	img_unlock_bits dd aimg_unlock_bits
388
	img_flip    dd aimg_flip
389
	img_flip_layer dd aimg_flip_layer
390
	img_rotate  dd aimg_rotate
391
	img_rotate_layer dd aimg_rotate_layer
392
	img_draw    dd aimg_draw
393
 
394
	dd 0,0
395
	alib_init1   db 'lib_init',0
396
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
397
	aimg_info    db 'img_info',0
398
	aimg_from_file db 'img_from_file',0
399
	aimg_to_file db 'img_to_file',0
400
	aimg_from_rgb db 'img_from_rgb',0
401
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
402
	aimg_to_rgb2 db 'img_to_rgb2',0
403
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
404
	aimg_encode  db 'img_encode',0
405
	aimg_create  db 'img_create',0
406
	aimg_destroy db 'img_destroy',0
407
	aimg_destroy_layer db 'img_destroy_layer',0
408
	aimg_count   db 'img_count',0
409
	aimg_lock_bits db 'img_lock_bits',0
410
	aimg_unlock_bits db 'img_unlock_bits',0
411
	aimg_flip    db 'img_flip',0
412
	aimg_flip_layer db 'img_flip_layer',0
413
	aimg_rotate  db 'img_rotate',0
414
	aimg_rotate_layer db 'img_rotate_layer',0
415
	aimg_draw    db 'img_draw',0
416
 
417
;--------------------------------------------------
418
system_dir_0 db '/sys/lib/'
419
lib_name_0 db 'tinygl.obj',0
420
system_dir_1 db '/sys/lib/'
421
lib_name_1 db 'buf2d.obj',0
422
system_dir_2 db '/sys/lib/'
423
lib_name_2 db 'libimg.obj',0
424
err_msg_found_lib_0 db 'Sorry I cannot load library ',39,'tinygl.obj',39,0
425
err_msg_found_lib_1 db 'Sorry I cannot load library ',39,'buf2d.obj',39,0
426
err_msg_found_lib_2 db 'Sorry I cannot load library ',39,'libimg.obj',39,0
427
head_f_i:
428
head_f_l db 'System error',0
429
err_msg_import_0 db 'Error on load import library ',39,'tinygl.obj',39,0
430
err_msg_import_1 db 'Error on load import library ',39,'buf2d.obj',39,0
431
err_msg_import_2 db 'Error on load import library ',39,'libimg.obj',39,0
432
;--------------------------------------------------
433
 
434
txt_scale:
435
db 'Scale: '
436
.v:
437
db 0
438
rb 10
439
 
440
txt_angle_z:
441
db 'Rotate z: '
442
.v:
443
db 0
444
rb 10
445
 
446
txt_angle_x:
447
db 'Rotate x: '
448
.v:
449
db 0
450
rb 10
451
 
452
txt_angle_y:
453
db 'Rotate y: '
454
.v:
455
db 0
456
rb 10
457
 
458
align 4
459
buf_ogl:
460
	dd 0 ;указатель на буфер изображения
461
	dw 10,10 ;+4 left,top
462
.w: dd 400
463
.h: dd 350
464
	dd 0,24 ;+16 color,bit in pixel
465
 
466
align 4
467
buf_1:
468
	dd 0 ;указатель на буфер изображения
6200 IgorA 469
	dd 0 ;+4 left,top
470
.w: dd 0
471
.h: dd 0,0,24 ;+16 color,bit in pixel
6189 IgorA 472
 
473
align 4
474
l_libs_start:
6200 IgorA 475
	lib_0 l_libs lib_name_0, cur_dir_path, file_name,  system_dir_0,\
6189 IgorA 476
		err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i
6200 IgorA 477
	lib_1 l_libs lib_name_1, cur_dir_path, file_name,  system_dir_1,\
6189 IgorA 478
		err_msg_found_lib_1, head_f_l, import_buf2d,  err_msg_import_1,head_f_i
6200 IgorA 479
	lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
6189 IgorA 480
		err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
481
l_libs_end:
482
 
483
align 4
484
i_end:
485
	run_file_70 FileInfoBlock
486
	sc system_colors
487
align 16
488
	rb 4096
489
stacktop:
490
	cur_dir_path rb 4096
491
	file_name rb 4096
492
mem: