Subversion Repositories Kolibri OS

Rev

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

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