Subversion Repositories Kolibri OS

Rev

Rev 6100 | Go to most recent revision | Details | Last modification | View Log | RSS feed

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