mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-11-24 01:39:35 +03:00
add scale limits, optimize code
git-svn-id: svn://kolibrios.org@6200 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
2189324326
commit
a97271f298
@ -130,13 +130,13 @@ draw_window:
|
||||
pushad
|
||||
mcall SF_REDRAW,SSF_BEGIN_DRAW
|
||||
|
||||
mcall SF_CREATE_WINDOW,(50 shl 16)+410,(30 shl 16)+425,0x33ffffff,,title1
|
||||
mcall SF_CREATE_WINDOW,(50 shl 16)+410,(30 shl 16)+425,0x33404040,,title1
|
||||
stdcall [kosglSwapBuffers]
|
||||
|
||||
;Title
|
||||
mcall SF_DRAW_TEXT,(300 shl 16)+4,0x808080,fps, fps.end-fps
|
||||
mcall SF_DRAW_TEXT,(8 shl 16)+4,0x808080,title3,title3.end-title3
|
||||
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0x808080,title2,title2.end-title2
|
||||
mcall SF_DRAW_TEXT,(300 shl 16)+4,0xc0c0c0,fps, fps.end-fps
|
||||
mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title3,title3.end-title3
|
||||
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0xc0c0c0,title2,title2.end-title2
|
||||
|
||||
mcall SF_REDRAW,SSF_END_DRAW
|
||||
popad
|
||||
@ -210,7 +210,7 @@ title2: db 'F full screen'
|
||||
.end: db 0
|
||||
title3: db 'ESC - exit'
|
||||
.end: db 0
|
||||
fps: db 'FPS:'
|
||||
fps: db 'FPS:'
|
||||
.end: db 0
|
||||
|
||||
align 4
|
||||
|
@ -1,101 +1,21 @@
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01'
|
||||
dd 1,start,i_end
|
||||
dd mem,stacktop
|
||||
dd 0,cur_dir_path
|
||||
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||
|
||||
include '../../../../../proc32.inc'
|
||||
include '../../../../../macros.inc'
|
||||
include '../../../../../KOSfuncs.inc'
|
||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
||||
include '../../../../../dll.inc'
|
||||
include '../../../../../load_img.inc'
|
||||
include '../opengl_const.inc'
|
||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||
|
||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
|
||||
struct FileInfoBlock
|
||||
Function dd ?
|
||||
Position dd ?
|
||||
Flags dd ?
|
||||
Count dd ?
|
||||
Buffer dd ?
|
||||
db ?
|
||||
FileName dd ?
|
||||
ends
|
||||
|
||||
align 4
|
||||
open_b rb 560
|
||||
image_data_toolbar dd 0
|
||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
||||
|
||||
;макрос для загрузки изображений
|
||||
; 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], 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
|
||||
;определяем вид изображения и пишем его параметры
|
||||
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 ;удаляем временный буфер с параметрами изображения
|
||||
@@:
|
||||
}
|
||||
|
||||
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||
|
||||
align 4
|
||||
@ -129,7 +49,7 @@ 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
|
||||
load_image_file 'font8x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
|
||||
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 бит
|
||||
@ -317,7 +237,15 @@ align 4
|
||||
but_zoom_p:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fadd dword[delt_sc]
|
||||
fadd dword[sc_delt]
|
||||
fcom dword[sc_max]
|
||||
fstsw ax
|
||||
sahf
|
||||
jbe @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_max]
|
||||
@@:
|
||||
fst dword[scale]
|
||||
mov word[NumberSymbolsAD],3
|
||||
fstp qword[Data_Double]
|
||||
@ -332,7 +260,15 @@ align 4
|
||||
but_zoom_m:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fsub dword[delt_sc]
|
||||
fsub dword[sc_delt]
|
||||
fcom dword[sc_min]
|
||||
fstsw ax
|
||||
sahf
|
||||
ja @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_min]
|
||||
@@:
|
||||
fst dword[scale]
|
||||
mov word[NumberSymbolsAD],3
|
||||
fstp qword[Data_Double]
|
||||
@ -399,8 +335,10 @@ ret
|
||||
|
||||
qObj dd 0
|
||||
|
||||
scale dd 0.4
|
||||
delt_sc dd 0.05
|
||||
scale dd 0.4 ;начальный масштаб
|
||||
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||
sc_min dd 0.1 ;минимальный масштаб
|
||||
sc_max dd 1.1 ;максимальный масштаб
|
||||
angle_z dd 0.0
|
||||
angle_y dd 0.0
|
||||
delt_size dd 3.0
|
||||
@ -576,15 +514,15 @@ buf_ogl:
|
||||
align 4
|
||||
buf_1:
|
||||
dd 0 ;указатель на буфер изображения
|
||||
dw 25,25 ;+4 left,top
|
||||
dd 128,144 ;+8 w,h
|
||||
dd 0,24 ;+16 color,bit in pixel
|
||||
dd 0 ;+4 left,top
|
||||
.w: dd 0
|
||||
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||
|
||||
align 4
|
||||
l_libs_start:
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, file_name, system_dir_0,\
|
||||
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,\
|
||||
lib_1 l_libs lib_name_1, cur_dir_path, file_name, 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,\
|
||||
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
||||
@ -598,6 +536,5 @@ align 16
|
||||
rb 4096
|
||||
stacktop:
|
||||
cur_dir_path rb 4096
|
||||
library_path rb 4096
|
||||
file_name rb 4096
|
||||
mem:
|
||||
|
@ -1,101 +1,21 @@
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01'
|
||||
dd 1,start,i_end
|
||||
dd mem,stacktop
|
||||
dd 0,cur_dir_path
|
||||
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||
|
||||
include '../../../../../proc32.inc'
|
||||
include '../../../../../macros.inc'
|
||||
include '../../../../../KOSfuncs.inc'
|
||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
||||
include '../../../../../dll.inc'
|
||||
include '../../../../../load_img.inc'
|
||||
include '../opengl_const.inc'
|
||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||
|
||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
|
||||
struct FileInfoBlock
|
||||
Function dd ?
|
||||
Position dd ?
|
||||
Flags dd ?
|
||||
Count dd ?
|
||||
Buffer dd ?
|
||||
db ?
|
||||
FileName dd ?
|
||||
ends
|
||||
|
||||
align 4
|
||||
open_b rb 560
|
||||
image_data_toolbar dd 0
|
||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
||||
|
||||
;макрос для загрузки изображений
|
||||
; 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], 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
|
||||
;определяем вид изображения и пишем его параметры
|
||||
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 ;удаляем временный буфер с параметрами изображения
|
||||
@@:
|
||||
}
|
||||
|
||||
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||
|
||||
align 4
|
||||
@ -130,7 +50,7 @@ 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
|
||||
load_image_file 'font8x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
|
||||
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 бит
|
||||
@ -181,10 +101,16 @@ 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 ;масштаб -
|
||||
|
||||
mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+5 ;сферы
|
||||
add ebx,2*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
|
||||
@ -200,31 +126,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,178 ;Up
|
||||
jne @f
|
||||
@ -298,6 +206,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:
|
||||
@ -319,6 +237,52 @@ but_dr_1:
|
||||
stdcall [kosglSwapBuffers]
|
||||
ret
|
||||
|
||||
align 4
|
||||
but_zoom_p:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fadd dword[sc_delt]
|
||||
fcom dword[sc_max]
|
||||
fstsw ax
|
||||
sahf
|
||||
jbe @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_max]
|
||||
@@:
|
||||
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[sc_delt]
|
||||
fcom dword[sc_min]
|
||||
fstsw ax
|
||||
sahf
|
||||
ja @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_min]
|
||||
@@:
|
||||
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
|
||||
@ -430,8 +394,10 @@ texture dd 0 ;указатель на память с текстурой
|
||||
text_w dd 0
|
||||
text_h dd 0
|
||||
|
||||
scale dd 0.4
|
||||
delt_sc dd 0.05
|
||||
scale dd 0.4 ;начальный масштаб
|
||||
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||
sc_min dd 0.1 ;минимальный масштаб
|
||||
sc_max dd 1.1 ;максимальный масштаб
|
||||
angle_z dd 0.0
|
||||
angle_y dd 0.0
|
||||
delt_size dd 3.0
|
||||
@ -607,15 +573,15 @@ buf_ogl:
|
||||
align 4
|
||||
buf_1:
|
||||
dd 0 ;указатель на буфер изображения
|
||||
dw 25,25 ;+4 left,top
|
||||
dd 128,144 ;+8 w,h
|
||||
dd 0,24 ;+16 color,bit in pixel
|
||||
dd 0 ;+4 left,top
|
||||
.w: dd 0
|
||||
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||
|
||||
align 4
|
||||
l_libs_start:
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, file_name, system_dir_0,\
|
||||
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,\
|
||||
lib_1 l_libs lib_name_1, cur_dir_path, file_name, 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,\
|
||||
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
||||
@ -629,6 +595,5 @@ align 16
|
||||
rb 4096
|
||||
stacktop:
|
||||
cur_dir_path rb 4096
|
||||
library_path rb 4096
|
||||
file_name rb 4096
|
||||
mem:
|
||||
|
@ -1,101 +1,21 @@
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01'
|
||||
dd 1,start,i_end
|
||||
dd mem,stacktop
|
||||
dd 0,cur_dir_path
|
||||
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||
|
||||
include '../../../../../proc32.inc'
|
||||
include '../../../../../macros.inc'
|
||||
include '../../../../../KOSfuncs.inc'
|
||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
||||
include '../../../../../dll.inc'
|
||||
include '../../../../../load_img.inc'
|
||||
include '../opengl_const.inc'
|
||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||
|
||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
|
||||
struct FileInfoBlock
|
||||
Function dd ?
|
||||
Position dd ?
|
||||
Flags dd ?
|
||||
Count dd ?
|
||||
Buffer dd ?
|
||||
db ?
|
||||
FileName dd ?
|
||||
ends
|
||||
|
||||
align 4
|
||||
open_b rb 560
|
||||
image_data_toolbar dd 0
|
||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
||||
|
||||
;макрос для загрузки изображений
|
||||
; 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], 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
|
||||
;определяем вид изображения и пишем его параметры
|
||||
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 ;удаляем временный буфер с параметрами изображения
|
||||
@@:
|
||||
}
|
||||
|
||||
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||
|
||||
align 4
|
||||
@ -130,7 +50,7 @@ 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
|
||||
load_image_file 'font8x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
|
||||
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 бит
|
||||
@ -323,7 +243,15 @@ align 4
|
||||
but_zoom_p:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fadd dword[delt_sc]
|
||||
fadd dword[sc_delt]
|
||||
fcom dword[sc_max]
|
||||
fstsw ax
|
||||
sahf
|
||||
jbe @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_max]
|
||||
@@:
|
||||
fst dword[scale]
|
||||
mov word[NumberSymbolsAD],3
|
||||
fstp qword[Data_Double]
|
||||
@ -338,7 +266,15 @@ align 4
|
||||
but_zoom_m:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fsub dword[delt_sc]
|
||||
fsub dword[sc_delt]
|
||||
fcom dword[sc_min]
|
||||
fstsw ax
|
||||
sahf
|
||||
ja @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_min]
|
||||
@@:
|
||||
fst dword[scale]
|
||||
mov word[NumberSymbolsAD],3
|
||||
fstp qword[Data_Double]
|
||||
@ -395,8 +331,10 @@ texture dd 0 ;указатель на память с текстурой
|
||||
text_w dd 0
|
||||
text_h dd 0
|
||||
|
||||
scale dd 0.95
|
||||
delt_sc dd 0.05
|
||||
scale dd 0.95 ;начальный масштаб
|
||||
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||
sc_min dd 0.1 ;минимальный масштаб
|
||||
sc_max dd 5.0 ;максимальный масштаб
|
||||
angle_z dd 0.0
|
||||
angle_x dd 90.0
|
||||
angle_y dd 0.0
|
||||
@ -571,17 +509,17 @@ buf_ogl:
|
||||
align 4
|
||||
buf_1:
|
||||
dd 0 ;указатель на буфер изображения
|
||||
dw 25,25 ;+4 left,top
|
||||
dd 128,144 ;+8 w,h
|
||||
dd 0,24 ;+16 color,bit in pixel
|
||||
dd 0 ;+4 left,top
|
||||
.w: dd 0
|
||||
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||
|
||||
align 4
|
||||
l_libs_start:
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, file_name, system_dir_0,\
|
||||
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,\
|
||||
lib_1 l_libs lib_name_1, cur_dir_path, file_name, 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, library_path, system_dir_2,\
|
||||
lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
|
||||
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
||||
l_libs_end:
|
||||
|
||||
@ -593,6 +531,5 @@ align 16
|
||||
rb 4096
|
||||
stacktop:
|
||||
cur_dir_path rb 4096
|
||||
library_path rb 4096
|
||||
file_name rb 4096
|
||||
mem:
|
||||
|
@ -1,101 +1,21 @@
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01'
|
||||
dd 1,start,i_end
|
||||
dd mem,stacktop
|
||||
dd 0,cur_dir_path
|
||||
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||
|
||||
include '../../../../../proc32.inc'
|
||||
include '../../../../../macros.inc'
|
||||
include '../../../../../KOSfuncs.inc'
|
||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
||||
include '../../../../../dll.inc'
|
||||
include '../../../../../load_img.inc'
|
||||
include '../opengl_const.inc'
|
||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||
|
||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
|
||||
struct FileInfoBlock
|
||||
Function dd ?
|
||||
Position dd ?
|
||||
Flags dd ?
|
||||
Count dd ?
|
||||
Buffer dd ?
|
||||
db ?
|
||||
FileName dd ?
|
||||
ends
|
||||
|
||||
align 4
|
||||
open_b rb 560
|
||||
image_data_toolbar dd 0
|
||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
||||
|
||||
;макрос для загрузки изображений
|
||||
; 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], 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
|
||||
;определяем вид изображения и пишем его параметры
|
||||
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 ;удаляем временный буфер с параметрами изображения
|
||||
@@:
|
||||
}
|
||||
|
||||
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||
|
||||
align 4
|
||||
@ -131,7 +51,7 @@ 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
|
||||
load_image_file 'font8x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
|
||||
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 бит
|
||||
@ -294,7 +214,15 @@ align 4
|
||||
but_zoom_p:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fadd dword[delt_sc]
|
||||
fadd dword[sc_delt]
|
||||
fcom dword[sc_max]
|
||||
fstsw ax
|
||||
sahf
|
||||
jbe @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_max]
|
||||
@@:
|
||||
fst dword[scale]
|
||||
mov word[NumberSymbolsAD],3
|
||||
fstp qword[Data_Double]
|
||||
@ -309,7 +237,15 @@ align 4
|
||||
but_zoom_m:
|
||||
finit
|
||||
fld dword[scale]
|
||||
fsub dword[delt_sc]
|
||||
fsub dword[sc_delt]
|
||||
fcom dword[sc_min]
|
||||
fstsw ax
|
||||
sahf
|
||||
ja @f
|
||||
ffree st0
|
||||
fincstp
|
||||
fld dword[sc_min]
|
||||
@@:
|
||||
fst dword[scale]
|
||||
mov word[NumberSymbolsAD],3
|
||||
fstp qword[Data_Double]
|
||||
@ -320,6 +256,7 @@ but_zoom_m:
|
||||
stdcall [kosglSwapBuffers]
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
||||
align 4
|
||||
@ -351,8 +288,10 @@ texture dd 0 ;указатель на память с текстурой
|
||||
text_w dd 0
|
||||
text_h dd 0
|
||||
|
||||
scale dd 1.5
|
||||
delt_sc dd 0.05
|
||||
scale dd 1.5 ;начальный масштаб
|
||||
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||
sc_min dd 0.95 ;минимальный масштаб
|
||||
sc_max dd 2.5 ;максимальный масштаб
|
||||
angle_z dd 0.0
|
||||
angle_x dd 90.0
|
||||
angle_y dd 0.0
|
||||
@ -527,17 +466,17 @@ buf_ogl:
|
||||
align 4
|
||||
buf_1:
|
||||
dd 0 ;указатель на буфер изображения
|
||||
dw 25,25 ;+4 left,top
|
||||
dd 128,144 ;+8 w,h
|
||||
dd 0,24 ;+16 color,bit in pixel
|
||||
dd 0 ;+4 left,top
|
||||
.w: dd 0
|
||||
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||
|
||||
align 4
|
||||
l_libs_start:
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
|
||||
lib_0 l_libs lib_name_0, cur_dir_path, file_name, system_dir_0,\
|
||||
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,\
|
||||
lib_1 l_libs lib_name_1, cur_dir_path, file_name, 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, library_path, system_dir_2,\
|
||||
lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
|
||||
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
||||
l_libs_end:
|
||||
|
||||
@ -549,6 +488,5 @@ align 16
|
||||
rb 4096
|
||||
stacktop:
|
||||
cur_dir_path rb 4096
|
||||
library_path rb 4096
|
||||
file_name rb 4096
|
||||
mem:
|
||||
|
95
programs/load_img.inc
Normal file
95
programs/load_img.inc
Normal file
@ -0,0 +1,95 @@
|
||||
;
|
||||
; Макрос для загрузки изображений чрез функции библиотеки libimg.
|
||||
; Действия которые делает макрос load_image_file:
|
||||
;
|
||||
; Проверяет размер полученного файла с изображением.
|
||||
; Выделяет под него память и загружает туда файл.
|
||||
; Определяет размер памяти необходимой для распаковки изображения.
|
||||
; Перевыделяет память, и распаковывает изображение из форматов jpg, png, ...
|
||||
; в формат rgb который можно выводить на экран через сист. функцию.
|
||||
; При необходимости можно также получить размеры открываемого изображения для
|
||||
; их дальнейшего использования в программе.
|
||||
;
|
||||
; В использующей программе должна быть подключена библиотека libimg,
|
||||
; объявлена переменная file_name размером около 4096 байт,
|
||||
; а также структура run_file_70 типа FileInfoBlock.
|
||||
|
||||
; подключение некоторых необходимых файлов:
|
||||
include 'dll.inc'
|
||||
include 'develop/libraries/box_lib/load_lib.mac'
|
||||
include 'libio.inc'
|
||||
|
||||
align 4
|
||||
open_b rb 560
|
||||
|
||||
; path - может быть переменной или строковым параметром
|
||||
; buf - переменная куда будет записан указатель на изображение в формате rgb
|
||||
; img_w, img_h - переменные куда будут записаны размеры открываемого
|
||||
; изображения, не обязательные параметры
|
||||
; bytes_p_p - сколько байт памяти брать на пиксель, не обязательный параметр
|
||||
; если не указан берется 3. Минимальное значение должно быть не меньше 3.
|
||||
macro load_image_file path, buf, img_w, img_h, bytes_p_p
|
||||
{
|
||||
local .end_open
|
||||
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 .end_open
|
||||
|
||||
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], 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 .end_open
|
||||
;определяем вид изображения и пишем его параметры
|
||||
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
|
||||
if bytes_p_p eq
|
||||
imul ecx,3 ;need for r,g,b
|
||||
else
|
||||
imul ecx,bytes_p_p
|
||||
end if
|
||||
stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера
|
||||
mov [buf],eax
|
||||
stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb
|
||||
stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
|
||||
.end_open:
|
||||
}
|
Loading…
Reference in New Issue
Block a user