Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
6143 IgorA 1
use32
2
	org 0x0
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
 
117
	stdcall [kosglSwapBuffers]
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
151
		stdcall [kosglSwapBuffers]
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
165
		stdcall [kosglSwapBuffers]
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
179
		stdcall [kosglSwapBuffers]
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
193
		stdcall [kosglSwapBuffers]
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
232
	stdcall [kosglSwapBuffers]
233
	ret
234
 
235
align 4
236
but_dr_1:
237
	mov dword[dr_figure],1
238
	call draw_3d
239
	stdcall [kosglSwapBuffers]
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
262
	stdcall [kosglSwapBuffers]
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
285
	stdcall [kosglSwapBuffers]
286
	ret
287
 
288
align 4
6143 IgorA 289
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
290
align 4
291
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
292
;sizeof.TinyGLContext = 28
293
 
294
align 4
295
draw_3d:
296
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
297
 
298
stdcall [glPushMatrix]
299
	stdcall [glTranslatef], 0.0,0.0,0.5
300
	stdcall [glScalef], [scale], [scale], [scale]
6189 IgorA 301
	stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
6143 IgorA 302
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
303
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
304
 
305
cmp dword[dr_figure],0
306
jne @f
6145 IgorA 307
	; рисование земли с меридианами
308
	stdcall [glColor3f], 0.0, 0.0, 1.0
309
	stdcall [gluQuadricDrawStyle], [qObj],GLU_LINE
310
	stdcall [gluSphere], [qObj], 1.0, 24,18 ;меридианы
311
	stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
312
	stdcall [gluSphere], [qObj], 0.995, 24,18 ;земля
6143 IgorA 313
@@:
314
cmp dword[dr_figure],1
315
jne @f
316
	; рисование земли
6145 IgorA 317
	stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
6143 IgorA 318
	stdcall [gluSphere], [qObj], 1.0, 64,64
319
@@:
320
stdcall [glPopMatrix]
321
 
322
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
323
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,15,0xffff00
324
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
325
	ret
326
 
327
dr_figure dd 0
328
qObj dd 0
329
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
330
texture dd 0 ;указатель на память с текстурой
6189 IgorA 331
text_w dd 0
332
text_h dd 0
6143 IgorA 333
 
6200 IgorA 334
scale dd 0.95 ;начальный масштаб
335
sc_delt dd 0.05 ;изменение масштаба при нажатии
336
sc_min dd 0.1 ;минимальный масштаб
337
sc_max dd 5.0 ;максимальный масштаб
6143 IgorA 338
angle_z dd 0.0
339
angle_x dd 90.0
6189 IgorA 340
angle_y dd 0.0
6143 IgorA 341
delt_size dd 3.0
342
 
343
;--------------------------------------------------
344
align 4
345
import_lib_tinygl:
346
 
347
macro E_LIB n
348
{
349
	n dd sz_#n
350
}
351
include '../export.inc'
352
	dd 0,0
353
macro E_LIB n
354
{
355
	sz_#n db `n,0
356
}
357
include '../export.inc'
358
 
359
align 4
360
import_buf2d:
361
	dd sz_init0
362
	buf2d_create dd sz_buf2d_create
363
	buf2d_create_f_img dd sz_buf2d_create_f_img
364
	buf2d_clear dd sz_buf2d_clear
365
	buf2d_draw dd sz_buf2d_draw
366
	buf2d_delete dd sz_buf2d_delete
367
	buf2d_resize dd sz_buf2d_resize
368
	buf2d_line dd sz_buf2d_line
369
	buf2d_rect_by_size dd sz_buf2d_rect_by_size
370
	buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
371
	buf2d_circle dd sz_buf2d_circle
372
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
373
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
374
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
375
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
376
	buf2d_bit_blt dd sz_buf2d_bit_blt
377
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
378
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
379
	buf2d_curve_bezier dd sz_buf2d_curve_bezier
380
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
381
	buf2d_draw_text dd sz_buf2d_draw_text
382
	buf2d_crop_color dd sz_buf2d_crop_color
383
	buf2d_offset_h dd sz_buf2d_offset_h
384
	buf2d_flood_fill dd sz_buf2d_flood_fill
385
	buf2d_set_pixel dd sz_buf2d_set_pixel
386
	dd 0,0
387
	sz_init0 db 'lib_init',0
388
	sz_buf2d_create db 'buf2d_create',0
389
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
390
	sz_buf2d_clear db 'buf2d_clear',0
391
	sz_buf2d_draw db 'buf2d_draw',0
392
	sz_buf2d_delete db 'buf2d_delete',0
393
	sz_buf2d_resize db 'buf2d_resize',0
394
	sz_buf2d_line db 'buf2d_line',0
395
	sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
396
	sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
397
	sz_buf2d_circle db 'buf2d_circle',0
398
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
399
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
400
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
401
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
402
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
403
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
404
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
405
	sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
406
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
407
	sz_buf2d_draw_text db 'buf2d_draw_text',0
408
	sz_buf2d_crop_color db 'buf2d_crop_color',0
409
	sz_buf2d_offset_h db 'buf2d_offset_h',0
410
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
411
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
412
 
413
align 4
414
import_libimg:
415
	dd alib_init1
416
	img_is_img  dd aimg_is_img
417
	img_info    dd aimg_info
418
	img_from_file dd aimg_from_file
419
	img_to_file dd aimg_to_file
420
	img_from_rgb dd aimg_from_rgb
421
	img_to_rgb  dd aimg_to_rgb
422
	img_to_rgb2 dd aimg_to_rgb2
423
	img_decode  dd aimg_decode
424
	img_encode  dd aimg_encode
425
	img_create  dd aimg_create
426
	img_destroy dd aimg_destroy
427
	img_destroy_layer dd aimg_destroy_layer
428
	img_count   dd aimg_count
429
	img_lock_bits dd aimg_lock_bits
430
	img_unlock_bits dd aimg_unlock_bits
431
	img_flip    dd aimg_flip
432
	img_flip_layer dd aimg_flip_layer
433
	img_rotate  dd aimg_rotate
434
	img_rotate_layer dd aimg_rotate_layer
435
	img_draw    dd aimg_draw
436
 
437
	dd 0,0
438
	alib_init1   db 'lib_init',0
439
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
440
	aimg_info    db 'img_info',0
441
	aimg_from_file db 'img_from_file',0
442
	aimg_to_file db 'img_to_file',0
443
	aimg_from_rgb db 'img_from_rgb',0
444
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
445
	aimg_to_rgb2 db 'img_to_rgb2',0
446
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
447
	aimg_encode  db 'img_encode',0
448
	aimg_create  db 'img_create',0
449
	aimg_destroy db 'img_destroy',0
450
	aimg_destroy_layer db 'img_destroy_layer',0
451
	aimg_count   db 'img_count',0
452
	aimg_lock_bits db 'img_lock_bits',0
453
	aimg_unlock_bits db 'img_unlock_bits',0
454
	aimg_flip    db 'img_flip',0
455
	aimg_flip_layer db 'img_flip_layer',0
456
	aimg_rotate  db 'img_rotate',0
457
	aimg_rotate_layer db 'img_rotate_layer',0
458
	aimg_draw    db 'img_draw',0
459
 
460
;--------------------------------------------------
6737 leency 461
system_dir_0 db '/sys/lib/'
6143 IgorA 462
lib_name_0 db 'tinygl.obj',0
463
system_dir_1 db '/sys/lib/'
464
lib_name_1 db 'buf2d.obj',0
465
system_dir_2 db '/sys/lib/'
466
lib_name_2 db 'libimg.obj',0
467
err_msg_found_lib_0 db 'Sorry I cannot load library ',39,'tinygl.obj',39,0
468
err_msg_found_lib_1 db 'Sorry I cannot load library ',39,'buf2d.obj',39,0
469
err_msg_found_lib_2 db 'Sorry I cannot load library ',39,'libimg.obj',39,0
470
head_f_i:
471
head_f_l db 'System error',0
472
err_msg_import_0 db 'Error on load import library ',39,'tinygl.obj',39,0
473
err_msg_import_1 db 'Error on load import library ',39,'buf2d.obj',39,0
474
err_msg_import_2 db 'Error on load import library ',39,'libimg.obj',39,0
475
;--------------------------------------------------
476
 
477
txt_scale:
478
db 'Scale: '
479
.v:
480
db 0
481
rb 10
482
 
483
txt_angle_z:
484
db 'Rotate z: '
485
.v:
486
db 0
487
rb 10
488
 
489
txt_angle_x:
490
db 'Rotate x: '
491
.v:
492
db 0
493
rb 10
494
 
495
txt_angle_y:
496
db 'Rotate y: '
497
.v:
498
db 0
499
rb 10
500
 
501
align 4
502
buf_ogl:
503
	dd 0 ;указатель на буфер изображения
504
	dw 10,10 ;+4 left,top
505
.w: dd 400
506
.h: dd 350
507
	dd 0,24 ;+16 color,bit in pixel
508
 
509
align 4
510
buf_1:
511
	dd 0 ;указатель на буфер изображения
6200 IgorA 512
	dd 0 ;+4 left,top
513
.w: dd 0
514
.h: dd 0,0,24 ;+16 color,bit in pixel
6143 IgorA 515
 
516
align 4
517
l_libs_start:
6200 IgorA 518
	lib_0 l_libs lib_name_0, cur_dir_path, file_name,  system_dir_0,\
6143 IgorA 519
		err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i
6200 IgorA 520
	lib_1 l_libs lib_name_1, cur_dir_path, file_name,  system_dir_1,\
6143 IgorA 521
		err_msg_found_lib_1, head_f_l, import_buf2d,  err_msg_import_1,head_f_i
6200 IgorA 522
	lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
6143 IgorA 523
		err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
524
l_libs_end:
525
 
526
align 4
527
i_end:
528
	run_file_70 FileInfoBlock
529
	sc system_colors
530
align 16
531
	rb 4096
532
stacktop:
533
	cur_dir_path rb 4096
534
	file_name rb 4096
535
mem: