Subversion Repositories Kolibri OS

Rev

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