forked from KolibriOS/kolibrios
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
|
pushad
|
||||||
mcall SF_REDRAW,SSF_BEGIN_DRAW
|
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]
|
stdcall [kosglSwapBuffers]
|
||||||
|
|
||||||
;Title
|
;Title
|
||||||
mcall SF_DRAW_TEXT,(300 shl 16)+4,0x808080,fps, fps.end-fps
|
mcall SF_DRAW_TEXT,(300 shl 16)+4,0xc0c0c0,fps, fps.end-fps
|
||||||
mcall SF_DRAW_TEXT,(8 shl 16)+4,0x808080,title3,title3.end-title3
|
mcall SF_DRAW_TEXT,(8 shl 16)+4,0xc0c0c0,title3,title3.end-title3
|
||||||
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0x808080,title2,title2.end-title2
|
;mcall SF_DRAW_TEXT,(180 shl 16)+4,0xc0c0c0,title2,title2.end-title2
|
||||||
|
|
||||||
mcall SF_REDRAW,SSF_END_DRAW
|
mcall SF_REDRAW,SSF_END_DRAW
|
||||||
popad
|
popad
|
||||||
@ -210,7 +210,7 @@ title2: db 'F full screen'
|
|||||||
.end: db 0
|
.end: db 0
|
||||||
title3: db 'ESC - exit'
|
title3: db 'ESC - exit'
|
||||||
.end: db 0
|
.end: db 0
|
||||||
fps: db 'FPS:'
|
fps: db 'FPS:'
|
||||||
.end: db 0
|
.end: db 0
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
@ -1,101 +1,21 @@
|
|||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
dd 1,start,i_end
|
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||||
dd mem,stacktop
|
|
||||||
dd 0,cur_dir_path
|
|
||||||
|
|
||||||
include '../../../../../proc32.inc'
|
include '../../../../../proc32.inc'
|
||||||
include '../../../../../macros.inc'
|
include '../../../../../macros.inc'
|
||||||
include '../../../../../KOSfuncs.inc'
|
include '../../../../../KOSfuncs.inc'
|
||||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
include '../../../../../load_img.inc'
|
||||||
include '../../../../../dll.inc'
|
|
||||||
include '../opengl_const.inc'
|
include '../opengl_const.inc'
|
||||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@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
|
align 4
|
||||||
open_b rb 560
|
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
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'
|
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -129,7 +49,7 @@ load_libraries l_libs_start,l_libs_end
|
|||||||
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
||||||
mov dword[buf_ogl],eax
|
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 [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
|
||||||
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
||||||
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
||||||
@ -317,7 +237,15 @@ align 4
|
|||||||
but_zoom_p:
|
but_zoom_p:
|
||||||
finit
|
finit
|
||||||
fld dword[scale]
|
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]
|
fst dword[scale]
|
||||||
mov word[NumberSymbolsAD],3
|
mov word[NumberSymbolsAD],3
|
||||||
fstp qword[Data_Double]
|
fstp qword[Data_Double]
|
||||||
@ -332,7 +260,15 @@ align 4
|
|||||||
but_zoom_m:
|
but_zoom_m:
|
||||||
finit
|
finit
|
||||||
fld dword[scale]
|
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]
|
fst dword[scale]
|
||||||
mov word[NumberSymbolsAD],3
|
mov word[NumberSymbolsAD],3
|
||||||
fstp qword[Data_Double]
|
fstp qword[Data_Double]
|
||||||
@ -399,8 +335,10 @@ ret
|
|||||||
|
|
||||||
qObj dd 0
|
qObj dd 0
|
||||||
|
|
||||||
scale dd 0.4
|
scale dd 0.4 ;начальный масштаб
|
||||||
delt_sc dd 0.05
|
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||||
|
sc_min dd 0.1 ;минимальный масштаб
|
||||||
|
sc_max dd 1.1 ;максимальный масштаб
|
||||||
angle_z dd 0.0
|
angle_z dd 0.0
|
||||||
angle_y dd 0.0
|
angle_y dd 0.0
|
||||||
delt_size dd 3.0
|
delt_size dd 3.0
|
||||||
@ -576,15 +514,15 @@ buf_ogl:
|
|||||||
align 4
|
align 4
|
||||||
buf_1:
|
buf_1:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 25,25 ;+4 left,top
|
dd 0 ;+4 left,top
|
||||||
dd 128,144 ;+8 w,h
|
.w: dd 0
|
||||||
dd 0,24 ;+16 color,bit in pixel
|
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
l_libs_start:
|
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
|
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
|
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, file_name, system_dir_2,\
|
||||||
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
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
|
rb 4096
|
||||||
stacktop:
|
stacktop:
|
||||||
cur_dir_path rb 4096
|
cur_dir_path rb 4096
|
||||||
library_path rb 4096
|
|
||||||
file_name rb 4096
|
file_name rb 4096
|
||||||
mem:
|
mem:
|
||||||
|
@ -1,101 +1,21 @@
|
|||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
dd 1,start,i_end
|
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||||
dd mem,stacktop
|
|
||||||
dd 0,cur_dir_path
|
|
||||||
|
|
||||||
include '../../../../../proc32.inc'
|
include '../../../../../proc32.inc'
|
||||||
include '../../../../../macros.inc'
|
include '../../../../../macros.inc'
|
||||||
include '../../../../../KOSfuncs.inc'
|
include '../../../../../KOSfuncs.inc'
|
||||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
include '../../../../../load_img.inc'
|
||||||
include '../../../../../dll.inc'
|
|
||||||
include '../opengl_const.inc'
|
include '../opengl_const.inc'
|
||||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@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
|
align 4
|
||||||
open_b rb 560
|
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
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'
|
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -130,7 +50,7 @@ load_libraries l_libs_start,l_libs_end
|
|||||||
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
||||||
mov dword[buf_ogl],eax
|
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 [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
|
||||||
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
||||||
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
||||||
@ -181,10 +101,16 @@ draw_window:
|
|||||||
mov esi,[sc.work_button]
|
mov esi,[sc.work_button]
|
||||||
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;сферы
|
mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;сферы
|
||||||
mcall ,(36 shl 16)+19,,4+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 ;сферы
|
mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+5 ;сферы
|
||||||
add ebx,2*IMAGE_TOOLBAR_ICON_SIZE
|
add ebx,2*IMAGE_TOOLBAR_ICON_SIZE
|
||||||
mcall ,,,(35 shl 16)+5 ;куб
|
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]
|
stdcall [kosglSwapBuffers]
|
||||||
mcall SF_REDRAW,SSF_END_DRAW
|
mcall SF_REDRAW,SSF_END_DRAW
|
||||||
@ -200,31 +126,13 @@ key:
|
|||||||
|
|
||||||
cmp ah,61 ;+
|
cmp ah,61 ;+
|
||||||
jne @f
|
jne @f
|
||||||
finit
|
call but_zoom_p
|
||||||
fld dword[scale]
|
jmp still
|
||||||
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]
|
|
||||||
@@:
|
@@:
|
||||||
cmp ah,45 ;-
|
cmp ah,45 ;-
|
||||||
jne @f
|
jne @f
|
||||||
finit
|
call but_zoom_m
|
||||||
fld dword[scale]
|
jmp still
|
||||||
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]
|
|
||||||
@@:
|
@@:
|
||||||
cmp ah,178 ;Up
|
cmp ah,178 ;Up
|
||||||
jne @f
|
jne @f
|
||||||
@ -298,6 +206,16 @@ button:
|
|||||||
call but_dr_1
|
call but_dr_1
|
||||||
jmp still
|
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
|
cmp ah,1
|
||||||
jne still
|
jne still
|
||||||
.exit:
|
.exit:
|
||||||
@ -319,6 +237,52 @@ but_dr_1:
|
|||||||
stdcall [kosglSwapBuffers]
|
stdcall [kosglSwapBuffers]
|
||||||
ret
|
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
|
align 4
|
||||||
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
||||||
align 4
|
align 4
|
||||||
@ -430,8 +394,10 @@ texture dd 0 ;указатель на память с текстурой
|
|||||||
text_w dd 0
|
text_w dd 0
|
||||||
text_h dd 0
|
text_h dd 0
|
||||||
|
|
||||||
scale dd 0.4
|
scale dd 0.4 ;начальный масштаб
|
||||||
delt_sc dd 0.05
|
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||||
|
sc_min dd 0.1 ;минимальный масштаб
|
||||||
|
sc_max dd 1.1 ;максимальный масштаб
|
||||||
angle_z dd 0.0
|
angle_z dd 0.0
|
||||||
angle_y dd 0.0
|
angle_y dd 0.0
|
||||||
delt_size dd 3.0
|
delt_size dd 3.0
|
||||||
@ -607,15 +573,15 @@ buf_ogl:
|
|||||||
align 4
|
align 4
|
||||||
buf_1:
|
buf_1:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 25,25 ;+4 left,top
|
dd 0 ;+4 left,top
|
||||||
dd 128,144 ;+8 w,h
|
.w: dd 0
|
||||||
dd 0,24 ;+16 color,bit in pixel
|
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
l_libs_start:
|
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
|
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
|
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, file_name, system_dir_2,\
|
||||||
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
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
|
rb 4096
|
||||||
stacktop:
|
stacktop:
|
||||||
cur_dir_path rb 4096
|
cur_dir_path rb 4096
|
||||||
library_path rb 4096
|
|
||||||
file_name rb 4096
|
file_name rb 4096
|
||||||
mem:
|
mem:
|
||||||
|
@ -1,101 +1,21 @@
|
|||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
dd 1,start,i_end
|
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||||
dd mem,stacktop
|
|
||||||
dd 0,cur_dir_path
|
|
||||||
|
|
||||||
include '../../../../../proc32.inc'
|
include '../../../../../proc32.inc'
|
||||||
include '../../../../../macros.inc'
|
include '../../../../../macros.inc'
|
||||||
include '../../../../../KOSfuncs.inc'
|
include '../../../../../KOSfuncs.inc'
|
||||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
include '../../../../../load_img.inc'
|
||||||
include '../../../../../dll.inc'
|
|
||||||
include '../opengl_const.inc'
|
include '../opengl_const.inc'
|
||||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@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
|
align 4
|
||||||
open_b rb 560
|
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
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'
|
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -130,7 +50,7 @@ load_libraries l_libs_start,l_libs_end
|
|||||||
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
||||||
mov dword[buf_ogl],eax
|
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 [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
|
||||||
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
||||||
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
||||||
@ -323,7 +243,15 @@ align 4
|
|||||||
but_zoom_p:
|
but_zoom_p:
|
||||||
finit
|
finit
|
||||||
fld dword[scale]
|
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]
|
fst dword[scale]
|
||||||
mov word[NumberSymbolsAD],3
|
mov word[NumberSymbolsAD],3
|
||||||
fstp qword[Data_Double]
|
fstp qword[Data_Double]
|
||||||
@ -338,7 +266,15 @@ align 4
|
|||||||
but_zoom_m:
|
but_zoom_m:
|
||||||
finit
|
finit
|
||||||
fld dword[scale]
|
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]
|
fst dword[scale]
|
||||||
mov word[NumberSymbolsAD],3
|
mov word[NumberSymbolsAD],3
|
||||||
fstp qword[Data_Double]
|
fstp qword[Data_Double]
|
||||||
@ -395,8 +331,10 @@ texture dd 0 ;указатель на память с текстурой
|
|||||||
text_w dd 0
|
text_w dd 0
|
||||||
text_h dd 0
|
text_h dd 0
|
||||||
|
|
||||||
scale dd 0.95
|
scale dd 0.95 ;начальный масштаб
|
||||||
delt_sc dd 0.05
|
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||||
|
sc_min dd 0.1 ;минимальный масштаб
|
||||||
|
sc_max dd 5.0 ;максимальный масштаб
|
||||||
angle_z dd 0.0
|
angle_z dd 0.0
|
||||||
angle_x dd 90.0
|
angle_x dd 90.0
|
||||||
angle_y dd 0.0
|
angle_y dd 0.0
|
||||||
@ -571,17 +509,17 @@ buf_ogl:
|
|||||||
align 4
|
align 4
|
||||||
buf_1:
|
buf_1:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 25,25 ;+4 left,top
|
dd 0 ;+4 left,top
|
||||||
dd 128,144 ;+8 w,h
|
.w: dd 0
|
||||||
dd 0,24 ;+16 color,bit in pixel
|
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
l_libs_start:
|
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
|
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
|
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
|
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
||||||
l_libs_end:
|
l_libs_end:
|
||||||
|
|
||||||
@ -593,6 +531,5 @@ align 16
|
|||||||
rb 4096
|
rb 4096
|
||||||
stacktop:
|
stacktop:
|
||||||
cur_dir_path rb 4096
|
cur_dir_path rb 4096
|
||||||
library_path rb 4096
|
|
||||||
file_name rb 4096
|
file_name rb 4096
|
||||||
mem:
|
mem:
|
||||||
|
@ -1,101 +1,21 @@
|
|||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
dd 1,start,i_end
|
dd 1,start,i_end,mem,stacktop,0,cur_dir_path
|
||||||
dd mem,stacktop
|
|
||||||
dd 0,cur_dir_path
|
|
||||||
|
|
||||||
include '../../../../../proc32.inc'
|
include '../../../../../proc32.inc'
|
||||||
include '../../../../../macros.inc'
|
include '../../../../../macros.inc'
|
||||||
include '../../../../../KOSfuncs.inc'
|
include '../../../../../KOSfuncs.inc'
|
||||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
include '../../../../../load_img.inc'
|
||||||
include '../../../../../dll.inc'
|
|
||||||
include '../opengl_const.inc'
|
include '../opengl_const.inc'
|
||||||
include '../../../../../develop/info3ds/info_fun_float.inc'
|
include '../../../../../develop/info3ds/info_fun_float.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@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
|
align 4
|
||||||
open_b rb 560
|
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
|
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'
|
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -131,7 +51,7 @@ load_libraries l_libs_start,l_libs_end
|
|||||||
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
|
||||||
mov dword[buf_ogl],eax
|
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 [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
|
||||||
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
stdcall mem.Free,[image_data_toolbar] ;освобождаем память
|
||||||
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
|
||||||
@ -294,7 +214,15 @@ align 4
|
|||||||
but_zoom_p:
|
but_zoom_p:
|
||||||
finit
|
finit
|
||||||
fld dword[scale]
|
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]
|
fst dword[scale]
|
||||||
mov word[NumberSymbolsAD],3
|
mov word[NumberSymbolsAD],3
|
||||||
fstp qword[Data_Double]
|
fstp qword[Data_Double]
|
||||||
@ -309,7 +237,15 @@ align 4
|
|||||||
but_zoom_m:
|
but_zoom_m:
|
||||||
finit
|
finit
|
||||||
fld dword[scale]
|
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]
|
fst dword[scale]
|
||||||
mov word[NumberSymbolsAD],3
|
mov word[NumberSymbolsAD],3
|
||||||
fstp qword[Data_Double]
|
fstp qword[Data_Double]
|
||||||
@ -320,6 +256,7 @@ but_zoom_m:
|
|||||||
stdcall [kosglSwapBuffers]
|
stdcall [kosglSwapBuffers]
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
|
||||||
align 4
|
align 4
|
||||||
@ -351,8 +288,10 @@ texture dd 0 ;указатель на память с текстурой
|
|||||||
text_w dd 0
|
text_w dd 0
|
||||||
text_h dd 0
|
text_h dd 0
|
||||||
|
|
||||||
scale dd 1.5
|
scale dd 1.5 ;начальный масштаб
|
||||||
delt_sc dd 0.05
|
sc_delt dd 0.05 ;изменение масштаба при нажатии
|
||||||
|
sc_min dd 0.95 ;минимальный масштаб
|
||||||
|
sc_max dd 2.5 ;максимальный масштаб
|
||||||
angle_z dd 0.0
|
angle_z dd 0.0
|
||||||
angle_x dd 90.0
|
angle_x dd 90.0
|
||||||
angle_y dd 0.0
|
angle_y dd 0.0
|
||||||
@ -527,17 +466,17 @@ buf_ogl:
|
|||||||
align 4
|
align 4
|
||||||
buf_1:
|
buf_1:
|
||||||
dd 0 ;указатель на буфер изображения
|
dd 0 ;указатель на буфер изображения
|
||||||
dw 25,25 ;+4 left,top
|
dd 0 ;+4 left,top
|
||||||
dd 128,144 ;+8 w,h
|
.w: dd 0
|
||||||
dd 0,24 ;+16 color,bit in pixel
|
.h: dd 0,0,24 ;+16 color,bit in pixel
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
l_libs_start:
|
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
|
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
|
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
|
err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
|
||||||
l_libs_end:
|
l_libs_end:
|
||||||
|
|
||||||
@ -549,6 +488,5 @@ align 16
|
|||||||
rb 4096
|
rb 4096
|
||||||
stacktop:
|
stacktop:
|
||||||
cur_dir_path rb 4096
|
cur_dir_path rb 4096
|
||||||
library_path rb 4096
|
|
||||||
file_name rb 4096
|
file_name rb 4096
|
||||||
mem:
|
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