Subversion Repositories Kolibri OS

Rev

Rev 6164 | Rev 6200 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6164 Rev 6189
Line 23... Line 23...
23
	Buffer	 dd ?
23
	Buffer	 dd ?
24
		db ?
24
		db ?
25
	FileName dd ?
25
	FileName dd ?
26
ends
26
ends
Line 27... Line -...
27
 
-
 
-
 
27
 
-
 
28
align 4
28
image_data dd 0 ;указатель на временную память, нужен для преобразования изображения
29
open_b rb 560
29
image_data_toolbar dd 0
-
 
30
IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением
30
image_data_toolbar dd 0
31
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
-
 
Line 32... Line 31...
32
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*3+54
31
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
33
 
32
 
-
 
33
;макрос для загрузки изображений
-
 
34
; path - может быть переменной или строковым параметром
-
 
35
; buf - переменная куда будет записан указатель на изображение в формате rgb
-
 
36
; img_w, img_h - переменные куда будут записаны размеры открываемого
-
 
37
;    изображения, не обязательные параметры
34
macro load_image_file path,buf,size { ;макрос для загрузки изображений
38
macro load_image_file path, buf, img_w, img_h
35
	;path - может быть переменной или строковым параметром
-
 
36
	if path eqtype '' ;проверяем задан ли строкой параметр path
39
{
-
 
40
if path eqtype '' ;проверяем задан ли строкой параметр path
37
		jmp @f
41
	local .path_str
38
			local .path_str
42
	jmp @f
39
			.path_str db path ;формируем локальную переменную
43
		.path_str db path ;формируем локальную переменную
40
			db 0
44
		db 0
41
		@@:
45
	@@:
42
		;32 - стандартный адрес по которому должен быть буфер с системным путем
46
	;32 - стандартный адрес по которому должен быть буфер с системным путем
43
		copy_path .path_str,[32],file_name,0
47
	copy_path .path_str,[32],file_name,0
44
	else
48
else
-
 
49
	copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
-
 
50
end if
-
 
51
    mov [run_file_70.Function], SSF_GET_INFO
-
 
52
    mov [run_file_70.Position], 0
-
 
53
    mov [run_file_70.Flags], 0
-
 
54
    mov dword[run_file_70.Count], 0
-
 
55
    mov dword[run_file_70.Buffer], open_b
-
 
56
    mov byte[run_file_70+20], 0
-
 
57
    mov dword[run_file_70.FileName], file_name
-
 
58
    mcall SF_FILE,run_file_70
-
 
59
	or eax,eax
-
 
60
	jnz @f
45
		copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
61
 
46
	end if
62
    mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
47
	stdcall mem.Alloc, dword size ;выделяем память для изображения
63
    stdcall mem.Alloc,ecx ;выделяем память для изображения
48
	mov [buf],eax
64
	mov [buf],eax
49
	mov [run_file_70.Function], SSF_READ_FILE
65
	mov [run_file_70.Function], SSF_READ_FILE
50
	mov [run_file_70.Position], 0
66
	mov [run_file_70.Position], 0
51
	mov [run_file_70.Flags], 0
67
	mov [run_file_70.Flags], 0
52
	mov [run_file_70.Count], dword size
68
	mov [run_file_70.Count], ecx
53
	mov [run_file_70.Buffer], eax
69
	mov [run_file_70.Buffer], eax
54
	mov byte[run_file_70+20], 0
70
	mov byte[run_file_70+20], 0
55
	mov [run_file_70.FileName], file_name
71
	mov [run_file_70.FileName], file_name
56
	mcall SF_FILE,run_file_70 ;загружаем файл изображения
72
	mcall SF_FILE,run_file_70 ;загружаем файл изображения
57
	cmp ebx,0xffffffff
73
	cmp ebx,0xffffffff
58
	je @f
74
	je @f
59
		;определяем вид изображения и переводим его во временный буфер image_data
75
		;определяем вид изображения и пишем его параметры
60
		stdcall dword[img_decode], dword[buf],ebx,0
76
		stdcall [img_decode], [buf],ebx,0
61
		mov dword[image_data],eax
77
		mov ebx,eax
-
 
78
		;определяем размер декодированного изображения
-
 
79
		mov ecx,[eax+4] ;+4 = image width
-
 
80
if img_w eq
-
 
81
else
-
 
82
		mov dword[img_w],ecx
62
		;преобразуем изображение к формату rgb
83
end if
-
 
84
if img_h eq
-
 
85
		imul ecx,[eax+8] ;+8 = image height
63
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
86
else
-
 
87
		mov eax,[eax+8] ;+8 = image height
-
 
88
		mov dword[img_h],eax
-
 
89
		imul ecx,eax
-
 
90
end if
-
 
91
		imul ecx,3 ;need for r,g,b
-
 
92
		stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера
-
 
93
		mov [buf],eax
64
		;удаляем временный буфер image_data
94
		stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb
65
		stdcall dword[img_destroy], dword[image_data]
95
		stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
Line 66... Line 96...
66
	@@:
96
	@@:
Line 98... Line 128...
98
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
128
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
99
	mov eax,[eax] ;eax -> ZBuffer
129
	mov eax,[eax] ;eax -> ZBuffer
100
	mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
130
	mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
101
	mov dword[buf_ogl],eax
131
	mov dword[buf_ogl],eax
Line 102... Line 132...
102
 
132
 
103
	load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE
133
	load_image_file 'font8x9.bmp', image_data_toolbar
104
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
134
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
105
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
135
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
106
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
136
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
Line 107... Line 137...
107
	stdcall [buf2d_convert_text_matrix], buf_1
137
	stdcall [buf2d_convert_text_matrix], buf_1
108
 
-
 
109
	load_image_file 'toolb_1.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE
138
 
Line 110... Line 139...
110
 
139
	load_image_file 'toolb_1.png', image_data_toolbar
111
	load_image_file 'text_1.png', texture, (256*256*3+54) ;открытие файла текстуры
140
	load_image_file 'text_1.png', texture, text_w,text_h ;открытие файла текстуры
112
 
-
 
Line 113... Line 141...
113
	;* Setup texturing *
141
 
114
	stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
142
	;* Setup texturing *
115
	stdcall [glHint], GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST
143
	stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
116
  
144
  
-
 
145
	;* generate texture object IDs *
Line 117... Line 146...
117
	;* generate texture object IDs *
146
	stdcall [glGenTextures], 1, TexObj
118
	stdcall [glGenTextures], 1, TexObj
147
	stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
119
	stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
148
	stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, [text_w], [text_h],\
120
	stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, 256, 256, 0,  GL_RGB, GL_UNSIGNED_BYTE, [texture]
149
		0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
Line 299... Line 328...
299
align 4
328
align 4
300
draw_3d:
329
draw_3d:
301
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
330
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
Line 302... Line 331...
302
 
331
 
303
stdcall [glPushMatrix]
-
 
304
	call SetLight
-
 
305
 
332
stdcall [glPushMatrix]
306
	stdcall [glTranslatef], 0.0,0.0,0.5
333
	stdcall [glTranslatef], 0.0,0.0,0.5
307
	stdcall [glScalef], [scale], [scale], [scale]
334
	stdcall [glScalef], [scale], [scale], [scale]
308
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
335
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
Line 394... Line 421...
394
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
421
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
395
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_z,5,15,0xffff00
422
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_z,5,15,0xffff00
396
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00
423
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00
397
	ret
424
	ret
Line 398... Line -...
398
 
-
 
399
align 4
-
 
400
SetLight:
-
 
401
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
-
 
402
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
-
 
403
 
-
 
404
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
-
 
405
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
-
 
406
 
-
 
407
	stdcall [glEnable], GL_COLOR_MATERIAL
-
 
408
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
-
 
409
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
-
 
410
	;stdcall [glMaterialf], GL_FRONT, GL_SHININESS, [mat_shininess]
-
 
411
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
-
 
412
 
-
 
413
	stdcall [glEnable],GL_LIGHTING
-
 
414
	stdcall [glEnable],GL_LIGHT0
-
 
415
ret
-
 
416
 
425
 
417
dr_figure dd 0
426
dr_figure dd 0
418
qObj dd 0
427
qObj dd 0
419
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
428
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
-
 
429
texture dd 0 ;указатель на память с текстурой
-
 
430
text_w dd 0
Line 420... Line 431...
420
texture dd 0 ;указатель на память с текстурой
431
text_h dd 0
421
 
432
 
422
scale dd 0.4
433
scale dd 0.4
423
delt_sc dd 0.05
434
delt_sc dd 0.05