Subversion Repositories Kolibri OS

Rev

Rev 8174 | Details | Compare with Previous | Last modification | View Log | RSS feed

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