Fork for library tinygl, assembly version.
Can draw lines, and do some matrix operations. git-svn-id: svn://kolibrios.org@5153 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
204
programs/develop/libraries/TinyGL/asm_fork/tinygl.asm
Normal file
204
programs/develop/libraries/TinyGL/asm_fork/tinygl.asm
Normal file
@@ -0,0 +1,204 @@
|
||||
format MS COFF
|
||||
public EXPORTS
|
||||
section '.flat' code readable align 16
|
||||
|
||||
include '../../../../../programs/proc32.inc'
|
||||
include '../../../../../programs/macros.inc'
|
||||
|
||||
DEBUG equ 0
|
||||
|
||||
include 'zgl.inc'
|
||||
include 'zmath.asm'
|
||||
include 'clip.asm'
|
||||
include 'vertex.asm'
|
||||
include 'api.asm'
|
||||
include 'list.asm'
|
||||
include 'init.asm'
|
||||
include 'matrix.asm'
|
||||
include 'texture.asm'
|
||||
include 'misc.asm'
|
||||
include 'clear.asm'
|
||||
include 'light.asm'
|
||||
include 'select.asm'
|
||||
;include 'get.asm'
|
||||
;include 'error.asm'
|
||||
include 'zbuffer.asm'
|
||||
include 'zline.asm'
|
||||
;include 'zdither.asm'
|
||||
include 'ztriangle.asm'
|
||||
;include 'image_util.asm'
|
||||
;include 'msghandling.asm'
|
||||
include 'arrays.asm'
|
||||
|
||||
include 'kosgl.asm'
|
||||
|
||||
if DEBUG
|
||||
include 'info_fun_float.inc'
|
||||
end if
|
||||
|
||||
; ***
|
||||
glVertex2d: ;(double ,double)
|
||||
glVertex2fv: ;(float *)
|
||||
glVertex2dv: ;(double *)
|
||||
glVertex3d: ;(double ,double ,double)
|
||||
glVertex3dv: ;(double *)
|
||||
glVertex4d: ;(double ,double ,double, double )
|
||||
glVertex4fv: ;(float *)
|
||||
glVertex4dv: ;(double *)
|
||||
glColor3d: ;(double ,double ,double)
|
||||
glColor3dv: ;(double *)
|
||||
glColor4d: ;(double ,double ,double, double )
|
||||
glColor4dv: ;(double *)
|
||||
glNormal3d: ;(double ,double ,double)
|
||||
glNormal3dv: ;(double *)
|
||||
glTexCoord1f: ;(float)
|
||||
glTexCoord1d: ;(double)
|
||||
glTexCoord1fv: ;(float *)
|
||||
glTexCoord1dv: ;(double *)
|
||||
glTexCoord2d: ;(double ,double)
|
||||
glTexCoord2dv: ;(double *)
|
||||
glTexCoord3f: ;(float ,float ,float)
|
||||
glTexCoord3d: ;(double ,double ,double)
|
||||
glTexCoord3fv: ;(float *)
|
||||
glTexCoord3dv: ;(double *)
|
||||
glTexCoord4d: ;(double ,double ,double, double )
|
||||
glTexCoord4fv: ;(float *)
|
||||
glTexCoord4dv: ;(double *)
|
||||
glGenLists: ;(int range)
|
||||
glNewList: ;(unsigned int list,int mode)
|
||||
glEndList: ;(void)
|
||||
glGenTextures: ;(int n, unsigned int *textures)
|
||||
glDeleteTextures: ;(int n, const unsigned int *textures)
|
||||
glGetIntegerv: ;(int pname,int *params)
|
||||
glGetFloatv: ;(int pname, float *v)
|
||||
|
||||
; ***
|
||||
glopLight:
|
||||
glopClear:
|
||||
glopCallList:
|
||||
|
||||
if DEBUG
|
||||
align 4
|
||||
txt_nl db 13,10,0
|
||||
txt_sp db ' ',0
|
||||
txt_zp_sp db ', ',0
|
||||
m_1 db '(1)',13,10,0
|
||||
m_2 db '(2)',13,10,0
|
||||
m_3 db '(3)',13,10,0
|
||||
m_4 db '(4)',13,10,0
|
||||
m_5 db '(5)',13,10,0
|
||||
|
||||
buf_param rb 80
|
||||
|
||||
align 4
|
||||
proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n:dword
|
||||
mov esi,dword[str2]
|
||||
mov ecx,dword[n]
|
||||
mov edi,dword[str1]
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
cld
|
||||
repne movsb
|
||||
mov byte[edi],0
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; eax - число
|
||||
; edi - буфер для строки
|
||||
; len - длинна буфера
|
||||
;output:
|
||||
align 4
|
||||
proc convert_int_to_str, len:dword
|
||||
pushad
|
||||
mov esi,[len]
|
||||
add esi,edi
|
||||
dec esi
|
||||
call .str
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
.str:
|
||||
mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
|
||||
;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
|
||||
cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
|
||||
jb @f
|
||||
xor edx,edx ;очистить edx
|
||||
div ecx ;разделить - остаток в edx
|
||||
push edx ;положить в стек
|
||||
;dec edi ;смещение необходимое для записи с конца строки
|
||||
call .str ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
|
||||
pop eax
|
||||
@@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
|
||||
cmp edi,esi
|
||||
jge @f
|
||||
or al,0x30 ;данная команда короче чем две выше
|
||||
stosb ;записать элемент из регистра al в ячеку памяти es:edi
|
||||
mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор
|
||||
@@:
|
||||
ret ;пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться
|
||||
end if
|
||||
|
||||
align 4
|
||||
f_kosgl_1 db 'kosglMakeCurrent',0
|
||||
err_0 db 'Error while initializing Z buffer',13,10,0
|
||||
f_zb_opn db ' ZB_open',0
|
||||
err_1 db 'gl_malloc(sizeof.ZBuffer)==0',13,10,0
|
||||
err_2 db 'gl_malloc(xsize*ysize*4)==0',13,10,0
|
||||
err_3 db 'bit mode not correct',13,10,0
|
||||
f_vp db ' glViewport',0
|
||||
err_4 db 'error while resizing display',13,10,0
|
||||
err_5 db 'size too small',13,10,0
|
||||
f_clipcode db ' gl_clipcode',0
|
||||
f_ttv db ' gl_transform_to_viewport',0
|
||||
f_vt db ' gl_vertex_transform',0
|
||||
f_ev db ' gl_eval_viewport',0
|
||||
f_zbz db ' ZB_line_z',0
|
||||
f_zb db ' ZB_line',0
|
||||
f_cl1 db ' ClipLine1',0
|
||||
f_m4m db 'gl_M4_Mul',0
|
||||
f_m4ml db 'gl_M4_MulLeft',0
|
||||
|
||||
align 4
|
||||
proc dbg_print, fun:dword, mes:dword
|
||||
pushad
|
||||
mov eax,63
|
||||
mov ebx,1
|
||||
|
||||
mov esi,[fun]
|
||||
@@:
|
||||
mov cl,byte[esi]
|
||||
int 0x40
|
||||
inc esi
|
||||
cmp byte[esi],0
|
||||
jne @b
|
||||
mov cl,':'
|
||||
int 0x40
|
||||
mov cl,' '
|
||||
int 0x40
|
||||
mov esi,[mes]
|
||||
@@:
|
||||
mov cl,byte[esi]
|
||||
int 0x40
|
||||
inc esi
|
||||
cmp byte[esi],0
|
||||
jne @b
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
align 16
|
||||
EXPORTS:
|
||||
macro E_LIB n
|
||||
{
|
||||
dd sz_#n, n
|
||||
}
|
||||
include 'export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
sz_#n db `n,0
|
||||
}
|
||||
include 'export.inc'
|
Reference in New Issue
Block a user