forked from KolibriOS/kolibrios
fix specbuf.asm,
add fill styles in example quadric objects git-svn-id: svn://kolibrios.org@6100 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
cabcfc4bb3
commit
2cff28512d
@ -7,6 +7,7 @@ use32
|
|||||||
|
|
||||||
include '../../../../../proc32.inc'
|
include '../../../../../proc32.inc'
|
||||||
include '../../../../../macros.inc'
|
include '../../../../../macros.inc'
|
||||||
|
include '../../../../../KOSfuncs.inc'
|
||||||
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
include '../../../../../develop/libraries/box_lib/load_lib.mac'
|
||||||
include '../../../../../dll.inc'
|
include '../../../../../dll.inc'
|
||||||
include '../opengl_const.inc'
|
include '../opengl_const.inc'
|
||||||
@ -27,6 +28,8 @@ ends
|
|||||||
image_data dd 0 ;указатель на временную память, нужен для преобразования изображения
|
image_data dd 0 ;указатель на временную память, нужен для преобразования изображения
|
||||||
image_data_toolbar dd 0
|
image_data_toolbar dd 0
|
||||||
IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением
|
IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением
|
||||||
|
IMAGE_TOOLBAR_ICON_SIZE equ 256*3
|
||||||
|
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*3+54
|
||||||
|
|
||||||
macro load_image_file path,buf,size { ;макрос для загрузки изображений
|
macro load_image_file path,buf,size { ;макрос для загрузки изображений
|
||||||
;path - может быть переменной или строковым параметром
|
;path - может быть переменной или строковым параметром
|
||||||
@ -43,14 +46,14 @@ macro load_image_file path,buf,size { ;макрос для загрузки из
|
|||||||
end if
|
end if
|
||||||
stdcall mem.Alloc, dword size ;выделяем память для изображения
|
stdcall mem.Alloc, dword size ;выделяем память для изображения
|
||||||
mov [buf],eax
|
mov [buf],eax
|
||||||
mov [run_file_70.Function], 0
|
mov [run_file_70.Function], SSF_READ_FILE
|
||||||
mov [run_file_70.Position], 0
|
mov [run_file_70.Position], 0
|
||||||
mov [run_file_70.Flags], 0
|
mov [run_file_70.Flags], 0
|
||||||
mov [run_file_70.Count], dword size
|
mov [run_file_70.Count], dword size
|
||||||
mov [run_file_70.Buffer], eax
|
mov [run_file_70.Buffer], eax
|
||||||
mov byte[run_file_70+20], 0
|
mov byte[run_file_70+20], 0
|
||||||
mov [run_file_70.FileName], file_name
|
mov [run_file_70.FileName], file_name
|
||||||
mcall 70,run_file_70 ;загружаем файл изображения
|
mcall SF_FILE,run_file_70 ;загружаем файл изображения
|
||||||
cmp ebx,0xffffffff
|
cmp ebx,0xffffffff
|
||||||
je @f
|
je @f
|
||||||
;определяем вид изображения и переводим его во временный буфер image_data
|
;определяем вид изображения и переводим его во временный буфер image_data
|
||||||
@ -73,15 +76,16 @@ load_libraries l_libs_start,l_libs_end
|
|||||||
.test_lib_open:
|
.test_lib_open:
|
||||||
cmp dword [ebp+ll_struc_size-4],0
|
cmp dword [ebp+ll_struc_size-4],0
|
||||||
jz @f
|
jz @f
|
||||||
mcall -1 ;exit not correct
|
mcall SF_TERMINATE_PROCESS
|
||||||
@@:
|
@@:
|
||||||
add ebp,ll_struc_size
|
add ebp,ll_struc_size
|
||||||
cmp ebp,l_libs_end
|
cmp ebp,l_libs_end
|
||||||
jl .test_lib_open
|
jl .test_lib_open
|
||||||
|
|
||||||
mcall 40,0x27
|
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.sys_colors_new
|
||||||
|
mcall SF_SET_EVENTS_MASK,0x27
|
||||||
|
|
||||||
stdcall [kosglMakeCurrent], 10,10,[buf_ogl.w],[buf_ogl.h],ctx1
|
stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
|
||||||
stdcall [glEnable], GL_DEPTH_TEST
|
stdcall [glEnable], GL_DEPTH_TEST
|
||||||
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
|
||||||
stdcall [gluNewQuadric]
|
stdcall [gluNewQuadric]
|
||||||
@ -100,6 +104,8 @@ load_libraries l_libs_start,l_libs_end
|
|||||||
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 бит
|
||||||
stdcall [buf2d_convert_text_matrix], buf_1
|
stdcall [buf2d_convert_text_matrix], buf_1
|
||||||
|
|
||||||
|
load_image_file 'toolb_1.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE
|
||||||
call draw_3d
|
call draw_3d
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -108,7 +114,7 @@ red_win:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
still:
|
still:
|
||||||
mcall 10
|
mcall SF_WAIT_EVENT
|
||||||
cmp al,1
|
cmp al,1
|
||||||
jz red_win
|
jz red_win
|
||||||
cmp al,2
|
cmp al,2
|
||||||
@ -120,19 +126,28 @@ still:
|
|||||||
align 4
|
align 4
|
||||||
draw_window:
|
draw_window:
|
||||||
pushad
|
pushad
|
||||||
mcall 12,1
|
mcall SF_REDRAW,SSF_BEGIN_DRAW
|
||||||
|
mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
|
||||||
|
|
||||||
|
mov esi,[sc.work_button]
|
||||||
|
mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(5 shl 16)+20,3 ;вершины вкл.
|
||||||
|
mcall ,(30 shl 16)+20,,4 ;каркасные грани вкл.
|
||||||
|
mcall ,(55 shl 16)+20,,5 ;сплошные грани вкл.
|
||||||
|
|
||||||
|
mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;вершины вкл.
|
||||||
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
|
mcall ,,,(32 shl 16)+7 ;каркасные грани вкл.
|
||||||
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE
|
||||||
|
mcall ,,,(57 shl 16)+7 ;сплошные грани вкл.
|
||||||
|
|
||||||
mov edx,0x33ffffff ;0x73ffffff
|
|
||||||
mcall 0,(50 shl 16)+430,(30 shl 16)+400,,,caption
|
|
||||||
stdcall [kosglSwapBuffers]
|
stdcall [kosglSwapBuffers]
|
||||||
|
mcall SF_REDRAW,SSF_END_DRAW
|
||||||
mcall 12,2
|
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
key:
|
key:
|
||||||
mcall 2
|
mcall SF_GET_KEY
|
||||||
|
|
||||||
cmp ah,27 ;Esc
|
cmp ah,27 ;Esc
|
||||||
je button.exit
|
je button.exit
|
||||||
@ -226,13 +241,49 @@ key:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
button:
|
button:
|
||||||
mcall 17
|
mcall SF_GET_BUTTON
|
||||||
|
cmp ah,3
|
||||||
|
jne @f
|
||||||
|
call but_st_point
|
||||||
|
jmp still
|
||||||
|
@@:
|
||||||
|
cmp ah,4
|
||||||
|
jne @f
|
||||||
|
call but_st_line
|
||||||
|
jmp still
|
||||||
|
@@:
|
||||||
|
cmp ah,5
|
||||||
|
jne @f
|
||||||
|
call but_st_face
|
||||||
|
jmp still
|
||||||
|
@@:
|
||||||
cmp ah,1
|
cmp ah,1
|
||||||
jne still
|
jne still
|
||||||
.exit:
|
.exit:
|
||||||
stdcall [gluDeleteQuadric], [qObj]
|
stdcall [gluDeleteQuadric], [qObj]
|
||||||
;stdcall mem.Free,[image_data_toolbar]
|
stdcall mem.Free,[image_data_toolbar]
|
||||||
mcall -1
|
mcall SF_TERMINATE_PROCESS
|
||||||
|
|
||||||
|
align 4
|
||||||
|
but_st_point:
|
||||||
|
stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT
|
||||||
|
call draw_3d
|
||||||
|
stdcall [kosglSwapBuffers]
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
but_st_line:
|
||||||
|
stdcall [gluQuadricDrawStyle], [qObj],GLU_LINE
|
||||||
|
call draw_3d
|
||||||
|
stdcall [kosglSwapBuffers]
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
but_st_face:
|
||||||
|
stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL
|
||||||
|
call draw_3d
|
||||||
|
stdcall [kosglSwapBuffers]
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -484,6 +535,8 @@ l_libs_end:
|
|||||||
align 4
|
align 4
|
||||||
i_end:
|
i_end:
|
||||||
run_file_70 FileInfoBlock
|
run_file_70 FileInfoBlock
|
||||||
|
sc system_colors
|
||||||
|
rb sizeof.sys_colors_new-sizeof.system_colors
|
||||||
align 16
|
align 16
|
||||||
rb 4096
|
rb 4096
|
||||||
stacktop:
|
stacktop:
|
||||||
|
BIN
programs/develop/libraries/TinyGL/asm_fork/examples/toolb_1.png
Normal file
BIN
programs/develop/libraries/TinyGL/asm_fork/examples/toolb_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 374 B |
@ -1,3 +1,6 @@
|
|||||||
|
;
|
||||||
|
; функции для вычисления зеркального цвета (блики)
|
||||||
|
;
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc calc_buf uses ebx ecx, buf:dword, shininess:dword
|
proc calc_buf uses ebx ecx, buf:dword, shininess:dword
|
||||||
@ -18,8 +21,8 @@ align 4
|
|||||||
cmp ecx,SPECULAR_BUFFER_SIZE
|
cmp ecx,SPECULAR_BUFFER_SIZE
|
||||||
jg @f
|
jg @f
|
||||||
;Вычисляем x^y
|
;Вычисляем x^y
|
||||||
fld dword[shininess]
|
fld dword[val] ;сначала берем y
|
||||||
fld dword[val]
|
fld dword[shininess] ;а потом x
|
||||||
fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x):
|
fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x):
|
||||||
;Теперь считаем 2**z:
|
;Теперь считаем 2**z:
|
||||||
fld st0 ;Создаем еще одну копию z
|
fld st0 ;Создаем еще одну копию z
|
||||||
@ -80,12 +83,14 @@ endl
|
|||||||
cmp dword[oldest],0 ;if (oldest == NULL || context.specbuf_num_buffers < MAX_SPECULAR_BUFFERS)
|
cmp dword[oldest],0 ;if (oldest == NULL || context.specbuf_num_buffers < MAX_SPECULAR_BUFFERS)
|
||||||
je @f
|
je @f
|
||||||
cmp dword[edx+offs_cont_specbuf_num_buffers],MAX_SPECULAR_BUFFERS
|
cmp dword[edx+offs_cont_specbuf_num_buffers],MAX_SPECULAR_BUFFERS
|
||||||
jl @f
|
jge .end_1
|
||||||
jmp .end_1
|
|
||||||
@@:
|
@@:
|
||||||
; create new buffer
|
; create new buffer
|
||||||
stdcall gl_malloc, sizeof.GLSpecBuf
|
stdcall gl_malloc, sizeof.GLSpecBuf
|
||||||
;if (!eax) gl_fatal_error("could not allocate specular buffer")
|
or eax,eax
|
||||||
|
jnz @f
|
||||||
|
;gl_fatal_error("could not allocate specular buffer")
|
||||||
|
@@:
|
||||||
inc dword[edx+offs_cont_specbuf_num_buffers]
|
inc dword[edx+offs_cont_specbuf_num_buffers]
|
||||||
mov ecx,[edx+offs_cont_specbuf_first]
|
mov ecx,[edx+offs_cont_specbuf_first]
|
||||||
mov [eax+offs_spec_next],ecx
|
mov [eax+offs_spec_next],ecx
|
||||||
|
Loading…
Reference in New Issue
Block a user