Subversion Repositories Kolibri OS

Rev

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

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