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 |
|