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 97... Line 127...
97
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
127
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
98
	mov eax,[eax] ;eax -> ZBuffer
128
	mov eax,[eax] ;eax -> ZBuffer
99
	mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
129
	mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
100
	mov dword[buf_ogl],eax
130
	mov dword[buf_ogl],eax
Line 101... Line 131...
101
 
131
 
102
	load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE
132
	load_image_file 'font8x9.bmp', image_data_toolbar
103
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
133
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
104
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
134
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
105
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
135
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
Line 106... Line 136...
106
	stdcall [buf2d_convert_text_matrix], buf_1
136
	stdcall [buf2d_convert_text_matrix], buf_1
107
 
137
 
Line 108... Line 138...
108
	load_image_file 'toolb_1.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE
138
	load_image_file 'toolb_1.png', image_data_toolbar
109
	call draw_3d
139
	call draw_3d
110
 
140
 
Line 131... Line 161...
131
 
161
 
132
	mov esi,[sc.work_button]
162
	mov esi,[sc.work_button]
133
	mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл.
163
	mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;вершины вкл.
134
	mcall ,(36 shl 16)+19,,4+0x40000000 ;каркасные грани вкл.
164
	mcall ,(36 shl 16)+19,,4+0x40000000 ;каркасные грани вкл.
-
 
165
	mcall ,(66 shl 16)+19,,5+0x40000000 ;сплошные грани вкл.
-
 
166
	mcall ,(96 shl 16)+19,,6+0x40000000 ;масштаб +
Line 135... Line 167...
135
	mcall ,(66 shl 16)+19,,5+0x40000000 ;сплошные грани вкл.
167
	mcall ,(126 shl 16)+19,,7+0x40000000 ;масштаб -
136
 
168
 
137
	mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+5 ;вершины вкл.
169
	mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+5 ;вершины вкл.
138
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
170
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
139
	mcall ,,,(35 shl 16)+5 ;каркасные грани вкл.
171
	mcall ,,,(35 shl 16)+5 ;каркасные грани вкл.
-
 
172
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
-
 
173
	mcall ,,,(65 shl 16)+5 ;сплошные грани вкл.
-
 
174
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
-
 
175
	mcall ,,,(95 shl 16)+5 ;масштаб +
Line 140... Line 176...
140
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
176
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
141
	mcall ,,,(65 shl 16)+5 ;сплошные грани вкл.
177
	mcall ,,,(125 shl 16)+5 ;масштаб -
142
 
178
 
143
	stdcall [kosglSwapBuffers]
179
	stdcall [kosglSwapBuffers]
Line 152... Line 188...
152
	cmp ah,27 ;Esc
188
	cmp ah,27 ;Esc
153
	je button.exit
189
	je button.exit
Line 154... Line 190...
154
 
190
 
155
	cmp ah,61 ;+
191
	cmp ah,61 ;+
156
	jne @f
-
 
157
		finit
-
 
158
		fld dword[scale]
-
 
159
		fadd dword[delt_sc]
-
 
160
		fst dword[scale]
-
 
161
		mov word[NumberSymbolsAD],3
-
 
162
		fstp qword[Data_Double]
192
	jne @f
163
		call DoubleFloat_to_String
-
 
164
		mov byte[txt_scale.v],0
-
 
165
		stdcall str_cat, txt_scale.v,Data_String
193
		call but_zoom_p
166
		call draw_3d
-
 
167
		stdcall [kosglSwapBuffers]
194
		jmp still
168
	@@:
195
	@@:
169
	cmp ah,45 ;-
196
	cmp ah,45 ;-
170
	jne @f
-
 
171
		finit
-
 
172
		fld dword[scale]
-
 
173
		fsub dword[delt_sc]
-
 
174
		fst dword[scale]
-
 
175
		mov word[NumberSymbolsAD],3
-
 
176
		fstp qword[Data_Double]
197
	jne @f
177
		call DoubleFloat_to_String
-
 
178
		mov byte[txt_scale.v],0
-
 
179
		stdcall str_cat, txt_scale.v,Data_String
198
		call but_zoom_m
180
		call draw_3d
-
 
181
		stdcall [kosglSwapBuffers]
199
		jmp still
182
	@@:
200
	@@:
183
	cmp ah,178 ;Up
201
	cmp ah,178 ;Up
184
	jne @f
202
	jne @f
185
		finit
203
		finit
Line 255... Line 273...
255
	cmp ah,5
273
	cmp ah,5
256
	jne @f
274
	jne @f
257
		call but_st_face
275
		call but_st_face
258
		jmp still
276
		jmp still
259
	@@:
277
	@@:
-
 
278
	cmp ah,6
-
 
279
	jne @f
-
 
280
		call but_zoom_p
-
 
281
		jmp still
-
 
282
	@@:
-
 
283
	cmp ah,7
-
 
284
	jne @f
-
 
285
		call but_zoom_m
-
 
286
		jmp still
-
 
287
	@@:
260
	cmp ah,1
288
	cmp ah,1
261
	jne still
289
	jne still
262
.exit:
290
.exit:
263
	stdcall [gluDeleteQuadric], [qObj]
291
	stdcall [gluDeleteQuadric], [qObj]
264
	stdcall mem.Free,[image_data_toolbar]
292
	stdcall mem.Free,[image_data_toolbar]
Line 283... Line 311...
283
	stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
311
	stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
284
	call draw_3d
312
	call draw_3d
285
	stdcall [kosglSwapBuffers]
313
	stdcall [kosglSwapBuffers]
286
	ret
314
	ret
Line -... Line 315...
-
 
315
 
-
 
316
align 4
-
 
317
but_zoom_p:
-
 
318
	finit
-
 
319
	fld dword[scale]
-
 
320
	fadd dword[delt_sc]
-
 
321
	fst dword[scale]
-
 
322
	mov word[NumberSymbolsAD],3
-
 
323
	fstp qword[Data_Double]
-
 
324
	call DoubleFloat_to_String
-
 
325
	mov byte[txt_scale.v],0
-
 
326
	stdcall str_cat, txt_scale.v,Data_String
-
 
327
	call draw_3d
-
 
328
	stdcall [kosglSwapBuffers]
-
 
329
	ret
-
 
330
 
-
 
331
align 4
-
 
332
but_zoom_m:
-
 
333
	finit
-
 
334
	fld dword[scale]
-
 
335
	fsub dword[delt_sc]
-
 
336
	fst dword[scale]
-
 
337
	mov word[NumberSymbolsAD],3
-
 
338
	fstp qword[Data_Double]
-
 
339
	call DoubleFloat_to_String
-
 
340
	mov byte[txt_scale.v],0
-
 
341
	stdcall str_cat, txt_scale.v,Data_String
-
 
342
	call draw_3d
-
 
343
	stdcall [kosglSwapBuffers]
-
 
344
	ret
Line 287... Line 345...
287
 
345
 
288
 
346
 
289
align 4
347
align 4
290
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
348
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0