1006 lines
16 KiB
NASM
1006 lines
16 KiB
NASM
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glVertex2f, x:dword, y:dword
|
|||
|
stdcall glVertex4f,[x],[y],0.0,1.0
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glVertex3f, x:dword, y:dword, z:dword
|
|||
|
stdcall glVertex4f,[x],[y],[z],1.0
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glVertex3fv uses eax, v:dword
|
|||
|
mov eax,[v]
|
|||
|
stdcall glVertex4f,[eax],[eax+4],[eax+8],1.0
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glNormal3fv uses eax, v:dword
|
|||
|
mov eax,[v]
|
|||
|
stdcall glNormal3f,[eax],[eax+4],[eax+8]
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; glColor
|
|||
|
|
|||
|
align 4
|
|||
|
proc glColor4f uses eax, r:dword, g:dword, b:dword, a:dword
|
|||
|
locals
|
|||
|
p rd 8
|
|||
|
endl
|
|||
|
mov dword[p],OP_Color
|
|||
|
mov eax,[b]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[g]
|
|||
|
mov dword[p+8],eax
|
|||
|
mov eax,[r]
|
|||
|
mov dword[p+12],eax
|
|||
|
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]
|
|||
|
push eax
|
|||
|
add eax,4 ;ebp-8 = &p[6]
|
|||
|
push eax
|
|||
|
add eax,4 ;ebp-4 = &p[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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glColor4fv uses eax ebx, v:dword
|
|||
|
locals
|
|||
|
p rd 8
|
|||
|
endl
|
|||
|
mov dword[p],OP_Color
|
|||
|
mov eax,[v]
|
|||
|
mov ebx,[eax+8]
|
|||
|
mov dword[p+4],ebx
|
|||
|
mov ebx,[eax+4]
|
|||
|
mov dword[p+8],ebx
|
|||
|
mov ebx,[eax]
|
|||
|
mov dword[p+12],ebx
|
|||
|
mov ebx,[eax+12]
|
|||
|
mov dword[p+16],ebx
|
|||
|
; direct convertion to integer to go faster if no shading
|
|||
|
mov eax,ebp
|
|||
|
sub eax,4
|
|||
|
push eax ;&p[7]
|
|||
|
sub eax,4
|
|||
|
push eax ;&p[6]
|
|||
|
sub eax,4
|
|||
|
push eax ;&p[5]
|
|||
|
stdcall RGBFtoRGBI,[eax+8],[eax+4],[eax] ;call: v[2],v[1],v[0],p[5],p[6],p[7]
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,32 ;=sizeof(dd)*8
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glColor3f, r:dword, g:dword, b:dword
|
|||
|
stdcall glColor4f,[r],[g],[b],1.0
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glColor3fv uses eax, v:dword
|
|||
|
mov eax,[v]
|
|||
|
stdcall glColor4f,[eax],[eax+4],[eax+8],1.0
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glTexCoord2f, s:dword, t:dword
|
|||
|
stdcall glTexCoord4f,[s],[t],0.0,1.0
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glTexCoord2fv uses eax, v:dword
|
|||
|
mov eax,[v]
|
|||
|
stdcall glTexCoord4f,[eax],[eax+4],0.0,1.0
|
|||
|
ret
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; misc
|
|||
|
|
|||
|
align 4
|
|||
|
proc glShadeModel uses eax, mode:dword
|
|||
|
locals
|
|||
|
p rd 2
|
|||
|
endl
|
|||
|
|
|||
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glCullFace uses eax, mode:dword
|
|||
|
locals
|
|||
|
p rd 2
|
|||
|
endl
|
|||
|
|
|||
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glFrontFace uses eax, mode:dword
|
|||
|
locals
|
|||
|
p rd 2
|
|||
|
endl
|
|||
|
|
|||
|
; assert(mode == GL_CCW || mode == GL_CW);
|
|||
|
|
|||
|
mov dword[p],OP_FrontFace
|
|||
|
xor eax,eax
|
|||
|
cmp dword[mode],GL_CCW
|
|||
|
je @f
|
|||
|
inc eax
|
|||
|
@@:
|
|||
|
mov dword[p+4],eax
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,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
|
|||
|
|
|||
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; glEnable / glDisable
|
|||
|
|
|||
|
align 4
|
|||
|
proc glEnable uses eax, cap:dword
|
|||
|
locals
|
|||
|
p rd 3
|
|||
|
endl
|
|||
|
mov dword[p],OP_EnableDisable
|
|||
|
mov eax,[cap]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov dword[p+8],1
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,12 ;=sizeof(dd)*3
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glDisable uses eax, cap:dword
|
|||
|
locals
|
|||
|
p rd 3
|
|||
|
endl
|
|||
|
mov dword[p],OP_EnableDisable
|
|||
|
mov eax,[cap]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov dword[p+8],0
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,12 ;=sizeof(dd)*3
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
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
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glLoadMatrixf uses ecx edi esi, m:dword
|
|||
|
locals
|
|||
|
p rd 17
|
|||
|
endl
|
|||
|
mov dword[p],OP_LoadMatrix
|
|||
|
mov ecx,16
|
|||
|
mov esi,[m]
|
|||
|
mov edi,ebp
|
|||
|
sub edi,64 ;=sizeof(M4)
|
|||
|
rep movsd
|
|||
|
|
|||
|
mov ecx,ebp
|
|||
|
sub ecx,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
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glMultMatrixf uses ecx edi esi, m:dword
|
|||
|
locals
|
|||
|
p rd 17
|
|||
|
endl
|
|||
|
mov dword[p],OP_MultMatrix
|
|||
|
mov ecx,16
|
|||
|
mov esi,[m]
|
|||
|
mov edi,ebp
|
|||
|
sub edi,64 ;=sizeof(M4)
|
|||
|
rep movsd
|
|||
|
|
|||
|
mov ecx,ebp
|
|||
|
sub ecx,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
|
|||
|
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
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glFrustum uses eax, left:dword,right:dword,bottom:dword,top:dword,\
|
|||
|
near:dword,farv:dword
|
|||
|
locals
|
|||
|
p rd 7
|
|||
|
endl
|
|||
|
mov dword[p],OP_Frustum
|
|||
|
mov eax,[left]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+4]
|
|||
|
mov eax,[right]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+8]
|
|||
|
mov eax,[bottom]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+12]
|
|||
|
mov eax,[top]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+16]
|
|||
|
mov eax,[near]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+20]
|
|||
|
mov eax,[farv]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+24]
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,28 ;=sizeof(dd)*7
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;/* lightening */
|
|||
|
|
|||
|
align 4
|
|||
|
proc glMaterialfv uses eax ecx, mode:dword, type:dword, v:dword
|
|||
|
locals
|
|||
|
p rd 7
|
|||
|
endl
|
|||
|
|
|||
|
; assert(mode == GL_FRONT || mode == GL_BACK || mode==GL_FRONT_AND_BACK);
|
|||
|
|
|||
|
mov dword[p],OP_Material
|
|||
|
mov eax,[mode]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[type]
|
|||
|
mov dword[p+8],eax
|
|||
|
|
|||
|
mov eax,[v]
|
|||
|
mov ecx,[eax+8]
|
|||
|
mov dword[p+12],ecx
|
|||
|
mov ecx,[eax+4]
|
|||
|
mov dword[p+16],ecx
|
|||
|
mov ecx,[eax]
|
|||
|
mov dword[p+20],ecx
|
|||
|
mov ecx,[eax+12]
|
|||
|
mov dword[p+24],ecx
|
|||
|
|
|||
|
cmp dword[type],GL_SHININESS
|
|||
|
jne @f
|
|||
|
mov dword[p+16],0.0
|
|||
|
mov dword[p+20],0.0
|
|||
|
mov dword[p+24],0.0
|
|||
|
@@:
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,28 ;=sizeof(dd)*7
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glMaterialf uses eax, mode:dword, type:dword, v:dword
|
|||
|
locals
|
|||
|
p rd 7
|
|||
|
endl
|
|||
|
mov dword[p],OP_Material
|
|||
|
mov eax,[mode]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[type]
|
|||
|
mov dword[p+8],eax
|
|||
|
mov eax,[v]
|
|||
|
mov dword[p+12],eax
|
|||
|
mov dword[p+16],0.0
|
|||
|
mov dword[p+20],0.0
|
|||
|
mov dword[p+24],0.0
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glLightfv uses eax ecx, light:dword, type:dword, v:dword
|
|||
|
locals
|
|||
|
p rd 7
|
|||
|
endl
|
|||
|
mov dword[p],OP_Light
|
|||
|
mov eax,[light]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[type]
|
|||
|
mov dword[p+8],eax
|
|||
|
|
|||
|
;TODO: 3 composants ?
|
|||
|
mov eax,[v]
|
|||
|
mov ecx,[eax]
|
|||
|
mov dword[p+12],ecx
|
|||
|
mov ecx,[eax+4]
|
|||
|
mov dword[p+16],ecx
|
|||
|
mov ecx,[eax+8]
|
|||
|
mov dword[p+20],ecx
|
|||
|
mov ecx,[eax+12]
|
|||
|
mov dword[p+24],ecx
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,28 ;=sizeof(dd)*7
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glLightf uses eax, light:dword, type:dword, v:dword
|
|||
|
locals
|
|||
|
p rd 7
|
|||
|
endl
|
|||
|
mov dword[p],OP_Light
|
|||
|
mov eax,[light]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[type]
|
|||
|
mov dword[p+8],eax
|
|||
|
mov eax,[v]
|
|||
|
mov dword[p+12],eax
|
|||
|
mov dword[p+16],0.0
|
|||
|
mov dword[p+20],0.0
|
|||
|
mov dword[p+24],0.0
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,28 ;=sizeof(dd)*7
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glLightModeli uses eax, pname:dword, param:dword
|
|||
|
locals
|
|||
|
p rd 6
|
|||
|
endl
|
|||
|
mov dword[p],OP_LightModel
|
|||
|
mov eax,[pname]
|
|||
|
mov dword[p+4],eax
|
|||
|
fild dword[param]
|
|||
|
fstp dword[p+8] ;преобразовали int во float
|
|||
|
|
|||
|
mov dword[p+12],0.0
|
|||
|
mov dword[p+16],0.0
|
|||
|
mov dword[p+20],0.0
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,24 ;=sizeof(dd)*6
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glLightModelfv uses eax ecx, pname:dword, param:dword
|
|||
|
locals
|
|||
|
p rd 6
|
|||
|
endl
|
|||
|
mov dword[p],OP_LightModel
|
|||
|
mov eax,[pname]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[param]
|
|||
|
mov ecx,[eax]
|
|||
|
mov dword[p+8],ecx
|
|||
|
mov ecx,[eax+4]
|
|||
|
mov dword[p+12],ecx
|
|||
|
mov ecx,[eax+8]
|
|||
|
mov dword[p+16],ecx
|
|||
|
mov ecx,[eax+12]
|
|||
|
mov dword[p+20],ecx
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,24 ;=sizeof(dd)*6
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;/* 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glClearColor uses eax, r:dword, g:dword, b:dword, a:dword
|
|||
|
locals
|
|||
|
p rd 5
|
|||
|
endl
|
|||
|
mov dword[p],OP_ClearColor
|
|||
|
mov eax,[b]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[g]
|
|||
|
mov dword[p+8],eax
|
|||
|
mov eax,[r]
|
|||
|
mov dword[p+12],eax
|
|||
|
mov eax,[a]
|
|||
|
mov dword[p+16],eax
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,20 ;=sizeof(dd)*5
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glClearDepth uses eax, depth:dword
|
|||
|
locals
|
|||
|
p rd 2
|
|||
|
endl
|
|||
|
mov dword[p],OP_ClearDepth
|
|||
|
mov eax,[depth]
|
|||
|
fld qword[eax]
|
|||
|
fstp dword[p+4]
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,8 ;=sizeof(dd)*2
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;/* 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-ти входных параметров
|
|||
|
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glTexEnvi uses eax, target:dword, pname:dword, param:dword
|
|||
|
locals
|
|||
|
p rd 8
|
|||
|
endl
|
|||
|
mov dword[p],OP_TexEnv
|
|||
|
mov eax,[target]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[pname]
|
|||
|
mov dword[p+8],eax
|
|||
|
mov eax,[param]
|
|||
|
mov dword[p+12],eax
|
|||
|
mov dword[p+16],0.0
|
|||
|
mov dword[p+20],0.0
|
|||
|
mov dword[p+24],0.0
|
|||
|
mov dword[p+28],0.0
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,32 ;=sizeof(dd)*8
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glTexParameteri uses eax, target:dword, pname:dword, param:dword
|
|||
|
locals
|
|||
|
p rd 8
|
|||
|
endl
|
|||
|
mov dword[p],OP_TexParameter
|
|||
|
mov eax,[target]
|
|||
|
mov dword[p+4],eax
|
|||
|
mov eax,[pname]
|
|||
|
mov dword[p+8],eax
|
|||
|
mov eax,[param]
|
|||
|
mov dword[p+12],eax
|
|||
|
mov dword[p+16],0.0
|
|||
|
mov dword[p+20],0.0
|
|||
|
mov dword[p+24],0.0
|
|||
|
mov dword[p+28],0.0
|
|||
|
|
|||
|
mov eax,ebp
|
|||
|
sub eax,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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;/* 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
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
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
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;/* 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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc glFlush ;(void)
|
|||
|
;nothing to do
|
|||
|
ret
|
|||
|
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
|
|||
|
stdcall gl_add_op,eax
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
; Non standard functions
|
|||
|
|
|||
|
align 4
|
|||
|
proc glDebug uses eax, mode:dword
|
|||
|
stdcall gl_get_context ;после вызова функции в eax указатель на GLContext
|
|||
|
push dword[mode]
|
|||
|
pop dword[eax+offs_cont_print_flag]
|
|||
|
ret
|
|||
|
endp
|