Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8062 → Rev 8063

/programs/develop/libraries/TinyGL/asm_fork/api.asm
1,25 → 1,14
; glVertex
 
align 4
proc glVertex4f uses eax, x:dword, y:dword, z:dword, w:dword
locals
p rd 5
endl
mov dword[p],OP_Vertex
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
mov eax,[w]
mov dword[p+16],eax
 
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glVertex4f: ;x, y, z, w
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Vertex
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
 
align 4
proc glVertex2f, x:dword, y:dword
57,23 → 46,14
; glNormal
 
align 4
proc glNormal3f uses eax, x:dword, y:dword, z:dword
locals
p rd 4
endl
mov dword[p],OP_Normal
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
 
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
glNormal3f: ;x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Normal
stdcall gl_add_op,eax
ret
endp
pop eax
ret 16 ;=sizeof(dd)*4
 
align 4
proc glNormal3fv uses eax, v:dword
99,8 → 79,7
mov eax,[a]
mov dword[p+16],eax
; direct convertion to integer to go faster if no shading
mov eax,ebp
sub eax,12 ;ebp-12 = &p[5]
lea eax,[ebp-12] ;ebp-12 = &p[5]
push eax
add eax,4 ;ebp-8 = &p[6]
push eax
108,8 → 87,7
push eax
stdcall RGBFtoRGBI,[r],[g],[b] ;call: r,g,b,&p[7],&p[6],&p[5]
 
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall gl_add_op,eax
ret
endp
168,25 → 146,14
; TexCoord
 
align 4
proc glTexCoord4f uses eax, s:dword, t:dword, r:dword, q:dword
locals
p rd 5
endl
mov dword[p],OP_TexCoord
mov eax,[s]
mov dword[p+4],eax
mov eax,[t]
mov dword[p+8],eax
mov eax,[r]
mov dword[p+12],eax
mov eax,[q]
mov dword[p+16],eax
 
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glTexCoord4f: ;s, t, r, q
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_TexCoord
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
 
align 4
proc glTexCoord2f, s:dword, t:dword
202,59 → 169,40
endp
 
align 4
proc glEdgeFlag uses eax, flag:dword
locals
p rd 2
endl
mov dword[p],OP_EdgeFlag
mov eax,[flag]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glEdgeFlag: ;flag
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_EdgeFlag
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
; misc
 
align 4
proc glShadeModel uses eax, mode:dword
locals
p rd 2
endl
 
glShadeModel: ;mode
; assert(mode == GL_FLAT || mode == GL_SMOOTH);
 
mov dword[p],OP_ShadeModel
mov eax,[mode]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_ShadeModel
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glCullFace uses eax, mode:dword
locals
p rd 2
endl
 
glCullFace: ;mode
; assert(mode == GL_BACK ||
; mode == GL_FRONT ||
; mode == GL_FRONT_AND_BACK);
 
mov dword[p],OP_CullFace
mov eax,[mode]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_CullFace
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glFrontFace uses eax, mode:dword
272,34 → 220,24
@@:
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
 
align 4
proc glPolygonMode uses eax, face:dword, mode:dword
locals
p rd 3
endl
 
glPolygonMode: ;face, mode
; assert(face == GL_BACK ||
; face == GL_FRONT ||
; face == GL_FRONT_AND_BACK);
; assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL);
 
mov dword[p],OP_PolygonMode
mov eax,[face]
mov dword[p+4],eax
mov eax,[mode]
mov dword[p+8],eax
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PolygonMode
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
 
; glEnable / glDisable
 
313,8 → 251,7
mov dword[p+4],eax
mov dword[p+8],1
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
lea eax,[ebp-12] ;=sizeof(dd)*3
stdcall gl_add_op,eax
ret
endp
329,8 → 266,7
mov dword[p+4],eax
mov dword[p+8],0
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
lea eax,[ebp-12] ;=sizeof(dd)*3
stdcall gl_add_op,eax
ret
endp
338,49 → 274,31
; glBegin / glEnd
 
align 4
proc glBegin uses eax, mode:dword
locals
p rd 2
endl
mov dword[p],OP_Begin
mov eax,[mode]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glBegin: ;mode
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Begin
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glEnd uses eax
locals
p dd ?
endl
mov dword[p],OP_End
 
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glEnd:
stdcall gl_add_op,op_End
ret
endp
 
; matrix
 
align 4
proc glMatrixMode uses eax, mode:dword
locals
p rd 2
endl
mov dword[p],OP_MatrixMode
mov eax,[mode]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glMatrixMode: ;mode
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_MatrixMode
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glLoadMatrixf uses ecx edi esi, m:dword
394,24 → 312,15
sub edi,64 ;=sizeof(M4)
rep movsd
 
mov ecx,ebp
sub ecx,68 ;=sizeof(dd)*17
lea ecx,[ebp-68] ;=sizeof(dd)*17
stdcall gl_add_op,ecx
ret
endp
 
align 4
proc glLoadIdentity uses eax
locals
p dd ?
endl
mov dword[p],OP_LoadIdentity
 
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glLoadIdentity:
stdcall gl_add_op,op_LoadIdentity
ret
endp
 
align 4
proc glMultMatrixf uses ecx edi esi, m:dword
425,117 → 334,60
sub edi,64 ;=sizeof(M4)
rep movsd
 
mov ecx,ebp
sub ecx,68 ;=sizeof(dd)*17
lea ecx,[ebp-68] ;=sizeof(dd)*17
stdcall gl_add_op,ecx
ret
endp
 
align 4
proc glPushMatrix uses eax
locals
p dd ?
endl
mov dword[p],OP_PushMatrix
 
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glPushMatrix:
stdcall gl_add_op,op_PushMatrix
ret
endp
 
align 4
proc glPopMatrix uses eax
locals
p dd ?
endl
mov dword[p],OP_PopMatrix
 
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glPopMatrix:
stdcall gl_add_op,op_PopMatrix
ret
endp
 
align 4
proc glRotatef uses eax, angle:dword, x:dword, y:dword, z:dword
locals
p rd 5
endl
mov dword[p],OP_Rotate
mov eax,[angle]
mov dword[p+4],eax
mov eax,[x]
mov dword[p+8],eax
mov eax,[y]
mov dword[p+12],eax
mov eax,[z]
mov dword[p+16],eax
 
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glRotatef: ;angle, x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Rotate
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
 
align 4
proc glTranslatef uses eax, x:dword, y:dword, z:dword
locals
p rd 4
endl
mov dword[p],OP_Translate
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
 
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
glTranslatef: ;x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Translate
stdcall gl_add_op,eax
ret
endp
pop eax
ret 16 ;=sizeof(dd)*4
 
align 4
proc glScalef uses eax, x:dword, y:dword, z:dword
locals
p rd 4
endl
mov dword[p],OP_Scale
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[z]
mov dword[p+12],eax
 
mov eax,ebp
sub eax,16 ;=sizeof(dd)*4
glScalef: ;x, y, z
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Scale
stdcall gl_add_op,eax
ret
endp
pop eax
ret 16 ;=sizeof(dd)*4
 
align 4
proc glViewport uses eax, x:dword, y:dword, width:dword, heigh:dword
locals
p rd 5
endl
mov dword[p],OP_Viewport
mov eax,[x]
mov dword[p+4],eax
mov eax,[y]
mov dword[p+8],eax
mov eax,[width]
mov dword[p+12],eax
mov eax,[heigh]
mov dword[p+16],eax
 
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
glViewport: ;x, y, width, heigh
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Viewport
stdcall gl_add_op,eax
ret
endp
pop eax
ret 20 ;=sizeof(dd)*5
 
align 4
proc glFrustum uses eax, left:qword, right:qword, bottom:qword, top:qword,\
557,8 → 409,7
fld qword[farv]
fstp dword[p+24]
 
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
621,8 → 472,7
mov dword[p+24],0.0
@@:
 
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
643,28 → 493,20
mov dword[p+20],0.0
mov dword[p+24],0.0
 
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
 
align 4
proc glColorMaterial uses eax, mode:dword, type:dword
locals
p rd 3
endl
mov dword[p],OP_ColorMaterial
mov eax,[mode]
mov dword[p+4],eax
mov eax,[type]
mov dword[p+8],eax
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glColorMaterial: ;mode, type
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_ColorMaterial
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
 
align 4
proc glLightfv uses eax ecx, light:dword, type:dword, v:dword
688,8 → 530,7
mov ecx,[eax+12]
mov dword[p+24],ecx
 
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
710,8 → 551,7
mov dword[p+20],0.0
mov dword[p+24],0.0
 
mov eax,ebp
sub eax,28 ;=sizeof(dd)*7
lea eax,[ebp-28] ;=sizeof(dd)*7
stdcall gl_add_op,eax
ret
endp
731,8 → 571,7
mov dword[p+16],0.0
mov dword[p+20],0.0
 
mov eax,ebp
sub eax,24 ;=sizeof(dd)*6
lea eax,[ebp-24] ;=sizeof(dd)*6
stdcall gl_add_op,eax
ret
endp
755,8 → 594,7
mov ecx,[eax+12]
mov dword[p+20],ecx
 
mov eax,ebp
sub eax,24 ;=sizeof(dd)*6
lea eax,[ebp-24] ;=sizeof(dd)*6
stdcall gl_add_op,eax
ret
endp
764,19 → 602,14
; clear
 
align 4
proc glClear uses eax, mask:dword
locals
p rd 2
endl
mov dword[p],OP_Clear
mov eax,[mask]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glClear: ;mask
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Clear
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glClearColor uses eax, r:dword, g:dword, b:dword, a:dword
793,8 → 626,7
mov eax,[a]
mov dword[p+16],eax
 
mov eax,ebp
sub eax,20 ;=sizeof(dd)*5
lea eax,[ebp-20] ;=sizeof(dd)*5
stdcall gl_add_op,eax
ret
endp
809,8 → 641,7
fld qword[eax]
fstp dword[p+4]
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
lea eax,[ebp-8] ;=sizeof(dd)*2
stdcall gl_add_op,eax
ret
endp
818,43 → 649,24
; textures
 
align 4
proc glTexImage2D uses ecx edi esi,\
target:dword, level:dword, components:dword,\
width:dword, height:dword, border:dword,\
format:dword, type:dword, pixels:dword
locals
p rd 10
endl
mov dword[p],OP_TexImage2D
mov ecx,9
mov esi,ebp
add esi,8 ;указатель на стек с входными параметрами
mov edi,ebp
sub edi,36 ;указатель на стек с локальным массивом
rep movsd ;копирование в цикле 9-ти входных параметров
glTexImage2D: ;target, level, components, width, height, border, format, type, pixels
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_TexImage2D
stdcall gl_add_op,eax
pop eax
ret 40 ;=sizeof(dd)*10
 
mov ecx,ebp
sub ecx,40 ;=sizeof(dd)*10
stdcall gl_add_op,ecx
ret
endp
 
align 4
proc glBindTexture uses eax, target:dword, texture:dword
locals
p rd 3
endl
mov dword[p],OP_BindTexture
mov eax,[target]
mov dword[p+4],eax
mov eax,[texture]
mov dword[p+8],eax
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glBindTexture: ;target, texture
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_BindTexture
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
 
align 4
proc glTexEnvi uses eax, target:dword, pname:dword, param:dword
873,8 → 685,7
mov dword[p+24],0.0
mov dword[p+28],0.0
 
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall gl_add_op,eax
ret
endp
896,120 → 707,74
mov dword[p+24],0.0
mov dword[p+28],0.0
 
mov eax,ebp
sub eax,32 ;=sizeof(dd)*8
lea eax,[ebp-32] ;=sizeof(dd)*8
stdcall gl_add_op,eax
ret
endp
 
align 4
proc glPixelStorei uses eax, pname:dword, param:dword
locals
p rd 3
endl
mov dword[p],OP_PixelStore
mov eax,[pname]
mov dword[p+4],eax
mov eax,[param]
mov dword[p+8],eax
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glPixelStorei: ;pname, param
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PixelStore
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
 
; selection
 
align 4
proc glInitNames uses eax
locals
p dd ?
endl
mov dword[p],OP_InitNames
 
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glInitNames:
stdcall gl_add_op,op_InitNames
ret
endp
 
align 4
proc glPushName uses eax, name:dword
locals
p rd 2
endl
mov dword[p],OP_PushName
mov eax,[name]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glPushName: ;name
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PushName
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glPopName uses eax
locals
p dd ?
endl
mov dword[p],OP_PopName
 
mov eax,ebp
sub eax,4 ;=sizeof(dd)*1
stdcall gl_add_op,eax
glPopName:
stdcall gl_add_op,op_PopName
ret
endp
 
align 4
proc glLoadName uses eax, name:dword
locals
p rd 2
endl
mov dword[p],OP_LoadName
mov eax,[name]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glLoadName: ;name
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_LoadName
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glPolygonOffset uses eax, factor:dword, units:dword
locals
p rd 3
endl
mov dword[p],OP_PolygonOffset
mov eax,[factor]
mov dword[p+4],eax
mov eax,[units]
mov dword[p+8],eax
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glPolygonOffset: ;factor, units
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_PolygonOffset
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
 
; Special Functions
 
align 4
proc glCallList uses eax, list:dword
locals
p rd 2
endl
mov dword[p],OP_CallList
mov eax,[list]
mov dword[p+4],eax
 
mov eax,ebp
sub eax,8 ;=sizeof(dd)*2
glCallList: ;list
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_CallList
stdcall gl_add_op,eax
ret
endp
pop eax
ret 8 ;=sizeof(dd)*2
 
align 4
proc glFlush ;(void)
1018,21 → 783,14
endp
 
align 4
proc glHint uses eax, target:dword, mode:dword
locals
p rd 3
endl
mov dword[p],OP_Hint
mov eax,[target]
mov dword[p+4],eax
mov eax,[mode]
mov dword[p+8],eax
 
mov eax,ebp
sub eax,12 ;=sizeof(dd)*3
glHint: ;target, mode
push dword[esp] ;копируем адрес возврата
push eax
lea eax,[esp+8]
mov dword[eax],OP_Hint
stdcall gl_add_op,eax
ret
endp
pop eax
ret 12 ;=sizeof(dd)*3
 
; Non standard functions