add example with panorama, modify other examples

git-svn-id: svn://kolibrios.org@6189 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2016-02-10 18:41:35 +00:00
parent 2f4f83ef12
commit ed44ecca04
10 changed files with 1127 additions and 170 deletions

View File

@@ -25,44 +25,74 @@ struct FileInfoBlock
FileName dd ?
ends
image_data dd 0 ;указатель на временную память, нужен для преобразования изображения
align 4
open_b rb 560
image_data_toolbar dd 0
IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*3+54
macro load_image_file path,buf,size { ;макрос для загрузки изображений
;path - может быть переменной или строковым параметром
if path eqtype '' ;проверяем задан ли строкой параметр path
jmp @f
local .path_str
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0
else
copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
stdcall mem.Alloc, dword size ;выделяем память для изображения
;макрос для загрузки изображений
; path - может быть переменной или строковым параметром
; buf - переменная куда будет записан указатель на изображение в формате rgb
; img_w, img_h - переменные куда будут записаны размеры открываемого
; изображения, не обязательные параметры
macro load_image_file path, buf, img_w, img_h
{
if path eqtype '' ;проверяем задан ли строкой параметр path
local .path_str
jmp @f
.path_str db path ;формируем локальную переменную
db 0
@@:
;32 - стандартный адрес по которому должен быть буфер с системным путем
copy_path .path_str,[32],file_name,0
else
copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
end if
mov [run_file_70.Function], SSF_GET_INFO
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], 0
mov dword[run_file_70.Buffer], open_b
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], file_name
mcall SF_FILE,run_file_70
or eax,eax
jnz @f
mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
stdcall mem.Alloc,ecx ;выделяем память для изображения
mov [buf],eax
mov [run_file_70.Function], SSF_READ_FILE
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
mov [run_file_70.Count], ecx
mov [run_file_70.Buffer], eax
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mcall SF_FILE,run_file_70 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall dword[img_decode], dword[buf],ebx,0
mov dword[image_data],eax
;преобразуем изображение к формату rgb
stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
;удаляем временный буфер image_data
stdcall dword[img_destroy], dword[image_data]
;определяем вид изображения и пишем его параметры
stdcall [img_decode], [buf],ebx,0
mov ebx,eax
;определяем размер декодированного изображения
mov ecx,[eax+4] ;+4 = image width
if img_w eq
else
mov dword[img_w],ecx
end if
if img_h eq
imul ecx,[eax+8] ;+8 = image height
else
mov eax,[eax+8] ;+8 = image height
mov dword[img_h],eax
imul ecx,eax
end if
imul ecx,3 ;need for r,g,b
stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера
mov [buf],eax
stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb
stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
@@:
}
@@ -100,15 +130,14 @@ load_libraries l_libs_start,l_libs_end
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
mov dword[buf_ogl],eax
load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE
load_image_file 'font8x9.bmp', image_data_toolbar
stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
stdcall [buf2d_convert_text_matrix], buf_1
load_image_file 'toolb_1.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE
load_image_file 'text_2.png', texture, (256*256*3+54) ;открытие файла текстуры
load_image_file 'toolb_1.png', image_data_toolbar
load_image_file 'text_2.png', texture, text_w,text_h ;открытие файла текстуры
;* Setup texturing *
stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
@@ -116,7 +145,8 @@ load_libraries l_libs_start,l_libs_end
;* generate texture object IDs *
stdcall [glGenTextures], 1, TexObj
stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, [text_w], [text_h],\
0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
@@ -151,12 +181,18 @@ draw_window:
mov esi,[sc.work_button]
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;земля с меридиан.
mcall ,(36 shl 16)+19,,4+0x40000000 ;земля
mcall ,(66 shl 16)+19,,5+0x40000000 ;масштаб +
mcall ,(96 shl 16)+19,,6+0x40000000 ;масштаб -
mov ebx,[image_data_toolbar]
add ebx,IMAGE_TOOLBAR_ICON_SIZE
mcall SF_PUT_IMAGE,,(21 shl 16)+21,(5 shl 16)+5 ;земля с меридиан.
add ebx,IMAGE_TOOLBAR_ICON_SIZE
mcall ,,,(35 shl 16)+5 ;земля
add ebx,IMAGE_TOOLBAR_ICON_SIZE
mcall ,,,(65 shl 16)+5 ;масштаб +
add ebx,IMAGE_TOOLBAR_ICON_SIZE
mcall ,,,(95 shl 16)+5 ;масштаб -
stdcall [kosglSwapBuffers]
mcall SF_REDRAW,SSF_END_DRAW
@@ -172,31 +208,13 @@ key:
cmp ah,61 ;+
jne @f
finit
fld dword[scale]
fadd dword[delt_sc]
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d
stdcall [kosglSwapBuffers]
call but_zoom_p
jmp still
@@:
cmp ah,45 ;-
jne @f
finit
fld dword[scale]
fsub dword[delt_sc]
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d
stdcall [kosglSwapBuffers]
call but_zoom_m
jmp still
@@:
cmp ah,176 ;Left
jne @f
@@ -270,6 +288,16 @@ button:
call but_dr_1
jmp still
@@:
cmp ah,5
jne @f
call but_zoom_p
jmp still
@@:
cmp ah,6
jne @f
call but_zoom_m
jmp still
@@:
cmp ah,1
jne still
.exit:
@@ -291,6 +319,36 @@ but_dr_1:
stdcall [kosglSwapBuffers]
ret
align 4
but_zoom_p:
finit
fld dword[scale]
fadd dword[delt_sc]
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d
stdcall [kosglSwapBuffers]
ret
align 4
but_zoom_m:
finit
fld dword[scale]
fsub dword[delt_sc]
fst dword[scale]
mov word[NumberSymbolsAD],3
fstp qword[Data_Double]
call DoubleFloat_to_String
mov byte[txt_scale.v],0
stdcall str_cat, txt_scale.v,Data_String
call draw_3d
stdcall [kosglSwapBuffers]
ret
align 4
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
align 4
@@ -304,6 +362,7 @@ stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим б
stdcall [glPushMatrix]
stdcall [glTranslatef], 0.0,0.0,0.5
stdcall [glScalef], [scale], [scale], [scale]
stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
@@ -333,12 +392,14 @@ dr_figure dd 0
qObj dd 0
TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
texture dd 0 ;указатель на память с текстурой
text_w dd 0
text_h dd 0
scale dd 0.5
scale dd 0.95
delt_sc dd 0.05
angle_z dd 0.0
angle_x dd 90.0
angle_y dd 225.0
angle_y dd 0.0
delt_size dd 3.0
;--------------------------------------------------
@@ -520,7 +581,7 @@ l_libs_start:
err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i
lib_1 l_libs lib_name_1, cur_dir_path, library_path, system_dir_1,\
err_msg_found_lib_1, head_f_l, import_buf2d, err_msg_import_1,head_f_i
lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
lib_2 l_libs lib_name_2, cur_dir_path, library_path, system_dir_2,\
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
l_libs_end: