Subversion Repositories Kolibri OS

Rev

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