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 |