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 |