/programs/develop/libraries/TinyGL/asm_fork/api.asm |
---|
0,0 → 1,1005 |
; 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 |
/programs/develop/libraries/TinyGL/asm_fork/arrays.asm |
---|
0,0 → 1,360 |
VERTEX_ARRAY equ 0x0001 |
COLOR_ARRAY equ 0x0002 |
NORMAL_ARRAY equ 0x0004 |
TEXCOORD_ARRAY equ 0x0008 |
align 4 |
proc glopArrayElement uses eax ebx ecx edx, context:dword, param:dword |
locals |
p rd 5 |
endl |
mov eax,[context] |
mov ebx,[param] |
mov ebx,[ebx+4] ;ebx = p[1] |
bt dword[eax+offs_cont_client_states],1 ;2^1=COLOR_ARRAY |
jnc @f |
mov ecx,[eax+offs_cont_color_array_size] |
add ecx,[eax+offs_cont_color_array_stride] |
imul ecx,ebx |
shl ecx,2 |
add ecx,eax |
add ecx,offs_cont_color_array ;ecx = &context.color_array[i] |
mov ebx,ebp |
sub ebx,20 ;=sizeof(dd)*5 |
mov edx,[ecx] |
mov [ebx+4],edx |
mov edx,[ecx+4] |
mov [ebx+8],edx |
mov edx,[ecx+8] |
mov [ebx+12],edx |
cmp dword[eax+offs_cont_color_array_size],3 |
jg .l0 |
mov edx,1.0 |
jmp .l1 |
.l0: |
mov edx,[ecx+12] |
.l1: |
mov [ebx+16],edx |
stdcall glopColor, eax, ebx |
@@: |
bt dword[eax+offs_cont_client_states],2 ;2^2=NORMAL_ARRAY |
jnc @f |
mov esi,dword[eax+offs_cont_normal_array_stride] |
add esi,3 |
imul esi,ebx |
shl esi,2 |
add esi,eax |
add esi,offs_cont_normal_array ;esi = &normal_array[ebx * (3 + c->normal_array_stride)] |
mov edi,eax |
add edi,offs_cont_current_normal |
mov ecx,3 |
rep movsd |
mov dword[edi],0.0 |
@@: |
bt dword[eax+offs_cont_client_states],3 ;2^3=TEXCOORD_ARRAY |
jnc @f |
mov ecx,[eax+offs_cont_texcoord_array_size] |
add ecx,[eax+offs_cont_texcoord_array_stride] |
imul ecx,ebx |
shl ecx,2 |
add ecx,eax |
add ecx,offs_cont_texcoord_array ;ecx = &context.texcoord_array[i] |
mov edx,[ecx] |
mov [eax+offs_cont_current_tex_coord],edx |
mov edx,[ecx+4] |
mov [eax+offs_cont_current_tex_coord+4],edx |
cmp dword[eax+offs_cont_texcoord_array_size],2 |
jg .l2 |
mov edx,0.0 |
jmp .l3 |
.l2: |
mov edx,[ecx+8] |
.l3: |
mov [eax+offs_cont_current_tex_coord+8],edx |
cmp dword[eax+offs_cont_texcoord_array_size],3 |
jg .l4 |
mov edx,1.0 |
jmp .l5 |
.l4: |
mov edx,[ecx+12] |
.l5: |
mov [eax+offs_cont_current_tex_coord+12],edx |
@@: |
bt dword[eax+offs_cont_client_states],0 ;2^0=VERTEX_ARRAY |
jnc @f |
mov ecx,[eax+offs_cont_vertex_array_size] |
add ecx,[eax+offs_cont_vertex_array_stride] |
imul ecx,ebx |
shl ecx,2 |
add ecx,eax |
add ecx,offs_cont_vertex_array ;ecx = &context.vertex_array[i] |
mov ebx,ebp |
sub ebx,20 ;=sizeof(dd)*5 |
mov edx,[ecx] |
mov [ebx+4],edx |
mov edx,[ecx+4] |
mov [ebx+8],edx |
cmp dword[eax+offs_cont_vertex_array_size],2 |
jg .l6 |
mov edx,0.0 |
jmp .l7 |
.l6: |
mov edx,[ecx+8] |
.l7: |
mov [ebx+12],edx |
cmp dword[eax+offs_cont_vertex_array_size],3 |
jg .l8 |
mov edx,1.0 |
jmp .l9 |
.l8: |
mov edx,[ecx+12] |
.l9: |
mov [ebx+16],edx |
stdcall glopVertex, eax, ebx |
@@: |
ret |
endp |
align 4 |
proc glArrayElement uses eax, i:dword |
locals |
p rd 2 |
endl |
mov dword[p],OP_ArrayElement |
mov eax,[i] |
mov dword[p+4],eax |
mov eax,ebp |
sub eax,8 ;=sizeof(dd)*2 |
stdcall gl_add_op,eax |
ret |
endp |
align 4 |
proc glopEnableClientState uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] ;ebx = p[1] |
or dword[eax+offs_cont_client_states],ebx |
ret |
endp |
align 4 |
proc glEnableClientState uses eax, array:dword |
locals |
p rd 2 |
endl |
mov dword[p],OP_EnableClientState |
cmp dword[array],GL_VERTEX_ARRAY |
jne @f |
mov dword[p+4],VERTEX_ARRAY |
jmp .end_f |
@@: |
cmp dword[array],GL_NORMAL_ARRAY |
jne @f |
mov dword[p+4],NORMAL_ARRAY |
jmp .end_f |
@@: |
cmp dword[array],GL_COLOR_ARRAY |
jne @f |
mov dword[p+4],COLOR_ARRAY |
jmp .end_f |
@@: |
cmp dword[array],GL_TEXTURE_COORD_ARRAY |
jne @f |
mov dword[p+4],TEXCOORD_ARRAY |
jmp .end_f |
@@: |
;assert(0); |
.end_f: |
mov eax,ebp |
sub eax,8 ;=sizeof(dd)*2 |
stdcall gl_add_op,eax |
ret |
endp |
align 4 |
proc glopDisableClientState uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] ;ebx = p[1] |
and dword[eax+offs_cont_client_states],ebx |
ret |
endp |
align 4 |
proc glDisableClientState uses eax, array:dword |
locals |
p rd 2 |
endl |
mov dword[p],OP_DisableClientState |
cmp dword[array],GL_VERTEX_ARRAY |
jne @f |
mov dword[p+4], not VERTEX_ARRAY |
jmp .end_f |
@@: |
cmp dword[array],GL_NORMAL_ARRAY |
jne @f |
mov dword[p+4], not NORMAL_ARRAY |
jmp .end_f |
@@: |
cmp dword[array],GL_COLOR_ARRAY |
jne @f |
mov dword[p+4], not COLOR_ARRAY |
jmp .end_f |
@@: |
cmp dword[array],GL_TEXTURE_COORD_ARRAY |
jne @f |
mov dword[p+4], not TEXCOORD_ARRAY |
jmp .end_f |
@@: |
;assert(0); |
.end_f: |
mov eax,ebp |
sub eax,8 ;=sizeof(dd)*2 |
stdcall gl_add_op,eax |
ret |
endp |
align 4 |
proc glopVertexPointer uses eax ebx ecx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] ;ecx = p[1] |
mov dword[eax+offs_cont_vertex_array_size],ecx |
mov ecx,[ebx+8] ;ecx = p[2] |
mov dword[eax+offs_cont_vertex_array_stride],ecx |
mov ecx,[ebx+12] ;ecx = p[3] |
mov dword[eax+offs_cont_vertex_array],ecx |
ret |
endp |
align 4 |
proc glVertexPointer uses eax, size:dword, type:dword, stride:dword, pointer:dword |
locals |
p rd 4 |
endl |
; assert(type == GL_FLOAT); |
mov dword[p],OP_TexCoordPointer |
mov eax,[size] |
mov dword[p+4],eax |
mov eax,[stride] |
mov dword[p+8],eax |
mov eax,[pointer] |
mov dword[p+12],eax |
mov eax,ebp |
sub eax,16 ;=sizeof(dd)*4 |
stdcall gl_add_op,eax |
ret |
endp |
align 4 |
proc glopColorPointer uses eax ebx ecx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] ;ecx = p[1] |
mov dword[eax+offs_cont_color_array_size],ecx |
mov ecx,[ebx+8] ;ecx = p[2] |
mov dword[eax+offs_cont_color_array_stride],ecx |
mov ecx,[ebx+12] ;ecx = p[3] |
mov dword[eax+offs_cont_color_array],ecx |
ret |
endp |
align 4 |
proc glColorPointer uses eax, size:dword, type:dword, stride:dword, pointer:dword |
locals |
p rd 4 |
endl |
; assert(type == GL_FLOAT); |
mov dword[p],OP_ColorPointer |
mov eax,[size] |
mov dword[p+4],eax |
mov eax,[stride] |
mov dword[p+8],eax |
mov eax,[pointer] |
mov dword[p+12],eax |
mov eax,ebp |
sub eax,16 ;=sizeof(dd)*4 |
stdcall gl_add_op,eax |
ret |
endp |
align 4 |
proc glopNormalPointer uses eax ebx ecx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] ;ecx = p[1] |
mov dword[eax+offs_cont_normal_array_stride],ecx |
mov ecx,[ebx+8] ;ecx = p[2] |
mov dword[eax+offs_cont_normal_array],ecx |
ret |
endp |
align 4 |
proc glNormalPointer uses eax, type:dword, stride:dword, pointer:dword |
locals |
p rd 3 |
endl |
; assert(type == GL_FLOAT); |
mov dword[p],OP_NormalPointer |
mov eax,[stride] |
mov dword[p+4],eax |
mov eax,[pointer] |
mov dword[p+8],eax |
mov eax,ebp |
sub eax,12 ;=sizeof(dd)*3 |
stdcall gl_add_op,eax |
ret |
endp |
align 4 |
proc glopTexCoordPointer uses eax ebx ecx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] ;ecx = p[1] |
mov dword[eax+offs_cont_texcoord_array_size],ecx |
mov ecx,[ebx+8] ;ecx = p[2] |
mov dword[eax+offs_cont_texcoord_array_stride],ecx |
mov ecx,[ebx+12] ;ecx = p[3] |
mov dword[eax+offs_cont_texcoord_array],ecx |
ret |
endp |
align 4 |
proc glTexCoordPointer uses eax, size:dword, type:dword, stride:dword, pointer:dword |
locals |
p rd 4 |
endl |
; assert(type == GL_FLOAT); |
mov dword[p],OP_TexCoordPointer |
mov eax,[size] |
mov dword[p+4],eax |
mov eax,[stride] |
mov dword[p+8],eax |
mov eax,[pointer] |
mov dword[p+12],eax |
mov eax,ebp |
sub eax,16 ;=sizeof(dd)*4 |
stdcall gl_add_op,eax |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/build.bat |
---|
0,0 → 1,4 |
if not exist bin mkdir bin |
@fasm.exe -m 16384 tinygl.asm bin\tinygl.obj |
@kpack bin\tinygl.obj |
pause |
/programs/develop/libraries/TinyGL/asm_fork/clear.asm |
---|
0,0 → 1,34 |
align 4 |
proc glopClearColor uses ecx esi edi, context:dword, p:dword |
mov esi,[p] |
add esi,4 |
mov edi,[context] |
add edi,offs_cont_clear_color |
mov ecx,4 |
rep movsd |
endp |
align 4 |
proc glopClearDepth uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] ;ebx = p[1] |
mov dword[eax+offs_cont_clear_depth],ebx |
ret |
endp |
;void glopClear(GLContext *c,GLParam *p) |
;{ |
; int mask=p[1].i; |
; int z=0; |
; int r=(int)(c->clear_color.v[0]*65535); |
; int g=(int)(c->clear_color.v[1]*65535); |
; int b=(int)(c->clear_color.v[2]*65535); |
; |
; /* TODO : correct value of Z */ |
; |
; ZB_clear(c->zb,mask & GL_DEPTH_BUFFER_BIT,z, |
; mask & GL_COLOR_BUFFER_BIT,r,g,b); |
;} |
/programs/develop/libraries/TinyGL/asm_fork/clip.asm |
---|
0,0 → 1,923 |
; fill triangle profile |
; #define PROFILE |
CLIP_XMIN equ (1<<0) |
CLIP_XMAX equ (1<<1) |
CLIP_YMIN equ (1<<2) |
CLIP_YMAX equ (1<<3) |
CLIP_ZMIN equ (1<<4) |
CLIP_ZMAX equ (1<<5) |
offs_X equ 0 |
offs_Y equ 4 |
offs_Z equ 8 |
offs_W equ 12 |
align 4 |
proc gl_transform_to_viewport uses eax ebx ecx, context:dword,v:dword |
locals |
point dd ? |
endl |
mov eax,[context] |
mov ebx,[v] |
; coordinates |
fld1 |
fdiv dword[ebx+offs_vert_pc+offs_W] ;st0 = 1/v.pc.W |
fld dword[ebx+offs_vert_pc+offs_X] ;st0 = v.pc.X |
fmul st0,st1 |
fmul dword[eax+offs_cont_viewport+offs_vpor_scale+offs_X] |
fadd dword[eax+offs_cont_viewport+offs_vpor_trans+offs_X] |
fistp dword[ebx+offs_vert_zp] ;v.zp.x = st0, st0 = st1 |
fld dword[ebx+offs_vert_pc+offs_Y] ;st0 = v.pc.Y |
fmul st0,st1 |
fmul dword[eax+offs_cont_viewport+offs_vpor_scale+offs_Y] |
fadd dword[eax+offs_cont_viewport+offs_vpor_trans+offs_Y] |
fistp dword[ebx+offs_vert_zp+offs_zbup_y] ;v.zp.y = st0, st0 = st1 |
fld dword[ebx+offs_vert_pc+offs_Z] ;st0 = v.pc.Z |
fmul st0,st1 |
fmul dword[eax+offs_cont_viewport+offs_vpor_scale+offs_Z] |
fadd dword[eax+offs_cont_viewport+offs_vpor_trans+offs_Z] |
fistp dword[ebx+offs_vert_zp+offs_zbup_z] ;v.zp.z = st0, st0 = st1 |
; color |
bt dword[eax+offs_cont_lighting_enabled],0 |
jnc @f |
mov ecx,ebx |
add ecx,offs_vert_zp+offs_zbup_b |
push ecx |
add ecx,offs_zbup_g-offs_zbup_b |
push ecx |
add ecx,offs_zbup_r-offs_zbup_g |
push ecx |
stdcall RGBFtoRGBI, dword[ebx+offs_vert_color],dword[ebx+offs_vert_color+4],dword[ebx+offs_vert_color+8] |
jmp .end_if |
@@: |
; no need to convert to integer if no lighting : take current color |
push ecx |
mov ecx,[eax+offs_cont_longcurrent_color] |
mov dword[ebx+offs_vert_zp+offs_zbup_r],ecx |
mov ecx,[eax+offs_cont_longcurrent_color+4] |
mov dword[ebx+offs_vert_zp+offs_zbup_g],ecx |
mov ecx,[eax+offs_cont_longcurrent_color+8] |
mov dword[ebx+offs_vert_zp+offs_zbup_b],ecx |
pop ecx |
.end_if: |
; texture |
bt dword[eax+offs_cont_texture_2d_enabled],0 |
jnc @f |
mov dword[point],dword(ZB_POINT_S_MAX - ZB_POINT_S_MIN) |
fild dword[point] |
fmul dword[ebx+offs_vert_tex_coord] ;st0 *= v.tex_coord.X |
fistp dword[ebx+offs_vert_zp+offs_zbup_s] |
add dword[ebx+offs_vert_zp+offs_zbup_s],ZB_POINT_S_MIN |
mov dword[point],dword(ZB_POINT_T_MAX - ZB_POINT_T_MIN) |
fild dword[point] |
fmul dword[ebx+offs_vert_tex_coord+4] ;st0 *= v.tex_coord.Y |
fistp dword[ebx+offs_vert_zp+offs_zbup_t] |
add dword[ebx+offs_vert_zp+offs_zbup_s],ZB_POINT_T_MIN |
@@: |
if DEBUG ;gl_transform_to_viewport |
push edi |
mov ecx,80 |
mov eax,[ebx+offs_vert_zp] |
lea edi,[buf_param] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[ebx+offs_vert_zp+offs_zbup_y] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[ebx+offs_vert_zp+offs_zbup_z] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,f_ttv,buf_param |
pop edi |
end if |
ret |
endp |
align 4 |
proc gl_add_select1 uses eax ebx ecx, context:dword, z1:dword,z2:dword,z3:dword |
mov eax,[z1] |
mov ebx,eax |
cmp [z2],eax |
jge @f |
mov eax,[z2] |
@@: |
cmp [z3],eax |
jge @f |
mov eax,[z3] |
@@: |
cmp [z2],ebx |
jle @f |
mov ebx,[z2] |
@@: |
cmp [z3],ebx |
jle @f |
mov ebx,[z3] |
@@: |
mov ecx,0xffffffff |
sub ecx,ebx |
push ecx |
mov ecx,0xffffffff |
sub ecx,eax |
push ecx |
stdcall gl_add_select, [context] ;,0xffffffff-eax,0xffffffff-ebx |
ret |
endp |
; point |
align 4 |
proc gl_draw_point uses eax ebx, context:dword, p0:dword |
mov ebx,[p0] |
cmp dword[ebx+offs_vert_clip_code],0 ;if (p0.clip_code == 0) |
jne @f |
mov eax,[context] |
cmp dword[eax+offs_cont_render_mode],GL_SELECT |
jne .els |
stdcall gl_add_select, eax,dword[ebx+offs_vert_zp+offs_zbup_z],dword[ebx+offs_vert_zp+offs_zbup_z] ;p0.zp.z,p0.zp.z |
jmp @f |
.els: |
add ebx,offs_vert_zp |
stdcall ZB_plot, dword[eax+offs_cont_zb],ebx |
@@: |
ret |
endp |
; line |
align 4 |
proc interpolate uses eax ebx ecx, q:dword,p0:dword,p1:dword,t:dword |
mov eax,[q] |
mov ebx,[p0] |
mov ecx,[p1] |
fld dword[t] |
; интерполяция по координатам |
fld dword[ecx+offs_vert_pc] |
fsub dword[ebx+offs_vert_pc] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_pc] |
fstp dword[eax+offs_vert_pc] |
fld dword[ecx+offs_vert_pc+4] |
fsub dword[ebx+offs_vert_pc+4] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_pc+4] |
fstp dword[eax+offs_vert_pc+4] |
fld dword[ecx+offs_vert_pc+8] |
fsub dword[ebx+offs_vert_pc+8] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_pc+8] |
fstp dword[eax+offs_vert_pc+8] |
fld dword[ecx+offs_vert_pc+12] |
fsub dword[ebx+offs_vert_pc+12] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_pc+12] |
fstp dword[eax+offs_vert_pc+12] |
; интерполяция по цвету |
fld dword[ecx+offs_vert_color] |
fsub dword[ebx+offs_vert_color] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_color] |
fstp dword[eax+offs_vert_color] |
fld dword[ecx+offs_vert_color+4] |
fsub dword[ebx+offs_vert_color+4] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_color+4] |
fstp dword[eax+offs_vert_color+4] |
fld dword[ecx+offs_vert_color+8] |
fsub dword[ebx+offs_vert_color+8] |
fmul st0,st1 |
fadd dword[ebx+offs_vert_color+8] |
fstp dword[eax+offs_vert_color+8] |
ret |
endp |
; |
; Line Clipping |
; |
; Line Clipping algorithm from 'Computer Graphics', Principles and |
; Practice |
; tmin,tmax -> &float |
align 4 |
proc ClipLine1 uses ebx, denom:dword,num:dword,tmin:dword,tmax:dword |
fldz |
fcom dword[denom] |
fstsw ax |
sahf |
je .u2 |
jmp @f |
.u2: |
fcom dword[num] |
fstsw ax |
sahf |
jb .r0 ;if (denom==0 && num>0) return 0 |
jmp .r1 |
@@: |
fcom dword[denom] |
fstsw ax |
sahf |
ja .els_0 ;if (0<denom) |
fld dword[num] |
fdiv dword[denom] |
mov ebx,[tmax] |
fcom dword[ebx] |
fstsw ax |
sahf |
ja .r0 ;if (t>*tmax) return 0 |
mov ebx,[tmin] |
fcom dword[ebx] |
fstsw ax |
sahf |
jbe .r1 |
fstp dword[ebx] ;if (t>*tmin) *tmin=t |
jmp .r1 |
.els_0: ;else if (0>denom) |
fld dword[num] |
fdiv dword[denom] |
mov ebx,[tmin] |
fcom dword[ebx] |
fstsw ax |
sahf |
jb .r0 ;if (t<*tmin) return 0 |
mov ebx,[tmax] |
fcom dword[ebx] |
fstsw ax |
sahf |
jae .r1 |
fstp dword[ebx] ;if (t<*tmin) *tmax=t |
jmp .r1 |
.r0: ;return 0 |
xor eax,eax |
jmp .end_f |
.r1: ;return 1 |
xor eax,eax |
inc eax |
.end_f: |
if DEBUG ;ClipLine1 |
push edi |
mov ecx,80 |
lea edi,[buf_param] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,f_cl1,buf_param |
pop edi |
end if |
ffree st0 ;профилактика для очистки стека |
fincstp ;как минимум одно значение в стеке уже есть |
ret |
endp |
align 4 |
proc gl_draw_line uses eax ebx edx edi esi, context:dword, p1:dword, p2:dword |
locals |
d_x dd ? |
d_y dd ? |
d_z dd ? |
d_w dd ? |
x1 dd ? |
y1 dd ? |
z1 dd ? |
w1 dd ? |
q1 GLVertex ? |
q2 GLVertex ? |
tmin dd ? ;ebp-8 |
tmax dd ? ;ebp-4 |
endl |
mov edx,[context] |
mov edi,[p1] |
mov esi,[p2] |
if DEBUG |
jmp @f |
f_1 db ' gl_draw_line',0 |
@@: |
stdcall dbg_print,f_1,m_1 |
end if |
cmp dword[edi+offs_vert_clip_code],0 |
jne .els_i |
cmp dword[esi+offs_vert_clip_code],0 |
jne .els_i |
;if ( (p1.clip_code | p2.clip_code) == 0) |
cmp dword[edx+offs_cont_render_mode],GL_SELECT ;if (context.render_mode == GL_SELECT) |
jne .els_1 |
stdcall gl_add_select1, edx,dword[edi+offs_vert_zp+offs_zbup_z],\ |
dword[esi+offs_vert_zp+offs_zbup_z],dword[esi+offs_vert_zp+offs_zbup_z] |
jmp .end_f |
.els_1: |
add edi,offs_vert_zp |
add esi,offs_vert_zp |
push esi |
push edi |
push dword[edx+offs_cont_zb] |
cmp dword[edx+offs_cont_depth_test],0 |
je .els_2 |
;if (context.depth_test) |
call ZB_line_z ;, dword[edx+offs_cont_zb],edi,esi |
jmp .end_f |
.els_2: |
call ZB_line ;, dword[edx+offs_cont_zb],edi,esi |
jmp .end_f |
.els_i: |
;else if ( (p1.clip_code & p2.clip_code) != 0 ) |
mov eax,[edi+offs_vert_clip_code] |
and eax,[esi+offs_vert_clip_code] |
cmp eax,0 |
jne .end_f |
.els_0: |
if DEBUG |
stdcall dbg_print,f_1,m_2 |
end if |
finit |
fld dword[esi+offs_vert_pc+offs_X] |
fsub dword[edi+offs_vert_pc+offs_X] |
fstp dword[d_x] ;d_x = p2.pc.X - p1.pc.X |
fld dword[esi+offs_vert_pc+offs_Y] |
fsub dword[edi+offs_vert_pc+offs_Y] |
fstp dword[d_y] ;d_y = p2.pc.Y - p1.pc.Y |
fld dword[esi+offs_vert_pc+offs_Z] |
fsub dword[edi+offs_vert_pc+offs_Z] |
fstp dword[d_z] ;d_z = p2.pc.Z - p1.pc.Z |
fld dword[esi+offs_vert_pc+offs_W] |
fsub dword[edi+offs_vert_pc+offs_W] |
fstp dword[d_w] ;d_w = p2.pc.W - p1.pc.W |
mov eax,[edi+offs_vert_pc+offs_X] |
mov [x1],eax ;x1 = p1.pc.X |
mov eax,[edi+offs_vert_pc+offs_Y] |
mov [y1],eax ;y1 = p1.pc.Y |
mov eax,[edi+offs_vert_pc+offs_Z] |
mov [z1],eax ;z1 = p1.pc.Z |
mov eax,[edi+offs_vert_pc+offs_W] |
mov [w1],eax ;w1 = p1.pc.W |
mov dword[tmin],0.0 |
mov dword[tmax],1.0 |
mov eax,ebp |
sub eax,4 |
push eax ;толкаем в стек адрес &tmax |
sub eax,4 |
push eax ;толкаем в стек адрес &tmin |
fld dword[x1] |
fadd dword[w1] |
fchs |
fstp dword[esp-4] |
fld dword[d_x] |
fadd dword[d_w] |
fstp dword[esp-8] |
sub esp,8 |
call ClipLine1 ;d_x+d_w,-x1-w1,&tmin,&tmax |
bt eax,0 |
jnc .end_f |
sub esp,8 ;толкаем в стек адреса переменных &tmin и &tmax |
fld dword[x1] |
fsub dword[w1] |
fstp dword[esp-4] |
fld dword[d_w] |
fsub dword[d_x] |
fstp dword[esp-8] |
sub esp,8 |
call ClipLine1 ;-d_x+d_w,x1-w1,&tmin,&tmax |
bt eax,0 |
jnc .end_f |
sub esp,8 ;толкаем в стек адреса переменных &tmin и &tmax |
fld dword[y1] |
fadd dword[w1] |
fchs |
fstp dword[esp-4] |
fld dword[d_y] |
fadd dword[d_w] |
fstp dword[esp-8] |
sub esp,8 |
call ClipLine1 ;d_y+d_w,-y1-w1,&tmin,&tmax |
bt eax,0 |
jnc .end_f |
sub esp,8 ;толкаем в стек адреса переменных &tmin и &tmax |
fld dword[y1] |
fsub dword[w1] |
fstp dword[esp-4] |
fld dword[d_w] |
fsub dword[d_y] |
fstp dword[esp-8] |
sub esp,8 |
call ClipLine1 ;-d_y+d_w,y1-w1,&tmin,&tmax |
bt eax,0 |
jnc .end_f |
sub esp,8 ;толкаем в стек адреса переменных &tmin и &tmax |
fld dword[z1] |
fadd dword[w1] |
fchs |
fstp dword[esp-4] |
fld dword[d_z] |
fadd dword[d_w] |
fstp dword[esp-8] |
sub esp,8 |
call ClipLine1 ;d_z+d_w,-z1-w1,&tmin,&tmax |
bt eax,0 |
jnc .end_f |
sub esp,8 ;толкаем в стек адреса переменных &tmin и &tmax |
fld dword[z1] |
fsub dword[w1] |
fstp dword[esp-4] |
fld dword[d_w] |
fsub dword[d_z] |
fstp dword[esp-8] |
sub esp,8 |
call ClipLine1 ;-d_z+d_w,z1-w1,&tmin,&tmax |
bt eax,0 |
jnc .end_f |
mov eax,ebp |
sub eax,8+2*sizeof.GLVertex ;eax = &q1 |
stdcall interpolate, eax,edi,esi,[tmin] |
stdcall gl_transform_to_viewport, edx,eax |
add eax,sizeof.GLVertex ;eax = &q2 |
stdcall interpolate, eax,edi,esi,[tmax] |
stdcall gl_transform_to_viewport, edx,eax |
sub eax,sizeof.GLVertex ;eax = &q1 |
mov ebx,eax |
add ebx,offs_vert_zp+offs_zbup_b |
push ebx |
add ebx,offs_zbup_g-offs_zbup_b |
push ebx |
add ebx,offs_zbup_r-offs_zbup_g |
push ebx |
stdcall RGBFtoRGBI, dword[eax+offs_vert_color],dword[eax+offs_vert_color+4],dword[eax+offs_vert_color+8] |
add eax,sizeof.GLVertex ;eax = &q2 |
mov ebx,eax |
add ebx,offs_vert_zp+offs_zbup_b |
push ebx |
add ebx,offs_zbup_g-offs_zbup_b |
push ebx |
add ebx,offs_zbup_r-offs_zbup_g |
push ebx |
stdcall RGBFtoRGBI, dword[eax+offs_vert_color],dword[eax+offs_vert_color+4],dword[eax+offs_vert_color+8] |
add eax,offs_vert_zp ;eax = &q2.zp |
push eax |
sub eax,sizeof.GLVertex ;eax = &q1.zp |
push eax |
push dword[edx+offs_cont_zb] |
cmp dword[edx+offs_cont_depth_test],0 |
je .els_3 |
call ZB_line_z ;(context.zb,&q1.zp,&q2.zp) |
jmp .end_f |
.els_3: |
call ZB_line ;(context.zb,&q1.zp,&q2.zp) |
.end_f: |
ret |
endp |
; triangle |
; |
; Clipping |
; |
; We clip the segment [a,b] against the 6 planes of the normal volume. |
; We compute the point 'c' of intersection and the value of the parameter 't' |
; of the intersection if x=a+t(b-a). |
; |
; sign: 0 -> '-', 1 -> '+' |
macro clip_func sign,dir,dir1,dir2 |
{ |
locals |
t dd ? |
d_X dd ? |
d_Y dd ? |
d_Z dd ? |
d_W dd ? |
endl |
mov edx,[a] |
mov ebx,[b] |
mov ecx,[c] |
fld dword[ebx] |
fsub dword[edx] |
fstp dword[d_X] ;d_X = (b.X - a.X) |
fld dword[ebx+4] |
fsub dword[edx+4] |
fstp dword[d_Y] ;d_Y = (b.Y - a.Y) |
fld dword[ebx+8] |
fsub dword[edx+8] |
fstp dword[d_Z] ;d_Z = (b.Z - a.Z) |
fld dword[ebx+12] |
fsub dword[edx+12] |
fst dword[d_W] ;d_W = (b.W - a.W) |
if sign eq 0 |
fadd dword[d#dir] |
else |
fsub dword[d#dir] |
end if |
fldz |
fcomp st1 |
fstsw ax |
sahf |
ja @f |
fincstp |
fst dword[t] ;t=0 |
jmp .e_zero |
@@: ;else |
fincstp |
fld dword[edx+offs#dir] |
if sign eq 0 |
fchs |
end if |
fsub dword[edx+offs_W] |
fdiv st0,st1 |
fst dword[t] ;t = ( sign a.dir - a.W) / den |
.e_zero: |
fmul dword[d#dir1] ;st0 = t * d.dir1 |
fadd dword[edx+offs#dir1] |
fstp dword[ecx+offs#dir1] ;c.dir1 = a.dir1 + t * d.dir1 |
fld dword[t] |
fmul dword[d#dir2] ;st0 = t * d.dir2 |
fadd dword[edx+offs#dir2] |
fstp dword[ecx+offs#dir2] ;c.dir2 = a.dir2 + t * d.dir2 |
fld dword[t] |
fmul dword[d_W] |
fadd dword[edx+offs_W] |
fst dword[ecx+offs_W] ;c.W = a.W + t * d_W |
if sign eq 0 |
fchs |
end if |
fstp dword[ecx+offs#dir] ;c.dir = sign c.W |
mov eax,[t] |
} |
align 4 |
proc clip_xmin uses ebx ecx edx, c:dword, a:dword, b:dword |
clip_func 0,_X,_Y,_Z |
ret |
endp |
align 4 |
proc clip_xmax uses ebx ecx edx, c:dword, a:dword, b:dword |
clip_func 1,_X,_Y,_Z |
ret |
endp |
align 4 |
proc clip_ymin uses ebx ecx edx, c:dword, a:dword, b:dword |
clip_func 0,_Y,_X,_Z |
ret |
endp |
align 4 |
proc clip_ymax uses ebx ecx edx, c:dword, a:dword, b:dword |
clip_func 1,_Y,_X,_Z |
ret |
endp |
align 4 |
proc clip_zmin uses ebx ecx edx, c:dword, a:dword, b:dword |
clip_func 0,_Z,_X,_Y |
ret |
endp |
align 4 |
proc clip_zmax uses ebx ecx edx, c:dword, a:dword, b:dword |
clip_func 1,_Z,_X,_Y |
ret |
endp |
align 4 |
clip_proc dd clip_xmin,clip_xmax, clip_ymin,clip_ymax, clip_zmin,clip_zmax |
;static inline void updateTmp(GLContext *c, GLVertex *q,GLVertex *p0,GLVertex *p1,float t) |
;{ |
; if (c->current_shade_model == GL_SMOOTH) { |
; q->color.v[0]=p0->color.v[0] + (p1->color.v[0]-p0->color.v[0])*t; |
; q->color.v[1]=p0->color.v[1] + (p1->color.v[1]-p0->color.v[1])*t; |
; q->color.v[2]=p0->color.v[2] + (p1->color.v[2]-p0->color.v[2])*t; |
; } else { |
; q->color.v[0]=p0->color.v[0]; |
; q->color.v[1]=p0->color.v[1]; |
; q->color.v[2]=p0->color.v[2]; |
; } |
; if (c->texture_2d_enabled) { |
; q->tex_coord.X=p0->tex_coord.X + (p1->tex_coord.X-p0->tex_coord.X)*t; |
; q->tex_coord.Y=p0->tex_coord.Y + (p1->tex_coord.Y-p0->tex_coord.Y)*t; |
; } |
; q->clip_code=gl_clipcode(q->pc.X,q->pc.Y,q->pc.Z,q->pc.W); |
; if (q->clip_code==0){ |
; gl_transform_to_viewport(c,q); |
; RGBFtoRGBI(q->color.v[0],q->color.v[1],q->color.v[2],q->zp.r,q->zp.g,q->zp.b); |
; } |
;} |
;static void gl_draw_triangle_clip(GLContext *c, GLVertex *p0,GLVertex *p1,GLVertex *p2,int clip_bit); |
;void gl_draw_triangle(GLContext *c, GLVertex *p0,GLVertex *p1,GLVertex *p2) |
;{ |
; int co,c_and,cc[3],front; |
; float norm; |
; |
; cc[0]=p0->clip_code; |
; cc[1]=p1->clip_code; |
; cc[2]=p2->clip_code; |
; |
; co=cc[0] | cc[1] | cc[2]; |
; |
; /* we handle the non clipped case here to go faster */ |
; if (co==0) { |
; |
; norm=(float)(p1->zp.x-p0->zp.x)*(float)(p2->zp.y-p0->zp.y)- |
; (float)(p2->zp.x-p0->zp.x)*(float)(p1->zp.y-p0->zp.y); |
; |
; if (norm == 0) return; |
; |
; front = norm < 0.0; |
; front = front ^ c->current_front_face; |
; |
; /* back face culling */ |
; if (c->cull_face_enabled) { |
; /* most used case first */ |
; if (c->current_cull_face == GL_BACK) { |
; if (front == 0) return; |
; c->draw_triangle_front(c,p0,p1,p2); |
; } else if (c->current_cull_face == GL_FRONT) { |
; if (front != 0) return; |
; c->draw_triangle_back(c,p0,p1,p2); |
; } else { |
; return; |
; } |
; } else { |
; /* no culling */ |
; if (front) { |
; c->draw_triangle_front(c,p0,p1,p2); |
; } else { |
; c->draw_triangle_back(c,p0,p1,p2); |
; } |
; } |
; } else { |
; c_and=cc[0] & cc[1] & cc[2]; |
; if (c_and==0) { |
; gl_draw_triangle_clip(c,p0,p1,p2,0); |
; } |
; } |
;} |
;static void gl_draw_triangle_clip(GLContext *c, GLVertex *p0,GLVertex *p1,GLVertex *p2,int clip_bit) |
;{ |
; int co,c_and,co1,cc[3],edge_flag_tmp,clip_mask; |
; GLVertex tmp1,tmp2,*q[3]; |
; float tt; |
; cc[0]=p0->clip_code; |
; cc[1]=p1->clip_code; |
; cc[2]=p2->clip_code; |
; co=cc[0] | cc[1] | cc[2]; |
; if (co == 0) { |
; gl_draw_triangle(c,p0,p1,p2); |
; } else { |
; c_and=cc[0] & cc[1] & cc[2]; |
; /* the triangle is completely outside */ |
; if (c_and!=0) return; |
; /* find the next direction to clip */ |
; while (clip_bit < 6 && (co & (1 << clip_bit)) == 0) { |
; clip_bit++; |
; } |
; /* this test can be true only in case of rounding errors */ |
; if (clip_bit == 6) { |
;#if 0 |
; printf("Error:\n"); |
; printf("%f %f %f %f\n",p0->pc.X,p0->pc.Y,p0->pc.Z,p0->pc.W); |
; printf("%f %f %f %f\n",p1->pc.X,p1->pc.Y,p1->pc.Z,p1->pc.W); |
; printf("%f %f %f %f\n",p2->pc.X,p2->pc.Y,p2->pc.Z,p2->pc.W); |
;#endif |
; return; |
; } |
; clip_mask = 1 << clip_bit; |
; co1=(cc[0] ^ cc[1] ^ cc[2]) & clip_mask; |
; if (co1) { |
; /* one point outside */ |
; if (cc[0] & clip_mask) { q[0]=p0; q[1]=p1; q[2]=p2; } |
; else if (cc[1] & clip_mask) { q[0]=p1; q[1]=p2; q[2]=p0; } |
; else { q[0]=p2; q[1]=p0; q[2]=p1; } |
; |
; tt=clip_proc[clip_bit](&tmp1.pc,&q[0]->pc,&q[1]->pc); |
; updateTmp(c,&tmp1,q[0],q[1],tt); |
; |
; tt=clip_proc[clip_bit](&tmp2.pc,&q[0]->pc,&q[2]->pc); |
; updateTmp(c,&tmp2,q[0],q[2],tt); |
; |
; tmp1.edge_flag=q[0]->edge_flag; |
; edge_flag_tmp=q[2]->edge_flag; |
; q[2]->edge_flag=0; |
; gl_draw_triangle_clip(c,&tmp1,q[1],q[2],clip_bit+1); |
; |
; tmp2.edge_flag=0; |
; tmp1.edge_flag=0; |
; q[2]->edge_flag=edge_flag_tmp; |
; gl_draw_triangle_clip(c,&tmp2,&tmp1,q[2],clip_bit+1); |
; } else { |
; /* two points outside */ |
; if ((cc[0] & clip_mask)==0) { q[0]=p0; q[1]=p1; q[2]=p2; } |
; else if ((cc[1] & clip_mask)==0) { q[0]=p1; q[1]=p2; q[2]=p0; } |
; else { q[0]=p2; q[1]=p0; q[2]=p1; } |
; tt=clip_proc[clip_bit](&tmp1.pc,&q[0]->pc,&q[1]->pc); |
; updateTmp(c,&tmp1,q[0],q[1],tt); |
; tt=clip_proc[clip_bit](&tmp2.pc,&q[0]->pc,&q[2]->pc); |
; updateTmp(c,&tmp2,q[0],q[2],tt); |
; tmp1.edge_flag=1; |
; tmp2.edge_flag=q[2]->edge_flag; |
; gl_draw_triangle_clip(c,q[0],&tmp1,&tmp2,clip_bit+1); |
; } |
; } |
;} |
align 4 |
proc gl_draw_triangle_select uses eax, context:dword, p0:dword,p1:dword,p2:dword |
mov eax,[p2] |
push dword[eax+offs_vert_zp+offs_Z] |
mov eax,[p1] |
push dword[eax+offs_vert_zp+offs_Z] |
mov eax,[p0] |
push dword[eax+offs_vert_zp+offs_Z] |
stdcall gl_add_select1, [context] ;,p0.zp.z, p1.zp.z, p2.zp.z |
ret |
endp |
;#ifdef PROFILE |
;int count_triangles,count_triangles_textured,count_pixels; |
;#endif |
align 4 |
proc gl_draw_triangle_fill uses eax edx, context:dword, p0:dword,p1:dword,p2:dword |
;#ifdef PROFILE |
; { |
; int norm; |
; assert(p0->zp.x >= 0 && p0->zp.x < c->zb->xsize); |
; assert(p0->zp.y >= 0 && p0->zp.y < c->zb->ysize); |
; assert(p1->zp.x >= 0 && p1->zp.x < c->zb->xsize); |
; assert(p1->zp.y >= 0 && p1->zp.y < c->zb->ysize); |
; assert(p2->zp.x >= 0 && p2->zp.x < c->zb->xsize); |
; assert(p2->zp.y >= 0 && p2->zp.y < c->zb->ysize); |
; norm=(p1->zp.x-p0->zp.x)*(p2->zp.y-p0->zp.y)- |
; (p2->zp.x-p0->zp.x)*(p1->zp.y-p0->zp.y); |
; count_pixels+=abs(norm)/2; |
; count_triangles++; |
; } |
;#endif |
mov edx,[context] |
cmp dword[edx+offs_cont_texture_2d_enabled],0 |
je .els_i |
;if (context.texture_2d_enabled) |
;#ifdef PROFILE |
; count_triangles_textured++; |
;#endif |
mov eax,dword[edx+offs_cont_current_texture] |
mov eax,[eax] ;переход по указателю |
;так как offs_text_images+offs_imag_pixmap = 0 то context.current_texture.images[0].pixmap = [eax] |
stdcall ZB_setTexture, dword[edx+offs_cont_zb],dword[eax] |
; ZB_fillTriangleMappingPerspective, dword[edx+offs_cont_zb],&p0->zp,&p1->zp,&p2->zp); |
jmp .end_f |
.els_i: |
cmp dword[edx+offs_cont_current_shade_model],GL_SMOOTH |
jne .els |
;else if (context.current_shade_model == GL_SMOOTH) |
; ZB_fillTriangleSmooth, dword[edx+offs_cont_zb],&p0->zp,&p1->zp,&p2->zp); |
jmp .end_f |
.els: |
; ZB_fillTriangleFlat, dword[edx+offs_cont_zb],&p0->zp,&p1->zp,&p2->zp); |
.end_f: |
ret |
endp |
; Render a clipped triangle in line mode |
align 4 |
proc gl_draw_triangle_line uses eax ebx ecx edx, context:dword, p0:dword,p1:dword,p2:dword |
mov edx,[context] |
cmp dword[edx+offs_cont_depth_test],0 |
je .els |
lea ecx,[ZB_line_z] |
jmp @f |
.els: |
lea ecx,[ZB_line] |
@@: |
;if (p0.edge_flag) ZB_line_z(context.zb,&p0.zp,&p1.zp) |
mov eax,[p0] |
cmp dword[eax+offs_vert_edge_flag],0 |
je @f |
mov ebx,eax |
add ebx,offs_vert_zp |
mov eax,[p1] |
add eax,offs_vert_zp |
stdcall ecx,dword[edx+offs_cont_zb],ebx,eax |
@@: |
;if (p1.edge_flag) ZB_line_z(context.zb,&p1.zp,&p2.zp) |
mov eax,[p1] |
cmp dword[eax+offs_vert_edge_flag],0 |
je @f |
mov ebx,eax |
add ebx,offs_vert_zp |
mov eax,[p2] |
add eax,offs_vert_zp |
stdcall ecx,dword[edx+offs_cont_zb],ebx,eax |
@@: |
;if (p2.edge_flag) ZB_line_z(context.zb,&p2.zp,&p0.zp); |
mov eax,[p2] |
cmp dword[eax+offs_vert_edge_flag],0 |
je @f |
mov ebx,eax |
add ebx,offs_vert_zp |
mov eax,[p0] |
add eax,offs_vert_zp |
stdcall ecx,dword[edx+offs_cont_zb],ebx,eax |
@@: |
ret |
endp |
; Render a clipped triangle in point mode |
align 4 |
proc gl_draw_triangle_point uses eax ebx edx, context:dword, p0:dword,p1:dword,p2:dword |
mov edx,[context] |
mov eax,[p0] |
cmp dword[eax+offs_vert_edge_flag],0 |
je @f |
mov ebx,eax |
add ebx,offs_vert_zp |
stdcall ZB_plot,dword[edx+offs_cont_zb],ebx |
@@: |
add eax,[p1] |
cmp dword[eax+offs_vert_edge_flag],0 |
je @f |
mov ebx,eax |
add ebx,offs_vert_zp |
stdcall ZB_plot,dword[edx+offs_cont_zb],ebx |
@@: |
add eax,[p2] |
cmp dword[eax+offs_vert_edge_flag],0 |
je @f |
mov ebx,eax |
add ebx,offs_vert_zp |
stdcall ZB_plot,dword[edx+offs_cont_zb],ebx |
@@: |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/export.inc |
---|
0,0 → 1,164 |
; |
; Export functions (103) |
; |
E_LIB glEnable ;(int code) |
E_LIB glDisable ;(int code) |
E_LIB glShadeModel ;(int mode) |
E_LIB glCullFace ;(int mode) |
E_LIB glPolygonMode ;(int face,int mode) |
E_LIB glBegin ;(int type) |
E_LIB glEnd ;(void) |
E_LIB glVertex2f ;(float ,float) |
E_LIB glVertex2d ;(double ,double) |
E_LIB glVertex2fv ;(float *) |
E_LIB glVertex2dv ;(double *) |
E_LIB glVertex3f ;(float ,float ,float) |
E_LIB glVertex3d ;(double ,double ,double) |
E_LIB glVertex3fv ;(float *) |
E_LIB glVertex3dv ;(double *) |
E_LIB glVertex4f ;(float ,float ,float, float ) |
E_LIB glVertex4d ;(double ,double ,double, double ) |
E_LIB glVertex4fv ;(float *) |
E_LIB glVertex4dv ;(double *) |
E_LIB glColor3f ;(float ,float ,float) |
E_LIB glColor3d ;(double ,double ,double) |
E_LIB glColor3fv ;(float *) |
E_LIB glColor3dv ;(double *) |
E_LIB glColor4f ;(float ,float ,float, float ) |
E_LIB glColor4d ;(double ,double ,double, double ) |
E_LIB glColor4fv ;(float *) |
E_LIB glColor4dv ;(double *) |
E_LIB glNormal3f ;(float ,float ,float) |
E_LIB glNormal3d ;(double ,double ,double) |
E_LIB glNormal3fv ;(float *) |
E_LIB glNormal3dv ;(double *) |
E_LIB glTexCoord1f ;(float) |
E_LIB glTexCoord1d ;(double) |
E_LIB glTexCoord1fv ;(float *) |
E_LIB glTexCoord1dv ;(double *) |
E_LIB glTexCoord2f ;(float ,float) |
E_LIB glTexCoord2d ;(double ,double) |
E_LIB glTexCoord2fv ;(float *) |
E_LIB glTexCoord2dv ;(double *) |
E_LIB glTexCoord3f ;(float ,float ,float) |
E_LIB glTexCoord3d ;(double ,double ,double) |
E_LIB glTexCoord3fv ;(float *) |
E_LIB glTexCoord3dv ;(double *) |
E_LIB glTexCoord4f ;(float ,float ,float, float ) |
E_LIB glTexCoord4d ;(double ,double ,double, double ) |
E_LIB glTexCoord4fv ;(float *) |
E_LIB glTexCoord4dv ;(double *) |
E_LIB glEdgeFlag ;(int flag) |
; matrix |
E_LIB glMatrixMode ;(int mode) |
E_LIB glLoadMatrixf ;(const float *m) |
E_LIB glLoadIdentity ;(void) |
E_LIB glMultMatrixf ;(const float *m) |
E_LIB glPushMatrix ;(void) |
E_LIB glPopMatrix ;(void) |
E_LIB glRotatef ;(float angle,float x,float y,float z) |
E_LIB glTranslatef ;(float x,float y,float z) |
E_LIB glScalef ;(float x,float y,float z) |
E_LIB glViewport ;(int x,int y,int width,int height) |
E_LIB glFrustum ;(double left,double right,double bottom,double top, double near_,double far_); |
; lists |
E_LIB glGenLists ;(int range) |
E_LIB glIsList ;(unsigned int list) |
E_LIB glNewList ;(unsigned int list,int mode) |
E_LIB glEndList ;(void) |
E_LIB glCallList ;(unsigned int list) |
; clear |
E_LIB glClear ;(int mask) |
E_LIB glClearColor ;(float r,float g,float b,float a) |
E_LIB glClearDepth ;(double depth) |
; selection |
E_LIB glRenderMode ;(int mode) |
E_LIB glSelectBuffer ;(int size,unsigned int *buf) |
E_LIB glInitNames ;(void) |
E_LIB glPushName ;(unsigned int name) |
E_LIB glPopName ;(void) |
E_LIB glLoadName ;(unsigned int name) |
; textures |
E_LIB glGenTextures ;(int n, unsigned int *textures) |
E_LIB glDeleteTextures ;(int n, const unsigned int *textures) |
E_LIB glBindTexture ;(int target,int texture) |
E_LIB glTexImage2D ;( int target, int level, int components, int width, int height, int border, int format, int type, void *pixels) |
E_LIB glTexEnvi ;(int target,int pname,int param) |
E_LIB glTexParameteri ;(int target,int pname,int param) |
E_LIB glPixelStorei ;(int pname,int param) |
; lighting |
E_LIB glMaterialfv ;(int mode,int type,float *v) |
E_LIB glMaterialf ;(int mode,int type,float v) |
E_LIB glColorMaterial ;(int mode,int type) |
E_LIB glLightfv ;(int light,int type,float *v) |
E_LIB glLightf ;(int light,int type,float v) |
E_LIB glLightModeli ;(int pname,int param) |
E_LIB glLightModelfv ;(int pname,float *param) |
; misc |
E_LIB glFlush ;(void) |
E_LIB glHint ;(int target,int mode) |
E_LIB glGetIntegerv ;(int pname,int *params) |
E_LIB glGetFloatv ;(int pname, float *v) |
E_LIB glFrontFace ;(int mode) |
; opengl 1.2 arrays |
E_LIB glEnableClientState ;(GLenum array) |
E_LIB glDisableClientState ;(GLenum array) |
E_LIB glArrayElement ;(GLint i) |
E_LIB glVertexPointer ;(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) |
E_LIB glColorPointer ;(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) |
E_LIB glNormalPointer ;(GLenum type, GLsizei stride, const GLvoid *pointer) |
E_LIB glTexCoordPointer ;(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) |
; opengl 1.2 polygon offset |
E_LIB glPolygonOffset ;(GLfloat factor, GLfloat units) |
; not implemented, just added to compile |
;inline void glPointSize(float) {} |
;inline void glLineWidth(float) {} |
;inline void glDeleteLists(int, int) {} |
;inline void glDepthFunc(int) {} |
;inline void glBlendFunc(int, int) {} |
;inline void glTexEnvf(int, int, int) {} |
;inline void glOrtho(float,float,float,float,float,float){} |
;inline void glVertex2i(int,int) {} |
;inline void glDepthMask(int) {} |
;inline void glFogi(int, int) {} |
;inline void glFogfv(int, const float*) {} |
;inline void glFogf(int, float) {} |
;inline void glRasterPos2f(float, float) {} |
;inline void glPolygonStipple(void*) {} |
;inline void glTexParameterf(int, int, int) {}; |
; non compatible functions |
E_LIB glDebug ;(int mode) |
E_LIB glInit ;(void *zbuffer) |
E_LIB glClose ;(void) |
; |
; Kolibri OS functions |
; |
E_LIB kosglMakeCurrent |
E_LIB kosglSwapBuffers |
purge E_LIB |
/programs/develop/libraries/TinyGL/asm_fork/info_fun_float.inc |
---|
0,0 → 1,326 |
; |
; äãªæ¨¨ ¤«ï à ¡®âë á ç¨á« ¬¨ float |
; |
; ®«¨ç¥á⢮ § ª®¢ ç¨á« ¯®á«¥ § ¯ï⮩ (1-17) |
NumberSymbolsAD DW 5 |
; ®áâ âë (10 ¢ á⥯¥¨ N) |
MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5 |
DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10 |
DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15 |
DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20 |
DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25 |
DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30 |
DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35 |
DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40 |
DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45 |
DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50 |
DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55 |
DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60 |
DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65 |
DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70 |
DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75 |
DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80 |
DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85 |
DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90 |
DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95 |
DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100 |
DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105 |
DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110 |
DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115 |
DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120 |
DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125 |
DQ 1.0E126,1.0E127,1.0E128 |
; ¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©®© â®ç®á⨠|
Data_Double DQ ? |
; ¨á«® ¢ BCD-ä®à¬ ⥠|
Data_BCD DT ? |
; ᯮ¬®£ ⥫ìë© ä« £ |
Data_Flag DB ? |
; ª १ã«ìâ â (¥á«¨ ¥ 0 - ®âà¨æ ⥫쮥 ç¨á«®) |
Data_Sign DB ? |
db 0 ;㪠§ ⥫ì ᤢ¨£ ¢ ¯ ¬ï⨠|
; âப ¤«ï åà ¥¨ï ç¨á« ¢ ª®¤¥ ASCII |
Data_String DB 32 DUP (?) |
;******************************************************* |
;* * |
;* ¨á«® ¨¬¥¥â ä®à¬ â á 㤢®¥®© â®ç®áâìî, १ã«ìâ â * |
;* ¢ë¤ ¥âáï ¢ ¤¥áïâ¨ç®¬ ª®¤¥, ¢ "¡ë⮢®¬" ä®à¬ ⥠á * |
;* 䨪á¨à®¢ ë¬ ª®«¨ç¥á⢮¬ § ª®¢ ¯®á«¥ § ¯ï⮩. * |
;* å®¤ë¥ ¯ à ¬¥âàë: * |
;* Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®; * |
;* NumberSymbolsAD - ª®«¨ç¥á⢮ § ª®¢ ¯®á«¥ * |
;* § ¯ï⮩ (0-17). * |
;* ëå®¤ë¥ ¯ à ¬¥âàë: * |
;* Data_String - áâப -१ã«ìâ â. * |
;******************************************************* |
DoubleFloat_to_String: |
pushad |
; ¥§ã«ìâ â § ¯¨áë¢ âì ¢ áâபã Data_String |
lea EDI, [Data_String] |
; ¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® NumberSymbolsAD |
; ¤¥áïâ¨çëå à §à冷¢ |
fninit ;á¡à®á ᮯà®æ¥áá®à |
fld [Data_Double] ;§ £à㧨âì ç¨á«® |
xor ebx,ebx |
mov BX,[NumberSymbolsAD] |
cmp BX, 0 |
je .NoShifts ;¥â æ¨äà ¯®á«¥ § ¯ï⮩ |
jl .Error ;®è¨¡ª |
dec BX |
shl BX, 3 ;㬮¦ ¥¬ 8 |
lea eax,[MConst] |
add EBX, eax |
fmul qword [EBX] ;㬮¦¨âì ª®áâ âã |
.NoShifts: |
; §¢«¥çì ç¨á«® ¢ ª®¤¥ BCD |
fbstp [Data_BCD] |
; ஢¥à¨âì १ã«ìâ â ¯¥à¥¯®«¥¨¥ |
mov AX,word [Data_BCD + 8] |
cmp AX,0FFFFh ;"¤¥áïâ¨ç®¥" ¯¥à¥¯®«¥¨¥? |
je .Overflow |
; 뤥«¨âì § ª ç¨á« ¨ § ¯¨á âì ¥£® ¢ ASCII-ª®¤¥ |
mov AL, byte [Data_BCD + 9] |
and AL,AL |
jz .NoSign |
mov AL,'-' |
stosb |
.NoSign: |
; ᯠª®¢ âì ç¨á«® ¢ ª®¤ ASCII |
mov ebx,8 ;ᬥ饨¥ ¯®á«¥¤¥© ¯ àë æ¨äà |
mov ecx,9 ;áç¥â稪 ¯ à æ¨äà |
; ¯à¥¤¥«¨âì ¯®§¨æ¨î ¤¥áïâ¨ç®© â®çª¨ ¢ ç¨á«¥ |
mov DX,18 |
sub DX,[NumberSymbolsAD] |
js .Error ;®è¨¡ª , ¥á«¨ ®âà¨æ ⥫ì ï |
jz .Error ;¨«¨ ã«¥¢ ï ¯®§¨æ¨ï |
.NextPair: |
; £à㧨âì ®ç¥à¥¤ãî ¯ àã à §à冷¢ |
mov AL, byte [ebx + Data_BCD] |
mov AH,AL |
; 뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨ |
; á®åà ¨âì áâ àèãî â¥âà ¤ã |
shr AL,4 |
add AL,'0' |
stosb |
dec DX |
jnz .N0 |
mov AL,'.' |
stosb |
.N0: ; 뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨ |
; á®åà ¨âì ¬« ¤èãî â¥âà ¤ã |
mov AL,AH |
and AL,0Fh |
add AL,'0' |
stosb |
dec DX |
jnz .N1 |
mov AL,'.' |
stosb |
.N1: |
dec BX |
loop .NextPair |
mov AL,0 |
stosb |
; ¡à âì ¥§ ç 騥 㫨 á«¥¢ |
lea EDI, [Data_String] |
lea ESI, [Data_String] |
; யãáâ¨âì § ª ç¨á« , ¥á«¨ ® ¥áâì |
cmp byte [ESI],'-' |
jne .N2 |
inc ESI |
inc EDI |
.N2: ; £à㧨âì ¢ áç¥â稪 横« ª®«¨ç¥á⢮ à §à冷¢ |
; ç¨á« ¯«îá 1 (¡ ©â ¤¥áïâ¨ç®© â®çª¨) |
mov ecx,18+1+1 |
; யãáâ¨âì ¥§ ç 騥 㫨 |
.N3: |
cmp byte [ESI],'0' |
jne .N4 |
cmp byte [ESI+1],'.' |
je .N4 |
inc ESI |
loop .N3 |
; 訡ª - ¥â § ç é¨å æ¨äà |
jmp .Error |
; ª®¯¨à®¢ âì § ç éãî ç áâì ç¨á« ¢ ç «® áâப¨ |
.N4: rep movsb |
jmp .End |
; 訡ª |
.Error: |
mov AL,'E' |
stosb |
mov AL,'R' |
stosb |
mov AL,'R' |
stosb |
xor AL,AL |
stosb |
jmp .End |
; ¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
.Overflow: |
mov AL,'#' |
stosb |
xor AL,AL |
stosb |
; ®¥æ ¯à®æ¥¤ãàë |
.End: |
popad |
ret |
;**************************************************** |
;* * |
;* (ç¨á«® ¨¬¥¥â ®¡ëçë©, "¡ë⮢®©" ä®à¬ â) * |
;* å®¤ë¥ ¯ à ¬¥âàë: * |
;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII. * |
;* ëå®¤ë¥ ¯ à ¬¥âàë: * |
;* Data_Double - ç¨á«® ¢ ¤¢®¨ç®¬ ª®¤¥. * |
;**************************************************** |
String_to_DoubleFloat: |
pushad |
cld |
; ç¨é ¥¬ Data_BCD |
mov dword [Data_BCD],0 |
mov dword [Data_BCD+4],0 |
mov word [Data_BCD+8],0 |
; ç¨é ¥¬ ¡ ©â § ª |
mov [Data_Sign],0 |
; ®á¨¬ ¢ SI 㪠§ ⥫ì áâபã |
lea ESI, [Data_String] |
; யã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬ |
mov ecx,64 ;§ é¨â ®â § 横«¨¢ ¨ï |
.ShiftIgnore: |
lodsb |
cmp AL,' ' |
jne .ShiftIgnoreEnd |
loop .ShiftIgnore |
jmp .Error |
.ShiftIgnoreEnd: |
; ஢¥à塞 § ª ç¨á« |
cmp AL,'-' |
jne .Positive |
mov [Data_Sign],80h |
lodsb |
.Positive: |
mov [Data_Flag],0 ;¯à¨§ ª «¨ç¨ï â®çª¨ |
mov DX,0 ;¯®§¨æ¨ï â®çª¨ |
mov ecx,18 ;¬ ªá. ç¨á«® à §à冷¢ |
.ASCIItoBCDConversion: |
cmp AL,'.' ;â®çª ? |
jne .NotDot |
cmp [Data_Flag],0 ;â®çª ¥ ¢áâà¥ç « áì? |
jne .Error |
mov [Data_Flag],1 |
lodsb |
cmp AL,0 ;ª®¥æ áâப¨? |
jne .NotDot |
jmp .ASCIItoBCDConversionEnd |
.NotDot: |
; ¢¥«¨ç¨âì 1 § 票¥ ¯®§¨æ¨¨ â®çª¨, |
; ¥á«¨ ® ¥é¥ ¥ ¢áâà¥ç « áì |
cmp [Data_Flag],0 |
jnz .Figures |
inc DX |
.Figures: |
; ¨¬¢®«ë ç¨á« ¤®«¦ë ¡ëâì æ¨äà ¬¨ |
cmp AL,'0' |
jb .Error |
cmp AL,'9' |
ja .Error |
; ¨è¥¬ ®ç¥à¥¤ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD |
and AL,0Fh |
or byte [Data_BCD],AL |
; ஢¥àª ª®¥æ áâப¨ |
cmp byte [ESI],0 |
je .ASCIItoBCDConversionEnd |
; ¤¢¨£ ¥¬ BCD 4 à §àï¤ ¢«¥¢® |
; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â ) |
mov AX,word [Data_BCD+6] |
shld word [Data_BCD+8],AX,4 |
; (ᤢ¨£ ¥¬ á।¨¥ 4 ¡ ©â ) |
mov EAX, dword [Data_BCD] |
shld dword [Data_BCD+4],EAX,4 |
; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â ) |
shl dword [Data_BCD],4 |
; £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL |
lodsb |
loop .ASCIItoBCDConversion |
; ᫨ 19-© ᨬ¢®« ¥ 0 ¨ ¥ â®çª , |
; â® ®è¨¡ª ¯¥à¥¯®«¥¨ï |
cmp AL,'.' |
jne .NotDot2 |
inc ecx |
lodsb |
.NotDot2: |
cmp AL,0 |
jne .Error ;¯¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
; BCD |
.ASCIItoBCDConversionEnd: |
; ¯¨á âì § ª ¢ áâ à訩 ¡ ©â |
mov AL,[Data_Sign] |
mov byte [Data_BCD+9],AL |
; ¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à |
fninit |
; £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ ⥠|
fbld [Data_BCD] |
; ëç¨á«¨âì ®¬¥à ¤¥«¨â¥«ï |
mov EBX,18+1 |
sub BX,CX |
sub BX,DX |
cmp EBX,0 |
je .NoDiv |
dec EBX |
shl EBX,3 ;㬮¦ ¥¬ 8 |
lea eax,[MConst] |
add EBX,eax |
fdiv qword [EBX] ;à §¤¥«¨âì ª®áâ âã |
.NoDiv:; ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç®¬ ä®à¬ ⥠|
fstp [Data_Double] |
jmp .End |
.Error:; ਠ«î¡®© ®è¨¡ª¥ ®¡ã«¨âì १ã«ìâ â |
fldz ;§ ¥á⨠®«ì á á⥪ ᮯà®æ¥áá®à |
fstp [Data_Double] |
.End: |
popad |
ret |
align 4 |
proc str_cat, str1:dword, str2:dword |
push eax ecx edi esi |
mov esi,dword[str2] |
stdcall str_len,esi |
mov ecx,eax |
inc ecx |
mov edi,dword[str1] |
stdcall str_len,edi |
add edi,eax |
cld |
repne movsb |
pop esi edi ecx eax |
ret |
endp |
;output: |
; eax = strlen |
align 4 |
proc str_len, str1:dword |
mov eax,[str1] |
@@: |
cmp byte[eax],0 |
je @f |
inc eax |
jmp @b |
@@: |
sub eax,[str1] |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/init.asm |
---|
0,0 → 1,207 |
align 4 |
proc initSharedState uses eax ebx, context:dword |
mov ebx,[context] |
stdcall gl_zalloc, 4*MAX_DISPLAY_LISTS |
mov [ebx+offs_cont_shared_state],eax ;...lists=gl_zalloc(...) |
stdcall gl_zalloc, 4*TEXTURE_HASH_TABLE_SIZE |
mov [ebx+offs_cont_shared_state+4],eax ;...texture_hash_table=gl_zalloc(...) |
stdcall alloc_texture, [context],0 |
ret |
endp |
align 4 |
proc endSharedState uses eax ebx, context:dword |
mov ebx,[context] |
mov ebx,[ebx+offs_cont_shared_state] |
; int i; |
; for(i=0;i<MAX_DISPLAY_LISTS;i++) { |
; /* TODO */ |
; } |
stdcall gl_free, dword[ebx] ;lists |
stdcall gl_free, dword[ebx+4] ;texture_hash_table |
ret |
endp |
align 4 |
proc glInit uses eax ebx ecx edx, zbuffer1:dword |
; int i; |
stdcall gl_zalloc,sizeof.GLContext |
mov dword[gl_ctx],eax |
mov edx,eax |
mov ecx,[zbuffer1] |
mov dword[edx+offs_cont_zb],ecx |
; allocate GLVertex array |
mov dword[edx+offs_cont_vertex_max],POLYGON_MAX_VERTEX |
stdcall gl_malloc, POLYGON_MAX_VERTEX*sizeof.GLVertex |
mov dword[edx+offs_cont_vertex],eax |
; viewport |
mov dword[edx+offs_cont_viewport+offs_vpor_xmin],0 |
mov dword[edx+offs_cont_viewport+offs_vpor_ymin],0 |
mov eax,[ecx+offs_zbuf_xsize] |
mov dword[edx+offs_cont_viewport+offs_vpor_xsize], eax |
mov eax,[ecx+offs_zbuf_ysize] |
mov dword[edx+offs_cont_viewport+offs_vpor_ysize], eax |
mov dword[edx+offs_cont_viewport+offs_vpor_updated],1 |
; shared state |
stdcall initSharedState,edx |
; lists |
mov dword[edx+offs_cont_exec_flag],1 |
mov dword[edx+offs_cont_compile_flag],0 |
mov dword[edx+offs_cont_print_flag],0 |
mov dword[edx+offs_cont_in_begin],0 |
; lights |
mov ecx,MAX_LIGHTS |
mov eax,edx |
add eax,offs_cont_lights |
.cycle_0: |
gl_V4_New eax+offs_ligh_ambient, 0.0,0.0,0.0,1.0 |
gl_V4_New eax+offs_ligh_diffuse, 1.0,1.0,1.0,1.0 |
gl_V4_New eax+offs_ligh_specular, 1.0,1.0,1.0,1.0 |
gl_V4_New eax+offs_ligh_position, 0.0,0.0,1.0,0.0 |
gl_V3_New eax+offs_ligh_norm_position, 0.0,0.0,1.0 |
gl_V3_New eax+offs_ligh_spot_direction, 0.0,0.0,-1.0 |
gl_V3_New eax+offs_ligh_norm_spot_direction, 0.0,0.0,-1.0 |
mov dword[eax+offs_ligh_spot_exponent],0.0 |
mov dword[eax+offs_ligh_spot_cutoff],180.0 |
mov dword[eax+offs_ligh_attenuation],1.0 |
mov dword[eax+offs_ligh_attenuation+4],0.0 |
mov dword[eax+offs_ligh_attenuation+8],0.0 |
mov dword[eax+offs_ligh_enabled],0 |
add eax,sizeof.GLLight |
dec ecx |
cmp ecx,0 |
jg .cycle_0 |
mov dword[edx+offs_cont_first_light],0 ;NULL |
gl_V4_New edx+offs_cont_ambient_light_model, 0.2,0.2,0.2,1.0 |
mov dword[edx+offs_cont_local_light_model],0 |
mov dword[edx+offs_cont_lighting_enabled],0 |
mov dword[edx+offs_cont_light_model_two_side],0 |
; default materials |
mov ecx,2 ;for(i=0;i<2;i++) |
mov eax,edx |
add eax,offs_cont_materials |
@@: |
gl_V4_New eax+offs_mate_emission, 0.0,0.0,0.0,1.0 |
gl_V4_New eax+offs_mate_ambient, 0.2,0.2,0.2,1.0 |
gl_V4_New eax+offs_mate_diffuse, 0.8,0.8,0.8,1.0 |
gl_V4_New eax+offs_mate_specular, 0.0,0.0,0.0,1.0 |
mov dword[eax+offs_mate_shininess], 0.0 |
add eax,sizeof.GLMaterial |
loop @b |
mov dword[edx+offs_cont_current_color_material_mode],GL_FRONT_AND_BACK |
mov dword[edx+offs_cont_current_color_material_type],GL_AMBIENT_AND_DIFFUSE |
mov dword[edx+offs_cont_color_material_enabled],0 |
; textures |
stdcall glInitTextures,edx |
; default state |
mov dword[edx+offs_cont_current_color],1.0 |
mov dword[edx+offs_cont_current_color+4],1.0 |
mov dword[edx+offs_cont_current_color+8],1.0 |
mov dword[edx+offs_cont_current_color+12],1.0 |
mov dword[edx+offs_cont_longcurrent_color],65535 |
mov dword[edx+offs_cont_longcurrent_color+4],65535 |
mov dword[edx+offs_cont_longcurrent_color+8],65535 |
mov dword[edx+offs_cont_current_normal],1.0 |
mov dword[edx+offs_cont_current_normal+4],0.0 |
mov dword[edx+offs_cont_current_normal+8],0.0 |
mov dword[edx+offs_cont_current_normal+12],0.0 |
mov dword[edx+offs_cont_current_edge_flag],1 |
mov dword[edx+offs_cont_current_tex_coord],0.0 |
mov dword[edx+offs_cont_current_tex_coord+4],0.0 |
mov dword[edx+offs_cont_current_tex_coord+8],0.0 |
mov dword[edx+offs_cont_current_tex_coord+12],1.0 |
mov dword[edx+offs_cont_polygon_mode_front],GL_FILL |
mov dword[edx+offs_cont_polygon_mode_back],GL_FILL |
mov dword[edx+offs_cont_current_front_face],0 ;0 = GL_CCW 1 = GL_CW |
mov dword[edx+offs_cont_current_cull_face],GL_BACK |
mov dword[edx+offs_cont_current_shade_model],GL_SMOOTH |
mov dword[edx+offs_cont_cull_face_enabled],0 |
; clear |
mov dword[edx+offs_cont_clear_color],0.0 |
mov dword[edx+offs_cont_clear_color+4],0.0 |
mov dword[edx+offs_cont_clear_color+8],0.0 |
mov dword[edx+offs_cont_clear_color+12],0.0 |
mov dword[edx+offs_cont_clear_depth],0 |
; selection |
mov dword[edx+offs_cont_render_mode],GL_RENDER |
mov dword[edx+offs_cont_select_buffer],0 ;NULL |
mov dword[edx+offs_cont_name_stack_size],0 |
; matrix |
mov dword[edx+offs_cont_matrix_mode],0 |
mov dword[edx+offs_cont_matrix_stack_depth_max],MAX_MODELVIEW_STACK_DEPTH |
mov dword[edx+offs_cont_matrix_stack_depth_max+4],MAX_PROJECTION_STACK_DEPTH |
mov dword[edx+offs_cont_matrix_stack_depth_max+8],MAX_TEXTURE_STACK_DEPTH |
mov ecx,3 ;for(i=0;i<3;i++) |
mov ebx,edx |
@@: |
mov edi,[ebx+offs_cont_matrix_stack_depth_max] |
shl edi,6 ;вместо imul edi,sizeof(M4) |
stdcall gl_zalloc,edi |
mov [ebx+offs_cont_matrix_stack],eax |
mov [ebx+offs_cont_matrix_stack_ptr],eax |
add ebx,4 |
loop @b |
stdcall glMatrixMode,GL_PROJECTION |
call glLoadIdentity |
stdcall glMatrixMode,GL_TEXTURE |
call glLoadIdentity |
stdcall glMatrixMode,GL_MODELVIEW |
call glLoadIdentity |
mov dword[edx+offs_cont_matrix_model_projection_updated],1 |
; opengl 1.1 arrays |
mov dword[edx+offs_cont_client_states],0 |
; opengl 1.1 polygon offset |
mov dword[edx+offs_cont_offset_states],0 |
; clear the resize callback function pointer |
mov dword[edx+offs_cont_gl_resize_viewport],0 ;NULL |
; specular buffer |
mov dword[edx+offs_cont_specbuf_first],0 ;NULL |
mov dword[edx+offs_cont_specbuf_used_counter],0 |
mov dword[edx+offs_cont_specbuf_num_buffers],0 |
; depth test |
mov dword[edx+offs_cont_depth_test],0 |
ret |
endp |
align 4 |
proc glClose uses eax |
call gl_get_context |
stdcall endSharedState,eax |
stdcall gl_free,eax |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/kosgl.asm |
---|
0,0 → 1,146 |
; simple gl like driver for TinyGL and KolibriOS - porting iadn |
struct TinyGLContext |
gl_context dd ? |
xsize dd ? ;+4 |
ysize dd ? ;+8 |
d_x dd ? ;+12 |
d_y dd ? ;+16 |
x dd ? ;+20 |
y dd ? ;+24 |
ends |
;KOSGLContext kosglCreateContext(KOSGLContext shareList, int flags) |
;{ |
; TinyGLContext *ctx; |
; |
; if (shareList != NULL) { |
; gl_fatal_error("No sharing available in TinyGL"); |
; } |
; |
; ctx=gl_malloc(sizeof(TinyGLContext)); |
; if (!ctx) |
; return NULL; |
; ctx->gl_context=NULL; |
; return (KOSGLContext) ctx; |
;} |
;void kosglDestroyContext( KOSGLContext ctx1 ) |
;{ |
; TinyGLContext *ctx = (TinyGLContext *) ctx1; |
; if (ctx->gl_context != NULL) { |
; glClose(); |
; } |
; gl_free(ctx); |
;} |
; resize the glx viewport : we try to use the xsize and ysize |
; given. We return the effective size which is guaranted to be smaller |
align 4 |
proc gl_resize_viewport uses ebx ecx edx edi esi, context:dword, xsize_ptr:dword, ysize_ptr:dword |
xor eax,eax |
mov ecx,[xsize_ptr] ; ecx = &xsize |
mov edi,[ecx] ; edi = xsize |
mov esi,[ysize_ptr] ; esi = &ysize |
mov esi,[esi] ; esi = ysize |
; we ensure that xsize and ysize are multiples of 2 for the zbuffer. |
; TODO: find a better solution |
and edi, not 3 |
and esi, not 3 |
cmp edi,0 |
jne @f |
cmp esi,0 |
jne @f |
mov eax,-1 |
jmp .end_f |
@@: |
mov [ecx],edi |
dec dword[ecx] |
mov ecx,[ysize_ptr] |
mov [ecx],esi |
dec dword[ecx] |
mov ebx,[context] |
mov edx,[ebx+offs_cont_opaque] ; edx = (TinyGLContext *)context.opaque |
mov [edx+4],edi |
mov [edx+12],edi ;d_x = xsize |
mov [edx+8],esi |
mov [edx+16],esi ;d_y = ysize |
; resize the Z buffer |
stdcall ZB_resize, dword[ebx+offs_cont_zb],0,edi,esi |
.end_f: |
ret |
endp |
; we assume here that drawable is a window |
align 4 |
proc kosglMakeCurrent uses ebx ecx, win_x0:dword, win_y0:dword, win_x:dword, win_y:dword, ctx1:dword |
mov ebx,[ctx1] |
cmp dword[ebx],0 ;if (ctx.gl_context == NULL) |
jne .end_f |
; create the TinyGL context |
mov ecx,[win_x0] |
mov [ebx+20],ecx ;ctx.x = win_x0 |
mov ecx,[win_y0] |
mov [ebx+24],ecx ;ctx.y = win_y0 |
mov ecx,[win_x] |
mov [ebx+12],ecx ;ctx.d_x = win_x |
mov ecx,[win_y] |
mov [ebx+16],ecx ;ctx.d_y = win_y |
; currently, we only support 16 bit rendering |
xor eax,eax |
stdcall ZB_open, dword[win_x], dword[win_y], dword ZB_MODE_RGB24, eax,eax,eax,eax ;NULL,NULL,NULL |
cmp eax,0 |
jne @f |
stdcall dbg_print,f_kosgl_1,err_0 |
xor eax,eax |
jmp .err_f |
@@: |
; initialisation of the TinyGL interpreter |
stdcall glInit, eax |
call gl_get_context |
mov [ebx],eax ;ctx.gl_context = eax |
mov [eax+offs_cont_opaque],ebx ;ctx.gl_context.opaque = ctx |
mov dword[eax+offs_cont_gl_resize_viewport],gl_resize_viewport |
; set the viewport : we force a call to gl_resize_viewport |
dec dword[eax+offs_cont_viewport+offs_vpor_xsize] |
dec dword[eax+offs_cont_viewport+offs_vpor_ysize] |
stdcall glViewport, 0, 0, [win_x], [win_y] |
.end_f: |
xor eax,eax |
inc eax |
.err_f: |
ret |
endp |
align 4 |
proc kosglSwapBuffers uses eax ebx ecx edx esi |
; retrieve the current TinyGLContext |
call gl_get_context |
mov ebx,[eax+offs_cont_zb] |
mov ebx,[ebx+offs_zbuf_pbuf] |
mov esi,[eax+offs_cont_opaque] ;esi = &context.opaque |
mov eax,7 |
mov ecx,[esi+12] ;d_x |
shl ecx,16 |
mov cx,[esi+16] ;d_y |
mov edx,[esi+20] ;x |
shl edx,16 |
mov dx,[esi+24] ;y |
int 0x40 |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/light.asm |
---|
0,0 → 1,350 |
;include 'msghandling.inc' |
align 4 |
proc glopMaterial, context:dword, p:dword |
; int mode=p[1].i; |
; int type=p[2].i; |
; float *v=&p[3].f; |
; int i; |
; GLMaterial *m; |
; if (mode == GL_FRONT_AND_BACK) { |
; p[1].i=GL_FRONT; |
; glopMaterial(c,p); |
; mode=GL_BACK; |
; } |
; if (mode == GL_FRONT) m=&c->materials[0]; |
; else m=&c->materials[1]; |
; switch(type) { |
; case GL_EMISSION: |
; for(i=0;i<4;i++) |
; m->emission.v[i]=v[i]; |
; break; |
; case GL_AMBIENT: |
; for(i=0;i<4;i++) |
; m->ambient.v[i]=v[i]; |
; break; |
; case GL_DIFFUSE: |
; for(i=0;i<4;i++) |
; m->diffuse.v[i]=v[i]; |
; break; |
; case GL_SPECULAR: |
; for(i=0;i<4;i++) |
; m->specular.v[i]=v[i]; |
; break; |
; case GL_SHININESS: |
; m->shininess=v[0]; |
; m->shininess_i = (v[0]/128.0f)*SPECULAR_BUFFER_RESOLUTION; |
; break; |
; case GL_AMBIENT_AND_DIFFUSE: |
; for(i=0;i<4;i++) |
; m->diffuse.v[i]=v[i]; |
; for(i=0;i<4;i++) |
; m->ambient.v[i]=v[i]; |
; break; |
; default: |
; assert(0); |
; } |
ret |
endp |
align 4 |
proc glopColorMaterial uses eax ebx ecx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] ;ecx = p[1] |
mov dword[eax+offs_cont_current_color_material_mode],ecx |
mov ecx,[ebx+8] ;ecx = p[2] |
mov dword[eax+offs_cont_current_color_material_type],ecx |
ret |
endp |
;void glopLight(GLContext *c,GLParam *p) |
;{ |
; int light=p[1].i; |
; int type=p[2].i; |
; V4 v; |
; GLLight *l; |
; int i; |
; |
; assert(light >= GL_LIGHT0 && light < GL_LIGHT0+MAX_LIGHTS ); |
; |
; l=&c->lights[light-GL_LIGHT0]; |
; |
; for(i=0;i<4;i++) v.v[i]=p[3+i].f; |
; |
; switch(type) { |
; case GL_AMBIENT: |
; l->ambient=v; |
; break; |
; case GL_DIFFUSE: |
; l->diffuse=v; |
; break; |
; case GL_SPECULAR: |
; l->specular=v; |
; break; |
; case GL_POSITION: |
; { |
; V4 pos; |
; gl_M4_MulV4(&pos,c->matrix_stack_ptr[0],&v); |
; |
; l->position=pos; |
; |
; if (l->position.v[3] == 0) { |
; l->norm_position.X=pos.X; |
; l->norm_position.Y=pos.Y; |
; l->norm_position.Z=pos.Z; |
; |
; gl_V3_Norm(&l->norm_position); |
; } |
; } |
; break; |
; case GL_SPOT_DIRECTION: |
; for(i=0;i<3;i++) { |
; l->spot_direction.v[i]=v.v[i]; |
; l->norm_spot_direction.v[i]=v.v[i]; |
; } |
; gl_V3_Norm(&l->norm_spot_direction); |
; break; |
; case GL_SPOT_EXPONENT: |
; l->spot_exponent=v.v[0]; |
; break; |
; case GL_SPOT_CUTOFF: |
; { |
; float a=v.v[0]; |
; assert(a == 180 || (a>=0 && a<=90)); |
; l->spot_cutoff=a; |
; if (a != 180) l->cos_spot_cutoff=cos(a * M_PI / 180.0); |
; } |
; break; |
; case GL_CONSTANT_ATTENUATION: |
; l->attenuation[0]=v.v[0]; |
; break; |
; case GL_LINEAR_ATTENUATION: |
; l->attenuation[1]=v.v[0]; |
; break; |
; case GL_QUADRATIC_ATTENUATION: |
; l->attenuation[2]=v.v[0]; |
; break; |
; default: |
; assert(0); |
; } |
;} |
align 4 |
proc glopLightModel uses ebx ecx esi edi, context:dword, p:dword |
mov edi,[context] |
mov ebx,[p] |
mov esi,[ebx+8] |
cmp dword[ebx+4],GL_LIGHT_MODEL_AMBIENT |
jne @f |
mov ecx,4 |
mov edi,dword[edi+offs_cont_ambient_light_model] |
rep movsd ;for(i=0;i<4;i++) context.ambient_light_model.v[i]=v[i] |
jmp .end_f |
@@: |
cmp dword[ebx+4],GL_LIGHT_MODEL_LOCAL_VIEWER |
jne @f |
fld dword[esi] ;st0 = p[2].v[0] |
fistp dword[edi+offs_cont_local_light_model] |
jmp .end_f |
@@: |
cmp dword[ebx+4],GL_LIGHT_MODEL_TWO_SIDE |
jne @f |
fld dword[esi] ;st0 = p[2].v[0] |
fistp dword[edi+offs_cont_light_model_two_side] |
jmp .end_f |
@@: ;default: |
; tgl_warning("glopLightModel: illegal pname: 0x%x\n", dword[ebx+4]); |
; //assert(0); |
.end_f: |
ret |
endp |
;static inline float clampf(float a,float min,float max) |
;{ |
; if (a<min) return min; |
; else if (a>max) return max; |
; else return a; |
;} |
align 4 |
proc gl_enable_disable_light uses eax ebx ecx, context:dword, light:dword, v:dword |
mov eax,[context] |
mov ebx,[light] |
imul ebx,sizeof.GLLight |
add ebx,[eax+offs_cont_lights] |
xor ecx,ecx |
cmp dword[ebx+offs_ligh_enabled],0 |
jne @f |
not ecx |
@@: |
and ecx,[v] |
cmp ecx,0 |
je @f |
;if (v && !l.enabled) |
mov dword[ebx+offs_ligh_enabled],1 |
mov ecx,[eax+offs_cont_first_light] |
mov [ebx+offs_ligh_next],ecx |
mov [eax+offs_cont_first_light],ebx ;context.first_light = l |
mov dword[ebx+offs_ligh_prev],0 ;l.prev = NULL |
jmp .end_f |
@@: |
xor ecx,ecx |
cmp dword[v],0 |
jne @f |
not ecx |
@@: |
and ecx,[ebx+offs_ligh_enabled] |
cmp ecx,0 |
je .end_f |
;else if (!v && l.enabled) |
mov dword[ebx+offs_ligh_enabled],0 ;l.enabled = 0 |
mov ecx,[ebx+offs_ligh_next] |
cmp dword[ebx+offs_ligh_prev],0 ;if (l.prev == NULL) |
jne .els_0 |
mov [eax+offs_cont_first_light],ecx ;context.first_light = l.next |
jmp @f |
.els_0: |
mov eax,[ebx+offs_ligh_prev] |
mov [eax+offs_ligh_next],ecx ;l.prev.next = l.next |
@@: |
cmp dword[ebx+offs_ligh_next],0 |
je .end_f |
mov ecx,[ebx+offs_ligh_prev] |
mov eax,[ebx+offs_ligh_next] |
mov [eax+offs_ligh_prev],ecx ;l.next.prev = l.prev |
.end_f: |
ret |
endp |
; non optimized lightening model |
align 4 |
proc gl_shade_vertex, context:dword, v:dword |
; float R,G,B,A; |
; GLMaterial *m; |
; GLLight *l; |
; V3 n,s,d; |
; float dist,tmp,att,dot,dot_spot,dot_spec; |
; int twoside = c->light_model_two_side; |
; m=&c->materials[0]; |
; n.X=v->normal.X; |
; n.Y=v->normal.Y; |
; n.Z=v->normal.Z; |
; R=m->emission.v[0]+m->ambient.v[0]*c->ambient_light_model.v[0]; |
; G=m->emission.v[1]+m->ambient.v[1]*c->ambient_light_model.v[1]; |
; B=m->emission.v[2]+m->ambient.v[2]*c->ambient_light_model.v[2]; |
; A=clampf(m->diffuse.v[3],0,1); |
; for(l=c->first_light;l!=NULL;l=l->next) { |
; float lR,lB,lG; |
; /* ambient */ |
; lR=l->ambient.v[0] * m->ambient.v[0]; |
; lG=l->ambient.v[1] * m->ambient.v[1]; |
; lB=l->ambient.v[2] * m->ambient.v[2]; |
; if (l->position.v[3] == 0) { |
; /* light at infinity */ |
; d.X=l->position.v[0]; |
; d.Y=l->position.v[1]; |
; d.Z=l->position.v[2]; |
; att=1; |
; } else { |
; /* distance attenuation */ |
; d.X=l->position.v[0]-v->ec.v[0]; |
; d.Y=l->position.v[1]-v->ec.v[1]; |
; d.Z=l->position.v[2]-v->ec.v[2]; |
; dist=sqrt(d.X*d.X+d.Y*d.Y+d.Z*d.Z); |
; if (dist>1E-3) { |
; tmp=1/dist; |
; d.X*=tmp; |
; d.Y*=tmp; |
; d.Z*=tmp; |
; } |
; att=1.0f/(l->attenuation[0]+dist*(l->attenuation[1]+ |
; dist*l->attenuation[2])); |
; } |
; dot=d.X*n.X+d.Y*n.Y+d.Z*n.Z; |
; if (twoside && dot < 0) dot = -dot; |
; if (dot>0) { |
; /* diffuse light */ |
; lR+=dot * l->diffuse.v[0] * m->diffuse.v[0]; |
; lG+=dot * l->diffuse.v[1] * m->diffuse.v[1]; |
; lB+=dot * l->diffuse.v[2] * m->diffuse.v[2]; |
; |
; /* spot light */ |
; if (l->spot_cutoff != 180) { |
; dot_spot=-(d.X*l->norm_spot_direction.v[0]+ |
; d.Y*l->norm_spot_direction.v[1]+ |
; d.Z*l->norm_spot_direction.v[2]); |
; if (twoside && dot_spot < 0) dot_spot = -dot_spot; |
; if (dot_spot < l->cos_spot_cutoff) { |
; /* no contribution */ |
; continue; |
; } else { |
; /* TODO: optimize */ |
; if (l->spot_exponent > 0) { |
; att=att*pow(dot_spot,l->spot_exponent); |
; } |
; } |
; } |
; /* specular light */ |
; if (c->local_light_model) { |
; V3 vcoord; |
; vcoord.X=v->ec.X; |
; vcoord.Y=v->ec.Y; |
; vcoord.Z=v->ec.Z; |
; gl_V3_Norm(&vcoord); |
; s.X=d.X-vcoord.X; |
; s.Y=d.Y-vcoord.X; |
; s.Z=d.Z-vcoord.X; |
; } else { |
; s.X=d.X; |
; s.Y=d.Y; |
; s.Z=d.Z+1.0; |
; } |
; dot_spec=n.X*s.X+n.Y*s.Y+n.Z*s.Z; |
; if (twoside && dot_spec < 0) dot_spec = -dot_spec; |
; if (dot_spec>0) { |
; GLSpecBuf *specbuf; |
; int idx; |
; tmp=sqrt(s.X*s.X+s.Y*s.Y+s.Z*s.Z); |
; if (tmp > 1E-3) { |
; dot_spec=dot_spec / tmp; |
; } |
; /* TODO: optimize */ |
; /* testing specular buffer code */ |
; /* dot_spec= pow(dot_spec,m->shininess);*/ |
; specbuf = specbuf_get_buffer(c, m->shininess_i, m->shininess); |
; idx = (int)(dot_spec*SPECULAR_BUFFER_SIZE); |
; if (idx > SPECULAR_BUFFER_SIZE) idx = SPECULAR_BUFFER_SIZE; |
; dot_spec = specbuf->buf[idx]; |
; lR+=dot_spec * l->specular.v[0] * m->specular.v[0]; |
; lG+=dot_spec * l->specular.v[1] * m->specular.v[1]; |
; lB+=dot_spec * l->specular.v[2] * m->specular.v[2]; |
; } |
; } |
; R+=att * lR; |
; G+=att * lG; |
; B+=att * lB; |
; } |
; v->color.v[0]=clampf(R,0,1); |
; v->color.v[1]=clampf(G,0,1); |
; v->color.v[2]=clampf(B,0,1); |
; v->color.v[3]=A; |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/list.asm |
---|
0,0 → 1,329 |
;строки с именами функций |
op_table_str: |
macro ADD_OP a,b,c |
{ |
db 'gl',`a,' ',c,0 |
} |
include 'opinfo.inc' |
;указатели на функции ;static void (*op_table_func[])(GLContext *,GLParam *)= |
op_table_func: |
macro ADD_OP a,b,c |
{ |
dd glop#a |
} |
include 'opinfo.inc' |
;число параметров в функциях |
op_table_size: |
macro ADD_OP a,b,c |
{ |
dd b+1 |
} |
include 'opinfo.inc' |
;output: |
; eax = context.shared_state.lists[list] |
align 4 |
proc find_list uses ebx, context:dword, list:dword |
mov eax,[context] |
mov eax,[eax+offs_cont_shared_state] |
mov ebx,[list] |
shl ebx,2 |
add eax,ebx |
mov eax,[eax] |
ret |
endp |
;static void delete_list(GLContext *c,int list) |
;{ |
; GLParamBuffer *pb,*pb1; |
; GLList *l; |
; l=find_list(c,list); |
; assert(l != NULL); |
; /* free param buffer */ |
; pb=l->first_op_buffer; |
; while (pb!=NULL) { |
; pb1=pb->next; |
; gl_free(pb); |
; pb=pb1; |
; } |
; gl_free(l); |
; c->shared_state.lists[list]=NULL; |
;} |
;static GLList *alloc_list(GLContext *c,int list) |
;{ |
; GLList *l; |
; GLParamBuffer *ob; |
; l=gl_zalloc(sizeof(GLList)); |
; ob=gl_zalloc(sizeof(GLParamBuffer)); |
; ob->next=NULL; |
; l->first_op_buffer=ob; |
; ob->ops[0].op=OP_EndList; |
; c->shared_state.lists[list]=l; |
; return l; |
;} |
;void gl_print_op(FILE *f,GLParam *p) |
;{ |
; int op; |
; char *s; |
; op=p[0].op; |
; p++; |
; s=op_table_str[op]; |
; while (*s != 0) { |
; if (*s == '%') { |
; s++; |
; switch (*s++) { |
; case 'f': |
; fprintf(f,"%g",p[0].f); |
; break; |
; default: |
; fprintf(f,"%d",p[0].i); |
; break; |
; } |
; p++; |
; } else { |
; fputc(*s,f); |
; s++; |
; } |
; } |
; fprintf(f,"\n"); |
;} |
align 4 |
proc gl_compile_op uses eax ebx, context:dword, p:dword |
mov eax,[context] |
; int op,op_size; |
; GLParamBuffer *ob,*ob1; |
; int index,i; |
; op=p[0].op; |
; op_size=op_table_size[op]; |
; index=c->current_op_buffer_index; |
; ob=c->current_op_buffer; |
; /* we should be able to add a NextBuffer opcode */ |
; if ((index + op_size) > (OP_BUFFER_MAX_SIZE-2)) { |
; ob1=gl_zalloc(sizeof(GLParamBuffer)); |
; ob1->next=NULL; |
; ob->next=ob1; |
; ob->ops[index].op=OP_NextBuffer; |
; ob->ops[index+1].p=(void *)ob1; |
; c->current_op_buffer=ob1; |
; ob=ob1; |
; index=0; |
; } |
; for(i=0;i<op_size;i++) { |
; ob->ops[index]=p[i]; |
; index++; |
; } |
; c->current_op_buffer_index=index; |
ret |
endp |
align 4 |
proc gl_add_op uses eax ebx ecx, p:dword ;GLParam* |
if DEBUG |
push edi esi |
mov ebx,[p] |
mov ebx,[ebx] |
lea eax,[op_table_str] |
@@: |
cmp ebx,0 |
je @f |
cmp byte[eax],0 |
jne .no_dec |
dec ebx |
.no_dec: |
inc eax |
jmp @b |
@@: |
stdcall dbg_print,eax,txt_nl |
mov esi,eax |
mov word[NumberSymbolsAD],3 |
mov ebx,[p] |
lea edi,[buf_param] |
mov byte[edi],0 |
mov ecx,80 |
.cycle_0: |
cmp byte[esi],'%' |
jne .no_param |
cmp ebx,[p] |
je @f |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
@@: |
add ebx,4 |
inc esi |
cmp byte[esi],'f' |
jne @f |
fld dword[ebx] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
stdcall str_cat, edi,Data_String |
@@: |
cmp byte[esi],'d' |
jne @f |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,dword[ebx] |
stdcall convert_int_to_str,ecx |
@@: |
.no_param: |
inc esi |
cmp byte[esi],0 |
jne .cycle_0 |
stdcall str_cat, edi,txt_nl |
stdcall dbg_print,txt_sp,buf_param |
pop esi edi |
end if |
call gl_get_context |
mov ebx,[p] |
cmp dword[eax+offs_cont_exec_flag],0 |
je @f |
push ebx |
push eax |
mov ecx,dword[ebx] ;ecx = OP_... |
shl ecx,2 |
lea ebx,[op_table_func] |
add ecx,ebx |
call dword[ecx] ;op_table_func[op](c,p) |
@@: |
cmp dword[eax+offs_cont_compile_flag],0 |
je @f |
stdcall gl_compile_op,eax,[p] |
@@: |
cmp dword[eax+offs_cont_print_flag],0 |
je @f |
;gl_print_op(stderr,p); |
@@: |
ret |
endp |
; this opcode is never called directly |
align 4 |
proc glopEndList, context:dword, p:dword |
; assert(0); |
ret |
endp |
; this opcode is never called directly |
align 4 |
proc glopNextBuffer, context:dword, p:dword |
; assert(0); |
ret |
endp |
;void glopCallList(GLContext *c,GLParam *p) |
;{ |
; GLList *l; |
; int list,op; |
; list=p[1].ui; |
; l=find_list(c,list); |
; if (l == NULL) gl_fatal_error("list %d not defined",list); |
; p=l->first_op_buffer->ops; |
; while (1) { |
; op=p[0].op; |
; if (op == OP_EndList) break; |
; if (op == OP_NextBuffer) { |
; p=(GLParam *)p[1].p; |
; } else { |
; op_table_func[op](c,p); |
; p+=op_table_size[op]; |
; } |
; } |
;} |
;void glNewList(unsigned int list,int mode) |
;{ |
; GLList *l; |
; GLContext *c=gl_get_context(); |
; |
; assert(mode == GL_COMPILE || mode == GL_COMPILE_AND_EXECUTE); |
; assert(c->compile_flag == 0); |
; |
; l=find_list(c,list); |
; if (l!=NULL) delete_list(c,list); |
; l=alloc_list(c,list); |
; |
; c->current_op_buffer=l->first_op_buffer; |
; c->current_op_buffer_index=0; |
; |
; c->compile_flag=1; |
; c->exec_flag=(mode == GL_COMPILE_AND_EXECUTE); |
;} |
;void glEndList(void) |
;{ |
; GLContext *c=gl_get_context(); |
; GLParam p[1]; |
; assert(c->compile_flag == 1); |
; /* end of list */ |
; p[0].op=OP_EndList; |
; gl_compile_op(c,p); |
; c->compile_flag=0; |
; c->exec_flag=1; |
;} |
;output: |
; eax = (find_list(gl_get_context,list) != NULL) |
align 4 |
proc glIsList, list:dword |
call gl_get_context |
stdcall find_list, eax,[list] |
cmp eax,0 ;NULL |
je @f |
mov eax,1 |
@@: |
ret |
endp |
;unsigned int glGenLists(int range) |
;{ |
; GLContext *c=gl_get_context(); |
; int count,i,list; |
; GLList **lists; |
; lists=c->shared_state.lists; |
; count=0; |
; for(i=0;i<MAX_DISPLAY_LISTS;i++) { |
; if (lists[i]==NULL) { |
; count++; |
; if (count == range) { |
; list=i-range+1; |
; for(i=0;i<range;i++) { |
; alloc_list(c,list+i); |
; } |
; return list; |
; } |
; } else { |
; count=0; |
; } |
; } |
; return 0; |
;} |
/programs/develop/libraries/TinyGL/asm_fork/matrix.asm |
---|
0,0 → 1,521 |
if DEBUG |
align 4 |
proc gl_print_matrix uses eax ebx ecx edi, m:dword, rows:dword |
mov ecx,[rows] |
cmp ecx,1 |
jl .end_f |
mov ebx,[m] |
mov word[NumberSymbolsAD],3 |
finit |
@@: |
lea edi,[buf_param] |
mov byte[edi],0 |
fld dword[ebx] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
stdcall str_cat, edi,Data_String |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
fld dword[ebx+4] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
stdcall str_cat, edi,Data_String |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
fld dword[ebx+8] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
stdcall str_cat, edi,Data_String |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
fld dword[ebx+12] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
stdcall str_cat, edi,Data_String |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,txt_sp,buf_param |
add ebx,16 |
dec ecx |
cmp ecx,0 |
jg @b |
.end_f: |
ret |
endp |
end if |
macro gl_matrix_update context, reg |
{ |
local .end_0 |
xor reg,reg |
cmp dword[context+offs_cont_matrix_mode],1 |
jg .end_0 |
inc reg |
.end_0: |
mov dword[context+offs_cont_matrix_model_projection_updated],reg |
} |
align 4 |
proc glopMatrixMode uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
cmp dword[ebx+4],GL_MODELVIEW ;cmp p[1],... |
jne @f |
mov dword[eax+offs_cont_matrix_mode],0 |
jmp .end_f |
@@: |
cmp dword[ebx+4],GL_PROJECTION |
jne @f |
mov dword[eax+offs_cont_matrix_mode],1 |
jmp .end_f |
@@: |
cmp dword[ebx+4],GL_TEXTURE |
jne .def |
mov dword[eax+offs_cont_matrix_mode],2 |
jmp .end_f |
.def: |
;assert(0); |
.end_f: |
ret |
endp |
align 4 |
proc glopLoadMatrix uses eax edi esi, context:dword, p:dword |
mov eax,[context] |
mov edi,[eax+offs_cont_matrix_mode] |
shl edi,2 |
add edi,eax |
mov edi,dword[edi+offs_cont_matrix_stack_ptr] |
mov esi,[p] |
add esi,4 |
stdcall gl_M4_Transpose,edi,esi ;транспонируем входную матрицу в матрицу context.matrix_stack_ptr[context.matrix_mode] |
gl_matrix_update eax,edi |
ret |
endp |
align 4 |
proc glopLoadIdentity uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
stdcall gl_M4_Id,[ebx+offs_cont_matrix_stack_ptr] |
if DEBUG ;glopLoadIdentity |
stdcall gl_print_matrix,[ebx+offs_cont_matrix_stack_ptr],4 |
end if |
gl_matrix_update eax,ebx |
ret |
endp |
align 4 |
proc glopMultMatrix uses eax edi esi, context:dword, p:dword |
locals |
m M4 |
endl |
mov esi,[p] |
add esi,4 |
mov edi,ebp |
sub edi,sizeof.M4 |
stdcall gl_M4_Transpose,edi,esi ;транспонируем входную матрицу в локальную матрицу m |
mov eax,[context] |
mov esi,[eax+offs_cont_matrix_mode] |
shl esi,2 |
add esi,eax |
stdcall gl_M4_MulLeft,dword[esi+offs_cont_matrix_stack_ptr],edi |
gl_matrix_update eax,edi |
ret |
endp |
align 4 |
proc glopPushMatrix uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[eax+offs_cont_matrix_mode] |
; assert( (c->matrix_stack_ptr[ebx] - c->matrix_stack[ebx] + 1 ) |
; < c->matrix_stack_depth_max[ebx] ); |
shl ebx,2 |
add ebx,eax |
add ebx,offs_cont_matrix_stack_ptr |
add dword[ebx],sizeof.M4 |
mov ebx,[ebx] ;ebx = ++context.matrix_stack_ptr[context.matrix_mode] |
sub ebx,sizeof.M4 |
push ebx |
add ebx,sizeof.M4 |
stdcall gl_M4_Move, ebx |
gl_matrix_update eax,ebx |
ret |
endp |
align 4 |
proc glopPopMatrix uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[eax+offs_cont_matrix_mode] |
; assert( c->matrix_stack_ptr[n] > c->matrix_stack[n] ); |
shl ebx,2 |
add ebx,eax |
sub dword[ebx+offs_cont_matrix_stack_ptr],sizeof.M4 |
gl_matrix_update eax,ebx |
ret |
endp |
align 4 |
proc glopRotate uses eax ebx ecx, context:dword, p:dword |
locals |
u0 dd ? |
u1 dd ? |
u2 dd ? |
angle dd ? |
cost dd ? |
sint dd ? |
m M4 |
endl |
mov eax,[context] |
mov ebx,[p] |
mov ecx,ebp |
sub ecx,sizeof.M4 ;ecx=&m |
finit |
fldpi |
fmul dword[ebx+4] |
fdiv dword[an180f] |
fst dword[angle] ;angle = p[1].f * M_PI / 180.0 |
;st0 = angle |
fldz |
fild dword[ebx+8] |
fstp dword[u0] |
fild dword[ebx+12] |
fstp dword[u1] |
fild dword[ebx+16] |
fst dword[u2] |
; simple case detection |
xor ebx,ebx |
fcomp st1 ;u2 ... 0 |
fstsw ax |
sahf |
je @f |
inc ebx |
@@: |
fcom dword[u1] ;0 ... u1 |
fstsw ax |
sahf |
je @f |
or ebx,2 |
@@: |
fcom dword[u0] ;0 ... u0 |
fstsw ax |
sahf |
je @f |
or ebx,4 |
@@: |
;st0 = 0, st1 = angle |
;ebx = ((u0 != 0)<<2) | ((u1 != 0)<<1) | (u2 != 0) |
cmp ebx,0 |
je .end_f ;если нет поворотов выход из функции |
cmp ebx,4 |
jne @f |
fcomp dword[u0] ;0 ... u0 |
fstsw ax |
sahf |
jae .u0ch |
fchs |
fstp dword[angle] ;if (u0 < 0) angle *= -1 |
.u0ch: |
stdcall gl_M4_Rotate, ecx,[angle],0 |
jmp .end_sw |
@@: |
cmp ebx,2 |
jne @f |
fcomp dword[u1] ;0 ... u1 |
fstsw ax |
sahf |
jae .u1ch |
fchs |
fstp dword[angle] ;if (u1 < 0) angle *= -1 |
.u1ch: |
stdcall gl_M4_Rotate, ecx,[angle],1 |
jmp .end_sw |
@@: |
cmp ebx,1 |
jne @f |
fcomp dword[u2] ;0 ... u2 |
fstsw ax |
sahf |
jae .u2ch |
fchs |
fstp dword[angle] ;if (u2 < 0) angle *= -1 |
.u2ch: |
stdcall gl_M4_Rotate, ecx,[angle],2 |
jmp .end_sw |
@@: ;default: |
if DEBUG ;glopRotete |
stdcall dbg_print,txt_sp,m_1 |
end if |
; normalize vector |
fld dword[u0] |
fmul st0,st0 |
fld dword[u1] |
fmul st0,st0 |
fld dword[u2] |
fmul st0,st0 |
fadd st0,st1 |
fadd st0,st2 |
; fst dword[len] ;len = u0*u0+u1*u1+u2*u2 |
fcom st1 |
fstsw ax |
sahf |
je .end_f ;if (len == 0.0f) return |
fsqrt |
fld1 |
fdiv st0,st1 |
; fst dword[len] ;len = 1.0f / sqrt(len) |
fld dword[u0] |
fmul st0,st1 |
fstp dword[u0] ;u0 *= len |
fld dword[u1] |
fmul st0,st1 |
fstp dword[u1] ;u1 *= len |
fld dword[u2] |
fmul st0,st1 |
fstp dword[u2] ;u2 *= len |
;st0 = len, st1=..., st2=..., st3 = 0, st4 = angle |
; store cos and sin values |
finit |
fld dword[angle] |
fcos |
fst dword[cost] ;cost=cos(angle) |
fld dword[angle] |
fsin |
fst dword[sint] ;sint=sin(angle) |
; fill in the values |
mov ebx,0.0 |
mov [ecx+3*16 ],ebx ;m[3][0] |
mov [ecx+3*16 +4],ebx ;m[3][1] |
mov [ecx+3*16 +8],ebx ;m[3][2] |
mov [ecx+ 12],ebx ;m[0][3] |
mov [ecx+ 16+12],ebx ;m[1][3] |
mov [ecx+2*16+12],ebx ;m[2][3] |
mov ebx,1.0 |
mov [ecx+3*16+12],ebx ;m[3][3] |
; do the math |
; m.m[0][0]=u[0]*u[0]+cost*(1-u[0]*u[0]); |
; m.m[1][0]=u[0]*u[1]*(1-cost)-u[2]*sint; |
; m.m[2][0]=u[2]*u[0]*(1-cost)+u[1]*sint; |
; m.m[0][1]=u[0]*u[1]*(1-cost)+u[2]*sint; |
; m.m[1][1]=u[1]*u[1]+cost*(1-u[1]*u[1]); |
; m.m[2][1]=u[1]*u[2]*(1-cost)-u[0]*sint; |
; m.m[0][2]=u[2]*u[0]*(1-cost)-u[1]*sint; |
; m.m[1][2]=u[1]*u[2]*(1-cost)+u[0]*sint; |
; m.m[2][2]=u[2]*u[2]+cost*(1-u[2]*u[2]); |
.end_sw: |
mov eax,[context] |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
stdcall gl_M4_MulLeft,dword[ebx+offs_cont_matrix_stack_ptr],ecx |
if DEBUG ;glopRotete |
stdcall gl_print_matrix,ecx,4 |
end if |
gl_matrix_update eax,ebx |
.end_f: |
ret |
endp |
align 4 |
proc glopScale uses eax ebx ecx, context:dword, p:dword |
mov ecx,[p] |
mov eax,[context] |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
mov ebx,[ebx+offs_cont_matrix_stack_ptr] ;ebx = &m[0] |
fld dword[ecx+ 4] ;x |
fld dword[ecx+ 8] ;y |
fld dword[ecx+12] ;z |
mov ecx,4 |
@@: |
fld dword[ebx] ;m[0] |
fmul st0,st3 ;m[0] * x |
fstp dword[ebx] ;m[0] *= x |
fld dword[ebx+4] ;m[1] |
fmul st0,st2 ;m[1] * y |
fstp dword[ebx+4];m[1] *= y |
fld dword[ebx+8] ;m[2] |
fmul st0,st1 ;m[2] * z |
fstp dword[ebx+8];m[2] *= z |
add ebx,16 |
loop @b |
if DEBUG ;glopScale |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
stdcall gl_print_matrix,[ebx+offs_cont_matrix_stack_ptr],4 |
end if |
gl_matrix_update eax,ebx |
ret |
endp |
align 4 |
proc glopTranslate uses eax ebx ecx, context:dword, p:dword |
mov ecx,[p] |
mov eax,[context] |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
mov ebx,[ebx+offs_cont_matrix_stack_ptr] ;ebx = &m[0] |
fld dword[ecx+ 4] ;x |
fld dword[ecx+ 8] ;y |
fld dword[ecx+12] ;z |
mov ecx,4 |
@@: |
fld dword[ebx] ;m[0] |
fmul st0,st3 ;m[0] * x |
fld dword[ebx+4] ;m[1] |
fmul st0,st3 ;m[1] * y |
fld dword[ebx+8] ;m[2] |
fmul st0,st3 ;m[2] * z |
fadd st0,st1 |
fadd st0,st2 |
fadd dword[ebx+12] ;m[3] |
fstp dword[ebx+12] ;m[3] = m[0] * x + m[1] * y + m[2] * z + m[3] |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
add ebx,16 |
loop @b |
if DEBUG ;glopTranslate |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
stdcall gl_print_matrix,[ebx+offs_cont_matrix_stack_ptr],4 |
end if |
gl_matrix_update eax,ebx |
ret |
endp |
align 4 |
proc glopFrustum uses eax ebx ecx, context:dword, p:dword |
locals |
x dd ? |
y dd ? |
A dd ? |
B dd ? |
C dd ? |
D dd ? |
m M4 |
endl |
mov eax,[context] |
mov ebx,[p] |
fld dword[ebx+8] |
fsub dword[ebx+4] ;st0 = (right-left) |
fld dword[ebx+20] ;st0 = near |
fadd st0,st0 |
fdiv st0,st1 |
fstp dword[x] ;x = (2.0*near) / (right-left) |
fld dword[ebx+16] |
fsub dword[ebx+12] ;st0 = (top-bottom) |
fld dword[ebx+20] ;st0 = near |
fadd st0,st0 |
fdiv st0,st1 |
fstp dword[y] ;y = (2.0*near) / (top-bottom) |
fld dword[ebx+8] |
fadd dword[ebx+4] ;st0 = (right+left) |
fdiv st0,st2 ;st2 = (right-left) |
fstp dword[A] ;A = (right+left) / (right-left) |
fld dword[ebx+16] |
fadd dword[ebx+12] ;st0 = (top+bottom) |
fdiv st0,st1 ;st1 = (top-bottom) |
fstp dword[B] ;B = (top+bottom) / (top-bottom) |
fld dword[ebx+24] |
fsub dword[ebx+20] ;st0 = (farp-near) |
fldz |
fsub dword[ebx+24] |
fsub dword[ebx+20] ;st0 = -(farp+near) |
fdiv st0,st1 |
fstp dword[C] ;C = -(farp+near) / (farp-near) |
fld dword[ebx+24] |
fmul dword[ebx+20] ;st0 = farp*near |
fadd st0,st0 |
fchs ;st0 = -(2.0*farp*near) |
fdiv st0,st1 |
fstp dword[D] ;D = -(2.0*farp*near) / (farp-near) |
mov ecx,ebp |
sub ecx,sizeof.M4 |
mov ebx,[x] |
mov dword[ecx],ebx |
mov dword[ecx+4],0.0 |
mov ebx,[A] |
mov dword[ecx+8],ebx |
mov dword[ecx+12],0.0 |
mov dword[ecx+16],0.0 |
mov ebx,[y] |
mov dword[ecx+20],ebx |
mov ebx,[B] |
mov dword[ecx+24],ebx |
mov dword[ecx+28],0.0 |
mov dword[ecx+32],0.0 |
mov dword[ecx+36],0.0 |
mov ebx,[C] |
mov dword[ecx+40],ebx |
mov ebx,[D] |
mov dword[ecx+44],ebx |
mov dword[ecx+48],0.0 |
mov dword[ecx+52],0.0 |
mov dword[ecx+56],-1.0 |
mov dword[ecx+60],0.0 |
mov ebx,[eax+offs_cont_matrix_mode] |
shl ebx,2 |
add ebx,eax |
stdcall gl_M4_MulLeft,dword[ebx+offs_cont_matrix_stack_ptr],ecx |
if DEBUG ;glopFrustum |
stdcall gl_print_matrix,ecx,4 |
stdcall gl_print_matrix,dword[ebx+offs_cont_matrix_stack_ptr],4 |
end if |
gl_matrix_update eax,ebx |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/misc.asm |
---|
0,0 → 1,273 |
align 4 |
proc glopViewport uses eax ebx ecx edx, context:dword, p:dword |
locals |
xsize dd ? ;int |
ysize dd ? ;int |
xmin dd ? ;int |
ymin dd ? ;int |
xsize_req dd ? ;int |
ysize_req dd ? ;int |
endl |
mov edx,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] |
mov [xmin],ecx |
mov ecx,[ebx+8] |
mov [ymin],ecx |
mov ecx,[ebx+12] |
mov [xsize],ecx |
mov ecx,[ebx+16] |
mov [ysize],ecx |
; we may need to resize the zbuffer |
cmp dword[edx+offs_cont_viewport+offs_vpor_ysize],ecx |
jne @f |
mov ecx,[xmin] |
cmp dword[edx+offs_cont_viewport+offs_vpor_xmin],ecx |
jne @f |
mov ecx,[ymin] |
cmp dword[edx+offs_cont_viewport+offs_vpor_ymin],ecx |
jne @f |
mov ecx,[xsize] |
cmp dword[edx+offs_cont_viewport+offs_vpor_xsize],ecx |
jne @f |
jmp .end_f |
@@: |
mov ecx,[xmin] |
add ecx,[xsize] |
mov [xsize_req],ecx ;xsize_req = xmin + xsize |
mov ecx,[ymin] |
add ecx,[ysize] |
mov [ysize_req],ecx ;ysize_req = ymin + ysize |
cmp dword[edx+offs_cont_gl_resize_viewport],0 |
je @f |
mov eax,ebp |
sub eax,4 |
push eax |
sub eax,4 |
push eax |
stdcall dword[edx+offs_cont_gl_resize_viewport], edx ;gl_resize_viewport(context,&xsize_req,&ysize_req) |
cmp eax,0 |
je @f |
stdcall dbg_print,f_vp,err_4 |
@@: |
mov ecx,[xsize_req] |
sub ecx,[xmin] |
mov [xsize],ecx |
mov ecx,[ysize_req] |
sub ecx,[ymin] |
mov [ysize],ecx |
cmp ecx,0 |
jg @f |
cmp dword[xsize],0 |
jg @f |
stdcall dbg_print,f_vp,err_5 |
@@: |
if DEBUG ;glopViewport |
push edi |
mov ecx,80 |
mov eax,[xmin] |
lea edi,[buf_param] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[ymin] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[xsize] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[ysize] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,f_vp,buf_param |
pop edi |
end if |
mov ecx,[xmin] |
mov dword[edx+offs_cont_viewport+offs_vpor_xmin],ecx |
mov ecx,[ymin] |
mov dword[edx+offs_cont_viewport+offs_vpor_ymin],ecx |
mov ecx,[xsize] |
mov dword[edx+offs_cont_viewport+offs_vpor_xsize],ecx |
mov ecx,[ysize] |
mov dword[edx+offs_cont_viewport+offs_vpor_ysize],ecx |
mov dword[edx+offs_cont_viewport+offs_vpor_updated],1 |
.end_f: |
ret |
endp |
align 4 |
proc glopEnableDisable uses eax ebx ecx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+8] |
mov ebx,[ebx+4] |
cmp ebx,GL_CULL_FACE |
jne @f |
mov [eax+offs_cont_cull_face_enabled],ecx |
jmp .end_f |
@@: |
cmp ebx,GL_LIGHTING |
jne @f |
mov [eax+offs_cont_lighting_enabled],ecx |
jmp .end_f |
@@: |
cmp ebx,GL_COLOR_MATERIAL |
jne @f |
mov [eax+offs_cont_color_material_enabled],ecx |
jmp .end_f |
@@: |
cmp ebx,GL_TEXTURE_2D |
jne @f |
mov [eax+offs_cont_texture_2d_enabled],ecx |
jmp .end_f |
@@: |
cmp ebx,GL_NORMALIZE |
jne @f |
mov [eax+offs_cont_normalize_enabled],ecx |
jmp .end_f |
@@: |
cmp ebx,GL_DEPTH_TEST |
jne @f |
mov [eax+offs_cont_depth_test],ecx |
jmp .end_f |
@@: |
cmp ebx,GL_POLYGON_OFFSET_FILL |
jne .polygon_offset_fill |
cmp ecx,0 |
je @f |
or dword[eax+offs_cont_offset_states],TGL_OFFSET_FILL |
jmp .end_f |
@@: |
and dword[eax+offs_cont_offset_states],not TGL_OFFSET_FILL |
jmp .end_f |
.polygon_offset_fill: |
cmp ebx,GL_POLYGON_OFFSET_POINT |
jne .polygon_offset_point |
cmp ecx,0 |
je @f |
or dword[eax+offs_cont_offset_states],TGL_OFFSET_POINT |
jmp .end_f |
@@: |
and dword[eax+offs_cont_offset_states],not TGL_OFFSET_POINT |
jmp .end_f |
.polygon_offset_point: |
cmp ebx,GL_POLYGON_OFFSET_LINE |
jne .polygon_offset_line |
cmp ecx,0 |
je @f |
or dword[eax+offs_cont_offset_states],TGL_OFFSET_LINE |
jmp .end_f |
@@: |
and dword[eax+offs_cont_offset_states],not TGL_OFFSET_LINE |
jmp .end_f |
.polygon_offset_line: ;default: |
cmp ebx,GL_LIGHT0 |
jl .els_0 |
cmp ebx,GL_LIGHT0+MAX_LIGHTS |
jge .els_0 ;if (GL_LIGHT0 <= ebx < GL_LIGHT0+MAX_LIGHTS) |
stdcall gl_enable_disable_light, eax,ebx-GL_LIGHT0,ecx |
jmp .end_f |
.els_0: |
;//fprintf(stderr,"glEnableDisable: 0x%X not supported.\n",code); |
.end_f: |
ret |
endp |
align 4 |
proc glopShadeModel uses eax ebx, context:dword,p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] |
mov [eax+offs_cont_current_shade_model],ebx |
ret |
endp |
align 4 |
proc glopCullFace uses eax ebx, context:dword,p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] |
mov [eax+offs_cont_current_cull_face],ebx |
ret |
endp |
align 4 |
proc glopFrontFace uses eax ebx, context:dword,p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] |
mov [eax+offs_cont_current_front_face],ebx |
ret |
endp |
align 4 |
proc glopPolygonMode uses eax ebx, context:dword,p:dword |
mov eax,[context] |
mov ebx,[p] |
cmp dword[ebx+4],GL_BACK |
jne @f |
mov ebx,[ebx+8] |
mov [eax+offs_cont_polygon_mode_back],ebx |
jmp .end_f |
@@: |
cmp dword[ebx+4],GL_FRONT |
jne @f |
mov ebx,[ebx+8] |
mov [eax+offs_cont_polygon_mode_front],ebx |
jmp .end_f |
@@: |
cmp dword[ebx+4],GL_FRONT_AND_BACK |
jne @f |
mov ebx,[ebx+8] |
mov [eax+offs_cont_polygon_mode_front],ebx |
mov [eax+offs_cont_polygon_mode_back],ebx |
jmp .end_f |
@@: |
; assert(0); |
.end_f: |
ret |
endp |
align 4 |
proc glopHint, context:dword,p:dword |
if 0 |
; int target=p[1].i; |
; int mode=p[2].i; |
; do nothing |
end if |
ret |
endp |
align 4 |
proc glopPolygonOffset uses eax ebx ecx, context:dword,p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ecx,[ebx+4] |
mov [eax+offs_cont_offset_factor],ecx |
mov ecx,[ebx+8] |
mov [eax+offs_cont_offset_units],ecx |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/opengl_const.inc |
---|
0,0 → 1,1963 |
;GLtypes |
GLenum equ dd |
GLboolean equ db |
GLbitfield equ dd |
GLbyte equ db |
GLshort equ dw |
GLint equ dd |
GLsizei equ dd |
GLubyte equ db |
GLushort equ dw |
GLuint equ dd |
GLfloat equ dd |
GLclampf equ dd |
GLdouble equ dq |
GLclampd equ dq |
;GLerrors |
GL_NO_ERROR=0 |
GL_INVALID_ENUM=$0500 |
GL_INVALID_VALUE=$0501 |
GL_INVALID_OPERATION=$0502 |
GL_STACK_OVERFLOW=$0503 |
GL_STACK_UNDERFLOW=$0504 |
GL_OUT_OF_MEMORY=$0505 |
;Attributebits |
GL_CURRENT_BIT=$00000001 |
GL_POINT_BIT=$00000002 |
GL_LINE_BIT=$00000004 |
GL_POLYGON_BIT=$00000008 |
GL_POLYGON_STIPPLE_BIT=$00000010 |
GL_PIXEL_MODE_BIT=$00000020 |
GL_LIGHTING_BIT=$00000040 |
GL_FOG_BIT=$00000080 |
GL_DEPTH_BUFFER_BIT=$00000100 |
GL_ACCUM_BUFFER_BIT=$00000200 |
GL_STENCIL_BUFFER_BIT=$00000400 |
GL_VIEWPORT_BIT=$00000800 |
GL_TRANSFORM_BIT=$00001000 |
GL_ENABLE_BIT=$00002000 |
GL_COLOR_BUFFER_BIT=$00004000 |
GL_HINT_BIT=$00008000 |
GL_EVAL_BIT=$00010000 |
GL_LIST_BIT=$00020000 |
GL_TEXTURE_BIT=$00040000 |
GL_SCISSOR_BIT=$00080000 |
GL_ALL_ATTRIB_BITS=$000FFFFF |
;Clientattributebits |
GL_CLIENT_PIXEL_STORE_BIT=$00000001 |
GL_CLIENT_VERTEX_ARRAY_BIT=$00000002 |
GL_CLIENT_ALL_ATTRIB_BITS=$FFFFFFFF |
;Booleanvalues |
GL_FALSE=0 |
GL_TRUE=1 |
;Primitives |
GL_POINTS=$0000 |
GL_LINES=$0001 |
GL_LINE_LOOP=$0002 |
GL_LINE_STRIP=$0003 |
GL_TRIANGLES=$0004 |
GL_TRIANGLE_STRIP=$0005 |
GL_TRIANGLE_FAN=$0006 |
GL_QUADS=$0007 |
GL_QUAD_STRIP=$0008 |
GL_POLYGON=$0009 |
;Blending |
GL_ZERO=0 |
GL_ONE=1 |
GL_SRC_COLOR=$0300 |
GL_ONE_MINUS_SRC_COLOR=$0301 |
GL_SRC_ALPHA=$0302 |
GL_ONE_MINUS_SRC_ALPHA=$0303 |
GL_DST_ALPHA=$0304 |
GL_ONE_MINUS_DST_ALPHA=$0305 |
GL_DST_COLOR=$0306 |
GL_ONE_MINUS_DST_COLOR=$0307 |
GL_SRC_ALPHA_SATURATE=$0308 |
GL_BLEND_DST=$0BE0 |
GL_BLEND_SRC=$0BE1 |
GL_BLEND=$0BE2 |
;Blending(GL1.2ARBimaging) |
GL_BLEND_COLOR=$8005 |
GL_CONSTANT_COLOR=$8001 |
GL_ONE_MINUS_CONSTANT_COLOR=$8002 |
GL_CONSTANT_ALPHA=$8003 |
GL_ONE_MINUS_CONSTANT_ALPHA=$8004 |
GL_FUNC_ADD=$8006 |
GL_MIN=$8007 |
GL_MAX=$8008 |
GL_FUNC_SUBTRACT=$800A |
GL_FUNC_REVERSE_SUBTRACT=$800B |
;Colortable(GL1.2ARBimaging) |
GL_COLOR_TABLE=$80D0 |
GL_POST_CONVOLUTION_COLOR_TABLE=$80D1 |
GL_POST_COLOR_MATRIX_COLOR_TABLE=$80D2 |
GL_PROXY_COLOR_TABLE=$80D3 |
GL_PROXY_POST_CONVOLUTION_COLOR_TABLE=$80D4 |
GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE=$80D5 |
GL_COLOR_TABLE_SCALE=$80D6 |
GL_COLOR_TABLE_BIAS=$80D7 |
GL_COLOR_TABLE_FORMAT=$80D8 |
GL_COLOR_TABLE_WIDTH=$80D9 |
GL_COLOR_TABLE_RED_SIZE=$80DA |
GL_COLOR_TABLE_GREEN_SIZE=$80DB |
GL_COLOR_TABLE_BLUE_SIZE=$80DC |
GL_COLOR_TABLE_ALPHA_SIZE=$80DD |
GL_COLOR_TABLE_LUMINANCE_SIZE=$80DE |
GL_COLOR_TABLE_INTENSITY_SIZE=$80DF |
;Convolutions(GL1.2ARBimaging) |
GL_CONVOLUTION_1D=$8010 |
GL_CONVOLUTION_2D=$8011 |
GL_SEPARABLE_2D=$8012 |
GL_CONVOLUTION_BORDER_MODE=$8013 |
GL_CONVOLUTION_FILTER_SCALE=$8014 |
GL_CONVOLUTION_FILTER_BIAS=$8015 |
GL_REDUCE=$8016 |
GL_CONVOLUTION_FORMAT=$8017 |
GL_CONVOLUTION_WIDTH=$8018 |
GL_CONVOLUTION_HEIGHT=$8019 |
GL_MAX_CONVOLUTION_WIDTH=$801A |
GL_MAX_CONVOLUTION_HEIGHT=$801B |
GL_POST_CONVOLUTION_RED_SCALE=$801C |
GL_POST_CONVOLUTION_GREEN_SCALE=$801D |
GL_POST_CONVOLUTION_BLUE_SCALE=$801E |
GL_POST_CONVOLUTION_ALPHA_SCALE=$801F |
GL_POST_CONVOLUTION_RED_BIAS=$8020 |
GL_POST_CONVOLUTION_GREEN_BIAS=$8021 |
GL_POST_CONVOLUTION_BLUE_BIAS=$8022 |
GL_POST_CONVOLUTION_ALPHA_BIAS=$8023 |
;Histogram(GL1.2ARBimaging) |
GL_HISTOGRAM=$8024 |
GL_PROXY_HISTOGRAM=$8025 |
GL_HISTOGRAM_WIDTH=$8026 |
GL_HISTOGRAM_FORMAT=$8027 |
GL_HISTOGRAM_RED_SIZE=$8028 |
GL_HISTOGRAM_GREEN_SIZE=$8029 |
GL_HISTOGRAM_BLUE_SIZE=$802A |
GL_HISTOGRAM_ALPHA_SIZE=$802B |
GL_HISTOGRAM_LUMINANCE_SIZE=$802C |
GL_HISTOGRAM_SINK=$802D |
GL_MINMAX=$802E |
GL_MINMAX_FORMAT=$802F |
GL_MINMAX_SINK=$8030 |
;Buffers |
GL_NONE=0 |
GL_FRONT_LEFT=$0400 |
GL_FRONT_RIGHT=$0401 |
GL_BACK_LEFT=$0402 |
GL_BACK_RIGHT=$0403 |
GL_FRONT=$0404 |
GL_BACK=$0405 |
GL_LEFT=$0406 |
GL_RIGHT=$0407 |
GL_FRONT_AND_BACK=$0408 |
GL_AUX0=$0409 |
GL_AUX1=$040A |
GL_AUX2=$040B |
GL_AUX3=$040C |
GL_AUX_BUFFERS=$0C00 |
GL_DRAW_BUFFER=$0C01 |
GL_READ_BUFFER=$0C02 |
GL_DOUBLEBUFFER=$0C32 |
GL_STEREO=$0C33 |
;Depthbuffer |
GL_DEPTH_RANGE=$0B70 |
GL_DEPTH_TEST=$0B71 |
GL_DEPTH_WRITEMASK=$0B72 |
GL_DEPTH_CLEAR_VALUE=$0B73 |
GL_DEPTH_FUNC=$0B74 |
GL_NEVER=$0200 |
GL_LESS=$0201 |
GL_ equ AL=$0202 |
GL_L equ AL=$0203 |
GL_GREATER=$0204 |
GL_NOT equ AL=$0205 |
GL_G equ AL=$0206 |
GL_ALWAYS=$0207 |
;Accumulationbuffer |
GL_ACCUM=$0100 |
GL_LOAD=$0101 |
GL_RETURN=$0102 |
GL_MULT=$0103 |
GL_ADD=$0104 |
GL_ACCUM_CLEAR_VALUE=$0B80 |
;Feedbackbuffer |
GL_FEEDBACK_BUFFER_POINTER=$0DF0 |
GL_FEEDBACK_BUFFER_SIZE=$0DF1 |
GL_FEEDBACK_BUFFER_TYPE=$0DF2 |
;Feedbacktypes |
GL_2D=$0600 |
GL_3D=$0601 |
GL_3D_COLOR=$0602 |
GL_3D_COLOR_TEXTURE=$0603 |
GL_4D_COLOR_TEXTURE=$0604 |
;Feedbacktokens |
GL_PASS_THROUGH_TOKEN=$0700 |
GL_POINT_TOKEN=$0701 |
GL_LINE_TOKEN=$0702 |
GL_POLYGON_TOKEN=$0703 |
GL_BITMAP_TOKEN=$0704 |
GL_DRAW_PIXEL_TOKEN=$0705 |
GL_COPY_PIXEL_TOKEN=$0706 |
GL_LINE_RESET_TOKEN=$0707 |
;Fog |
GL_EXP=$0800 |
GL_EXP2=$0801 |
GL_FOG=$0B60 |
GL_FOG_INDEX=$0B61 |
GL_FOG_DENSITY=$0B62 |
GL_FOG_START=$0B63 |
GL_FOG_END=$0B64 |
GL_FOG_MODE=$0B65 |
GL_FOG_COLOR=$0B66 |
;Pixelmode,transfer |
GL_PIXEL_MAP_I_TO_I=$0C70 |
GL_PIXEL_MAP_S_TO_S=$0C71 |
GL_PIXEL_MAP_I_TO_R=$0C72 |
GL_PIXEL_MAP_I_TO_G=$0C73 |
GL_PIXEL_MAP_I_TO_B=$0C74 |
GL_PIXEL_MAP_I_TO_A=$0C75 |
GL_PIXEL_MAP_R_TO_R=$0C76 |
GL_PIXEL_MAP_G_TO_G=$0C77 |
GL_PIXEL_MAP_B_TO_B=$0C78 |
GL_PIXEL_MAP_A_TO_A=$0C79 |
;Vertexarrays |
GL_VERTEX_ARRAY_POINTER=$808E |
GL_NORMAL_ARRAY_POINTER=$808F |
GL_COLOR_ARRAY_POINTER=$8090 |
GL_INDEX_ARRAY_POINTER=$8091 |
GL_TEXTURE_COORD_ARRAY_POINTER=$8092 |
GL_EDGE_FLAG_ARRAY_POINTER=$8093 |
;Stenciling |
GL_STENCIL_TEST=$0B90 |
GL_STENCIL_CLEAR_VALUE=$0B91 |
GL_STENCIL_FUNC=$0B92 |
GL_STENCIL_VALUE_MASK=$0B93 |
GL_STENCIL_FAIL=$0B94 |
GL_STENCIL_PASS_DEPTH_FAIL=$0B95 |
GL_STENCIL_PASS_DEPTH_PASS=$0B96 |
GL_STENCIL_REF=$0B97 |
GL_STENCIL_WRITEMASK=$0B98 |
GL_KEEP=$1E00 |
GL_REPLACE=$1E01 |
GL_INCR=$1E02 |
GL_DECR=$1E03 |
;Colormaterial |
GL_COLOR_MATERIAL_FACE=$0B55 |
GL_COLOR_MATERIAL_PARAMETER=$0B56 |
GL_COLOR_MATERIAL=$0B57 |
;Points |
GL_POINT_SMOOTH=$0B10 |
GL_POINT_SIZE=$0B11 |
GL_POINT_SIZE_RANGE=$0B12 |
GL_POINT_SIZE_GRANULARITY=$0B13 |
;Lines |
GL_LINE_SMOOTH=$0B20 |
GL_LINE_WIDTH=$0B21 |
GL_LINE_WIDTH_RANGE=$0B22 |
GL_LINE_WIDTH_GRANULARITY=$0B23 |
GL_LINE_STIPPLE=$0B24 |
GL_LINE_STIPPLE_PATTERN=$0B25 |
GL_LINE_STIPPLE_REPEAT=$0B26 |
;Polygons |
GL_POLYGON_MODE=$0B40 |
GL_POLYGON_SMOOTH=$0B41 |
GL_POLYGON_STIPPLE=$0B42 |
GL_EDGE_FLAG=$0B43 |
GL_CULL_FACE=$0B44 |
GL_CULL_FACE_MODE=$0B45 |
GL_FRONT_FACE=$0B46 |
GL_CW=$0900 |
GL_CCW=$0901 |
GL_POINT=$1B00 |
GL_LINE=$1B01 |
GL_FILL=$1B02 |
;Displaylists |
GL_LIST_MODE=$0B30 |
GL_LIST_BASE=$0B32 |
GL_LIST_INDEX=$0B33 |
GL_COMPILE=$1300 |
GL_COMPILE_AND_EXECUTE=$1301 |
;Lighting |
GL_LIGHTING=$0B50 |
GL_LIGHT_MODEL_LOCAL_VIEWER=$0B51 |
GL_LIGHT_MODEL_TWO_SIDE=$0B52 |
GL_LIGHT_MODEL_AMBIENT=$0B53 |
GL_LIGHT_MODEL_COLOR_CONTROL=$81F8 |
GL_SHADE_MODEL=$0B54 |
GL_NORMALIZE=$0BA1 |
GL_AMBIENT=$1200 |
GL_DIFFUSE=$1201 |
GL_SPECULAR=$1202 |
GL_POSITION=$1203 |
GL_SPOT_DIRECTION=$1204 |
GL_SPOT_EXPONENT=$1205 |
GL_SPOT_CUTOFF=$1206 |
GL_CONSTANT_ATTENUATION=$1207 |
GL_LINEAR_ATTENUATION=$1208 |
GL_QUADRATIC_ATTENUATION=$1209 |
GL_EMISSION=$1600 |
GL_SHININESS=$1601 |
GL_AMBIENT_AND_DIFFUSE=$1602 |
GL_COLOR_INDEXES=$1603 |
GL_FLAT=$1D00 |
GL_SMOOTH=$1D01 |
GL_LIGHT0=$4000 |
GL_LIGHT1=$4001 |
GL_LIGHT2=$4002 |
GL_LIGHT3=$4003 |
GL_LIGHT4=$4004 |
GL_LIGHT5=$4005 |
GL_LIGHT6=$4006 |
GL_LIGHT7=$4007 |
;Matrixmodes |
GL_MATRIX_MODE=$0BA0 |
GL_MODELVIEW=$1700 |
GL_PROJECTION=$1701 |
GL_TEXTURE=$1702 |
;Gets |
GL_CURRENT_COLOR=$0B00 |
GL_CURRENT_INDEX=$0B01 |
GL_CURRENT_NORMAL=$0B02 |
GL_CURRENT_TEXTURE_COORDS=$0B03 |
GL_CURRENT_RASTER_COLOR=$0B04 |
GL_CURRENT_RASTER_INDEX=$0B05 |
GL_CURRENT_RASTER_TEXTURE_COORDS=$0B06 |
GL_CURRENT_RASTER_POSITION=$0B07 |
GL_CURRENT_RASTER_POSITION_VALID=$0B08 |
GL_CURRENT_RASTER_DISTANCE=$0B09 |
GL_MAX_LIST_NESTING=$0B31 |
GL_VIEWPORT=$0BA2 |
GL_MODELVIEW_STACK_DEPTH=$0BA3 |
GL_PROJECTION_STACK_DEPTH=$0BA4 |
GL_TEXTURE_STACK_DEPTH=$0BA5 |
GL_MODELVIEW_MATRIX=$0BA6 |
GL_PROJECTION_MATRIX=$0BA7 |
GL_TEXTURE_MATRIX=$0BA8 |
GL_ATTRIB_STACK_DEPTH=$0BB0 |
GL_CLIENT_ATTRIB_STACK_DEPTH=$0BB1 |
GL_SINGLE_COLOR=$81F9 |
GL_SEPARATE_SPECULAR_COLOR=$81FA |
;Alphatesting |
GL_ALPHA_TEST=$0BC0 |
GL_ALPHA_TEST_FUNC=$0BC1 |
GL_ALPHA_TEST_REF=$0BC2 |
GL_LOGIC_OP_MODE=$0BF0 |
GL_INDEX_LOGIC_OP=$0BF1 |
GL_LOGIC_OP=$0BF1 |
GL_COLOR_LOGIC_OP=$0BF2 |
GL_SCISSOR_BOX=$0C10 |
GL_SCISSOR_TEST=$0C11 |
GL_INDEX_CLEAR_VALUE=$0C20 |
GL_INDEX_WRITEMASK=$0C21 |
GL_COLOR_CLEAR_VALUE=$0C22 |
GL_COLOR_WRITEMASK=$0C23 |
GL_INDEX_MODE=$0C30 |
GL_RGBA_MODE=$0C31 |
GL_RENDER_MODE=$0C40 |
GL_PERSPECTIVE_CORRECTION_HINT=$0C50 |
GL_POINT_SMOOTH_HINT=$0C51 |
GL_LINE_SMOOTH_HINT=$0C52 |
GL_POLYGON_SMOOTH_HINT=$0C53 |
GL_FOG_HINT=$0C54 |
GL_TEXTURE_GEN_S=$0C60 |
GL_TEXTURE_GEN_T=$0C61 |
GL_TEXTURE_GEN_R=$0C62 |
GL_TEXTURE_GEN_Q=$0C63 |
GL_PIXEL_MAP_I_TO_I_SIZE=$0CB0 |
GL_PIXEL_MAP_S_TO_S_SIZE=$0CB1 |
GL_PIXEL_MAP_I_TO_R_SIZE=$0CB2 |
GL_PIXEL_MAP_I_TO_G_SIZE=$0CB3 |
GL_PIXEL_MAP_I_TO_B_SIZE=$0CB4 |
GL_PIXEL_MAP_I_TO_A_SIZE=$0CB5 |
GL_PIXEL_MAP_R_TO_R_SIZE=$0CB6 |
GL_PIXEL_MAP_G_TO_G_SIZE=$0CB7 |
GL_PIXEL_MAP_B_TO_B_SIZE=$0CB8 |
GL_PIXEL_MAP_A_TO_A_SIZE=$0CB9 |
GL_UNPACK_SWAP_BYTES=$0CF0 |
GL_UNPACK_LSB_FIRST=$0CF1 |
GL_UNPACK_ROW_LENGTH=$0CF2 |
GL_UNPACK_SKIP_ROWS=$0CF3 |
GL_UNPACK_SKIP_PIXELS=$0CF4 |
GL_UNPACK_ALIGNMENT=$0CF5 |
GL_PACK_SWAP_BYTES=$0D00 |
GL_PACK_LSB_FIRST=$0D01 |
GL_PACK_ROW_LENGTH=$0D02 |
GL_PACK_SKIP_ROWS=$0D03 |
GL_PACK_SKIP_PIXELS=$0D04 |
GL_PACK_ALIGNMENT=$0D05 |
GL_PACK_SKIP_IMAGES=$806B |
GL_PACK_IMAGE_HEIGHT=$806C |
GL_UNPACK_SKIP_IMAGES=$806D |
GL_UNPACK_IMAGE_HEIGHT=$806E |
GL_MAP_COLOR=$0D10 |
GL_MAP_STENCIL=$0D11 |
GL_INDEX_SHIFT=$0D12 |
GL_INDEX_OFFSET=$0D13 |
GL_RED_SCALE=$0D14 |
GL_RED_BIAS=$0D15 |
GL_ZOOM_X=$0D16 |
GL_ZOOM_Y=$0D17 |
GL_GREEN_SCALE=$0D18 |
GL_GREEN_BIAS=$0D19 |
GL_BLUE_SCALE=$0D1A |
GL_BLUE_BIAS=$0D1B |
GL_ALPHA_SCALE=$0D1C |
GL_ALPHA_BIAS=$0D1D |
GL_DEPTH_SCALE=$0D1E |
GL_DEPTH_BIAS=$0D1F |
GL_MAX_EVAL_ORDER=$0D30 |
GL_MAX_LIGHTS=$0D31 |
GL_MAX_CLIP_PLANES=$0D32 |
GL_MAX_TEXTURE_SIZE=$0D33 |
GL_MAX_3D_TEXTURE_SIZE=$8073 |
GL_MAX_PIXEL_MAP_TABLE=$0D34 |
GL_MAX_ATTRIB_STACK_DEPTH=$0D35 |
GL_MAX_MODELVIEW_STACK_DEPTH=$0D36 |
GL_MAX_NAME_STACK_DEPTH=$0D37 |
GL_MAX_PROJECTION_STACK_DEPTH=$0D38 |
GL_MAX_TEXTURE_STACK_DEPTH=$0D39 |
GL_MAX_VIEWPORT_DIMS=$0D3A |
GL_MAX_CLIENT_ATTRIB_STACK_DEPTH=$0D3B |
GL_MAX_ELEMENTS_VERTICES=$80E8 |
GL_MAX_ELEMENTS_INDICES=$80E9 |
GL_RESCALE_NORMAL=$803A |
GL_SUBPIXEL_BITS=$0D50 |
GL_INDEX_BITS=$0D51 |
GL_RED_BITS=$0D52 |
GL_GREEN_BITS=$0D53 |
GL_BLUE_BITS=$0D54 |
GL_ALPHA_BITS=$0D55 |
GL_DEPTH_BITS=$0D56 |
GL_STENCIL_BITS=$0D57 |
GL_ACCUM_RED_BITS=$0D58 |
GL_ACCUM_GREEN_BITS=$0D59 |
GL_ACCUM_BLUE_BITS=$0D5A |
GL_ACCUM_ALPHA_BITS=$0D5B |
GL_NAME_STACK_DEPTH=$0D70 |
GL_AUTO_NORMAL=$0D80 |
GL_MAP1_COLOR_4=$0D90 |
GL_MAP1_INDEX=$0D91 |
GL_MAP1_NORMAL=$0D92 |
GL_MAP1_TEXTURE_COORD_1=$0D93 |
GL_MAP1_TEXTURE_COORD_2=$0D94 |
GL_MAP1_TEXTURE_COORD_3=$0D95 |
GL_MAP1_TEXTURE_COORD_4=$0D96 |
GL_MAP1_VERTEX_3=$0D97 |
GL_MAP1_VERTEX_4=$0D98 |
GL_MAP2_COLOR_4=$0DB0 |
GL_MAP2_INDEX=$0DB1 |
GL_MAP2_NORMAL=$0DB2 |
GL_MAP2_TEXTURE_COORD_1=$0DB3 |
GL_MAP2_TEXTURE_COORD_2=$0DB4 |
GL_MAP2_TEXTURE_COORD_3=$0DB5 |
GL_MAP2_TEXTURE_COORD_4=$0DB6 |
GL_MAP2_VERTEX_3=$0DB7 |
GL_MAP2_VERTEX_4=$0DB8 |
GL_MAP1_GRID_DOMAIN=$0DD0 |
GL_MAP1_GRID_SEGMENTS=$0DD1 |
GL_MAP2_GRID_DOMAIN=$0DD2 |
GL_MAP2_GRID_SEGMENTS=$0DD3 |
GL_TEXTURE_1D=$0DE0 |
GL_TEXTURE_2D=$0DE1 |
GL_TEXTURE_3D=$806F |
GL_SELECTION_BUFFER_POINTER=$0DF3 |
GL_SELECTION_BUFFER_SIZE=$0DF4 |
GL_POLYGON_OFFSET_UNITS=$2A00 |
GL_POLYGON_OFFSET_POINT=$2A01 |
GL_POLYGON_OFFSET_LINE=$2A02 |
GL_POLYGON_OFFSET_FILL=$8037 |
GL_POLYGON_OFFSET_FACTOR=$8038 |
GL_TEXTURE_BINDING_1D=$8068 |
GL_TEXTURE_BINDING_2D=$8069 |
GL_VERTEX_ARRAY=$8074 |
GL_NORMAL_ARRAY=$8075 |
GL_COLOR_ARRAY=$8076 |
GL_INDEX_ARRAY=$8077 |
GL_TEXTURE_COORD_ARRAY=$8078 |
GL_EDGE_FLAG_ARRAY=$8079 |
GL_VERTEX_ARRAY_SIZE=$807A |
GL_VERTEX_ARRAY_TYPE=$807B |
GL_VERTEX_ARRAY_STRIDE=$807C |
GL_NORMAL_ARRAY_TYPE=$807E |
GL_NORMAL_ARRAY_STRIDE=$807F |
GL_COLOR_ARRAY_SIZE=$8081 |
GL_COLOR_ARRAY_TYPE=$8082 |
GL_COLOR_ARRAY_STRIDE=$8083 |
GL_INDEX_ARRAY_TYPE=$8085 |
GL_INDEX_ARRAY_STRIDE=$8086 |
GL_TEXTURE_COORD_ARRAY_SIZE=$8088 |
GL_TEXTURE_COORD_ARRAY_TYPE=$8089 |
GL_TEXTURE_COORD_ARRAY_STRIDE=$808A |
GL_EDGE_FLAG_ARRAY_STRIDE=$808C |
GL_COLOR_MATRIX=$80B1 |
GL_COLOR_MATRIX_STACK_DEPTH=$80B2 |
GL_MAX_COLOR_MATRIX_STACK_DEPTH=$80B3 |
GL_POST_COLOR_MATRIX_RED_SCALE=$80B4 |
GL_POST_COLOR_MATRIX_GREEN_SCALE=$80B5 |
GL_POST_COLOR_MATRIX_BLUE_SCALE=$80B6 |
GL_POST_COLOR_MATRIX_ALPHA_SCALE=$80B7 |
GL_POST_COLOR_MATRIX_RED_BIAS=$80B8 |
GL_POST_COLOR_MATRIX_GREEN_BIAS=$80B9 |
GL_POST_COLOR_MATRIX_BLUE_BIAS=$80BA |
GL_POST_COLOR_MATRIX_ALPHA_BIAS=$80BB |
;Evaluators |
GL_COEFF=$0A00 |
GL_ORDER=$0A01 |
GL_DOMAIN=$0A02 |
;Texturemapping |
GL_TEXTURE_WIDTH=$1000 |
GL_TEXTURE_HEIGHT=$1001 |
GL_TEXTURE_INTERNAL_FORMAT=$1003 |
GL_TEXTURE_COMPONENTS=$1003 |
GL_TEXTURE_BORDER_COLOR=$1004 |
GL_TEXTURE_BORDER=$1005 |
GL_TEXTURE_RED_SIZE=$805C |
GL_TEXTURE_GREEN_SIZE=$805D |
GL_TEXTURE_BLUE_SIZE=$805E |
GL_TEXTURE_ALPHA_SIZE=$805F |
GL_TEXTURE_LUMINANCE_SIZE=$8060 |
GL_TEXTURE_INTENSITY_SIZE=$8061 |
GL_TEXTURE_PRIORITY=$8066 |
GL_TEXTURE_RESIDENT=$8067 |
GL_BGR=$80E0 |
GL_BGRA=$80E1 |
GL_S=$2000 |
GL_T=$2001 |
GL_R=$2002 |
GL_Q=$2003 |
GL_MODULATE=$2100 |
GL_DECAL=$2101 |
GL_TEXTURE_ENV_MODE=$2200 |
GL_TEXTURE_ENV_COLOR=$2201 |
GL_TEXTURE_ENV=$2300 |
GL_EYE_LINEAR=$2400 |
GL_OBJECT_LINEAR=$2401 |
GL_SPHERE_MAP=$2402 |
GL_TEXTURE_GEN_MODE=$2500 |
GL_OBJECT_PLANE=$2501 |
GL_EYE_PLANE=$2502 |
GL_NEAREST=$2600 |
GL_LINEAR=$2601 |
GL_NEAREST_MIPMAP_NEAREST=$2700 |
GL_LINEAR_MIPMAP_NEAREST=$2701 |
GL_NEAREST_MIPMAP_LINEAR=$2702 |
GL_LINEAR_MIPMAP_LINEAR=$2703 |
GL_TEXTURE_MAG_FILTER=$2800 |
GL_TEXTURE_MIN_FILTER=$2801 |
GL_TEXTURE_WRAP_R=$8072 |
GL_TEXTURE_WRAP_S=$2802 |
GL_TEXTURE_WRAP_T=$2803 |
GL_CLAMP_TO_EDGE=$812F |
GL_TEXTURE_MIN_LOD=$813A |
GL_TEXTURE_MAX_LOD=$813B |
GL_TEXTURE_BASE_LEVEL=$813C |
GL_TEXTURE_MAX_LEVEL=$813D |
GL_TEXTURE_DEPTH=$8071 |
GL_PROXY_TEXTURE_1D=$8063 |
GL_PROXY_TEXTURE_2D=$8064 |
GL_PROXY_TEXTURE_3D=$8070 |
GL_CLAMP=$2900 |
GL_REPEAT=$2901 |
;Hints |
GL_DONT_CARE=$1100 |
GL_FASTEST=$1101 |
GL_NICEST=$1102 |
;Datatypes |
GL_BYTE=$1400 |
GL_UNSIGNED_BYTE=$1401 |
GL_SHORT=$1402 |
GL_UNSIGNED_SHORT=$1403 |
GL_INT=$1404 |
GL_UNSIGNED_INT=$1405 |
GL_FLOAT=$1406 |
GL_2_BYTES=$1407 |
GL_3_BYTES=$1408 |
GL_4_BYTES=$1409 |
GL_DOUBLE=$140A |
GL_DOUBLE_EXT=$140A |
;Logicoperations |
GL_CLEAR=$1500 |
GL_AND=$1501 |
GL_AND_REVERSE=$1502 |
GL_COPY=$1503 |
GL_AND_INVERTED=$1504 |
GL_NOOP=$1505 |
GL_XOR=$1506 |
GL_OR=$1507 |
GL_NOR=$1508 |
GL_ equ IV=$1509 |
GL_INVERT=$150A |
GL_OR_REVERSE=$150B |
GL_COPY_INVERTED=$150C |
GL_OR_INVERTED=$150D |
GL_NAND=$150E |
GL_SET=$150F |
;PixelCopyType |
GL_COLOR=$1800 |
GL_DEPTH=$1801 |
GL_STENCIL=$1802 |
;Pixelformats |
GL_COLOR_INDEX=$1900 |
GL_STENCIL_INDEX=$1901 |
GL_DEPTH_COMPONENT=$1902 |
GL_RED=$1903 |
GL_GREEN=$1904 |
GL_BLUE=$1905 |
GL_ALPHA=$1906 |
GL_RGB=$1907 |
GL_RGBA=$1908 |
GL_LUMINANCE=$1909 |
GL_LUMINANCE_ALPHA=$190A |
;Pixeltype |
GL_BITMAP=$1A00 |
;Renderingmodes |
GL_RENDER=$1C00 |
GL_FEEDBACK=$1C01 |
GL_SELECT=$1C02 |
;Implementationstrings |
GL_VENDOR=$1F00 |
GL_RENDERER=$1F01 |
GL_VERSION=$1F02 |
GL_EXTENSIONS=$1F03 |
;Pixelformats |
GL_R3_G3_B2=$2A10 |
GL_ALPHA4=$803B |
GL_ALPHA8=$803C |
GL_ALPHA12=$803D |
GL_ALPHA16=$803E |
GL_LUMINANCE4=$803F |
GL_LUMINANCE8=$8040 |
GL_LUMINANCE12=$8041 |
GL_LUMINANCE16=$8042 |
GL_LUMINANCE4_ALPHA4=$8043 |
GL_LUMINANCE6_ALPHA2=$8044 |
GL_LUMINANCE8_ALPHA8=$8045 |
GL_LUMINANCE12_ALPHA4=$8046 |
GL_LUMINANCE12_ALPHA12=$8047 |
GL_LUMINANCE16_ALPHA16=$8048 |
GL_INTENSITY=$8049 |
GL_INTENSITY4=$804A |
GL_INTENSITY8=$804B |
GL_INTENSITY12=$804C |
GL_INTENSITY16=$804D |
GL_RGB4=$804F |
GL_RGB5=$8050 |
GL_RGB8=$8051 |
GL_RGB10=$8052 |
GL_RGB12=$8053 |
GL_RGB16=$8054 |
GL_RGBA2=$8055 |
GL_RGBA4=$8056 |
GL_RGB5_A1=$8057 |
GL_RGBA8=$8058 |
GL_RGB10_A2=$8059 |
GL_RGBA12=$805A |
GL_RGBA16=$805B |
UNSIGNED_BYTE_3_3_2=$8032 |
UNSIGNED_BYTE_2_3_3_REV=$8362 |
UNSIGNED_SHORT_5_6_5=$8363 |
UNSIGNED_SHORT_5_6_5_REV=$8364 |
UNSIGNED_SHORT_4_4_4_4=$8033 |
UNSIGNED_SHORT_4_4_4_4_REV=$8365 |
UNSIGNED_SHORT_5_5_5_1=$8034 |
UNSIGNED_SHORT_1_5_5_5_REV=$8366 |
UNSIGNED_INT_8_8_8_8=$8035 |
UNSIGNED_INT_8_8_8_8_REV=$8367 |
UNSIGNED_INT_10_10_10_2=$8036 |
UNSIGNED_INT_2_10_10_10_REV=$8368 |
;Interleavedarraysformats |
GL_V2F=$2A20 |
GL_V3F=$2A21 |
GL_C4UB_V2F=$2A22 |
GL_C4UB_V3F=$2A23 |
GL_C3F_V3F=$2A24 |
GL_N3F_V3F=$2A25 |
GL_C4F_N3F_V3F=$2A26 |
GL_T2F_V3F=$2A27 |
GL_T4F_V4F=$2A28 |
GL_T2F_C4UB_V3F=$2A29 |
GL_T2F_C3F_V3F=$2A2A |
GL_T2F_N3F_V3F=$2A2B |
GL_T2F_C4F_N3F_V3F=$2A2C |
GL_T4F_C4F_N3F_V4F=$2A2D |
;Clipplanes |
GL_CLIP_PLANE0=$3000 |
GL_CLIP_PLANE1=$3001 |
GL_CLIP_PLANE2=$3002 |
GL_CLIP_PLANE3=$3003 |
GL_CLIP_PLANE4=$3004 |
GL_CLIP_PLANE5=$3005 |
;Miscellaneous |
GL_DITHER=$0BD0 |
;EXT_abgr |
GL_ABGR_EXT=$8000 |
;EXT_packed_pixels |
GL_UNSIGNED_BYTE_3_3_2_EXT=$8032 |
GL_UNSIGNED_SHORT_4_4_4_4_EXT=$8033 |
GL_UNSIGNED_SHORT_5_5_5_1_EXT=$8034 |
GL_UNSIGNED_INT_8_8_8_8_EXT=$8035 |
GL_UNSIGNED_INT_10_10_10_2_EXT=$8036 |
;EXT_vertex_array |
GL_VERTEX_ARRAY_EXT=$8074 |
GL_NORMAL_ARRAY_EXT=$8075 |
GL_COLOR_ARRAY_EXT=$8076 |
GL_INDEX_ARRAY_EXT=$8077 |
GL_TEXTURE_COORD_ARRAY_EXT=$8078 |
GL_EDGE_FLAG_ARRAY_EXT=$8079 |
GL_VERTEX_ARRAY_SIZE_EXT=$807A |
GL_VERTEX_ARRAY_TYPE_EXT=$807B |
GL_VERTEX_ARRAY_STRIDE_EXT=$807C |
GL_VERTEX_ARRAY_COUNT_EXT=$807D |
GL_NORMAL_ARRAY_TYPE_EXT=$807E |
GL_NORMAL_ARRAY_STRIDE_EXT=$807F |
GL_NORMAL_ARRAY_COUNT_EXT=$8080 |
GL_COLOR_ARRAY_SIZE_EXT=$8081 |
GL_COLOR_ARRAY_TYPE_EXT=$8082 |
GL_COLOR_ARRAY_STRIDE_EXT=$8083 |
GL_COLOR_ARRAY_COUNT_EXT=$8084 |
GL_INDEX_ARRAY_TYPE_EXT=$8085 |
GL_INDEX_ARRAY_STRIDE_EXT=$8086 |
GL_INDEX_ARRAY_COUNT_EXT=$8087 |
GL_TEXTURE_COORD_ARRAY_SIZE_EXT=$8088 |
GL_TEXTURE_COORD_ARRAY_TYPE_EXT=$8089 |
GL_TEXTURE_COORD_ARRAY_STRIDE_EXT=$808A |
GL_TEXTURE_COORD_ARRAY_COUNT_EXT=$808B |
GL_EDGE_FLAG_ARRAY_STRIDE_EXT=$808C |
GL_EDGE_FLAG_ARRAY_COUNT_EXT=$808D |
GL_VERTEX_ARRAY_POINTER_EXT=$808E |
GL_NORMAL_ARRAY_POINTER_EXT=$808F |
GL_COLOR_ARRAY_POINTER_EXT=$8090 |
GL_INDEX_ARRAY_POINTER_EXT=$8091 |
GL_TEXTURE_COORD_ARRAY_POINTER_EXT=$8092 |
GL_EDGE_FLAG_ARRAY_POINTER_EXT=$8093 |
;EXT_color_table |
GL_TABLE_TOO_LARGE_EXT=$8031 |
GL_COLOR_TABLE_EXT=$80D0 |
GL_POST_CONVOLUTION_COLOR_TABLE_EXT=$80D1 |
GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT=$80D2 |
GL_PROXY_COLOR_TABLE_EXT=$80D3 |
GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT=$80D4 |
GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT=$80D5 |
GL_COLOR_TABLE_SCALE_EXT=$80D6 |
GL_COLOR_TABLE_BIAS_EXT=$80D7 |
GL_COLOR_TABLE_FORMAT_EXT=$80D8 |
GL_COLOR_TABLE_WIDTH_EXT=$80D9 |
GL_COLOR_TABLE_RED_SIZE_EXT=$80DA |
GL_COLOR_TABLE_GREEN_SIZE_EXT=$80DB |
GL_COLOR_TABLE_BLUE_SIZE_EXT=$80DC |
GL_COLOR_TABLE_ALPHA_SIZE_EXT=$80DD |
GL_COLOR_TABLE_LUMINANCE_SIZE_EXT=$80DE |
GL_COLOR_TABLE_INTENSITY_SIZE_EXT=$80DF |
;EXT_bgra |
GL_BGR_EXT=$80E0 |
GL_BGRA_EXT=$80E1 |
;EXT_paletted_texture |
GL_COLOR_INDEX1_EXT=$80E2 |
GL_COLOR_INDEX2_EXT=$80E3 |
GL_COLOR_INDEX4_EXT=$80E4 |
GL_COLOR_INDEX8_EXT=$80E5 |
GL_COLOR_INDEX12_EXT=$80E6 |
GL_COLOR_INDEX16_EXT=$80E7 |
;EXT_blend_color |
GL_CONSTANT_COLOR_EXT=$8001 |
GL_ONE_MINUS_CONSTANT_COLOR_EXT=$8002 |
GL_CONSTANT_ALPHA_EXT=$8003 |
GL_ONE_MINUS_CONSTANT_ALPHA_EXT=$8004 |
GL_BLEND_COLOR_EXT=$8005 |
;EXT_blend_minmax |
GL_FUNC_ADD_EXT=$8006 |
GL_MIN_EXT=$8007 |
GL_MAX_EXT=$8008 |
GL_BLEND_ equ ATION_EXT=$8009 |
;EXT_blend_subtract |
GL_FUNC_SUBTRACT_EXT=$800A |
GL_FUNC_REVERSE_SUBTRACT_EXT=$800B |
;EXT_convolution |
GL_CONVOLUTION_1D_EXT=$8010 |
GL_CONVOLUTION_2D_EXT=$8011 |
GL_SEPARABLE_2D_EXT=$8012 |
GL_CONVOLUTION_BORDER_MODE_EXT=$8013 |
GL_CONVOLUTION_FILTER_SCALE_EXT=$8014 |
GL_CONVOLUTION_FILTER_BIAS_EXT=$8015 |
GL_REDUCE_EXT=$8016 |
GL_CONVOLUTION_FORMAT_EXT=$8017 |
GL_CONVOLUTION_WIDTH_EXT=$8018 |
GL_CONVOLUTION_HEIGHT_EXT=$8019 |
GL_MAX_CONVOLUTION_WIDTH_EXT=$801A |
GL_MAX_CONVOLUTION_HEIGHT_EXT=$801B |
GL_POST_CONVOLUTION_RED_SCALE_EXT=$801C |
GL_POST_CONVOLUTION_GREEN_SCALE_EXT=$801D |
GL_POST_CONVOLUTION_BLUE_SCALE_EXT=$801E |
GL_POST_CONVOLUTION_ALPHA_SCALE_EXT=$801F |
GL_POST_CONVOLUTION_RED_BIAS_EXT=$8020 |
GL_POST_CONVOLUTION_GREEN_BIAS_EXT=$8021 |
GL_POST_CONVOLUTION_BLUE_BIAS_EXT=$8022 |
GL_POST_CONVOLUTION_ALPHA_BIAS_EXT=$8023 |
;EXT_histogram |
GL_HISTOGRAM_EXT=$8024 |
GL_PROXY_HISTOGRAM_EXT=$8025 |
GL_HISTOGRAM_WIDTH_EXT=$8026 |
GL_HISTOGRAM_FORMAT_EXT=$8027 |
GL_HISTOGRAM_RED_SIZE_EXT=$8028 |
GL_HISTOGRAM_GREEN_SIZE_EXT=$8029 |
GL_HISTOGRAM_BLUE_SIZE_EXT=$802A |
GL_HISTOGRAM_ALPHA_SIZE_EXT=$802B |
GL_HISTOGRAM_LUMINANCE_SIZE_EXT=$802C |
GL_HISTOGRAM_SINK_EXT=$802D |
GL_MINMAX_EXT=$802E |
GL_MINMAX_FORMAT_EXT=$802F |
GL_MINMAX_SINK_EXT=$8030 |
;EXT_polygon_offset |
GL_POLYGON_OFFSET_EXT=$8037 |
GL_POLYGON_OFFSET_FACTOR_EXT=$8038 |
GL_POLYGON_OFFSET_BIAS_EXT=$8039 |
;EXT_texture |
GL_ALPHA4_EXT=$803B |
GL_ALPHA8_EXT=$803C |
GL_ALPHA12_EXT=$803D |
GL_ALPHA16_EXT=$803E |
GL_LUMINANCE4_EXT=$803F |
GL_LUMINANCE8_EXT=$8040 |
GL_LUMINANCE12_EXT=$8041 |
GL_LUMINANCE16_EXT=$8042 |
GL_LUMINANCE4_ALPHA4_EXT=$8043 |
GL_LUMINANCE6_ALPHA2_EXT=$8044 |
GL_LUMINANCE8_ALPHA8_EXT=$8045 |
GL_LUMINANCE12_ALPHA4_EXT=$8046 |
GL_LUMINANCE12_ALPHA12_EXT=$8047 |
GL_LUMINANCE16_ALPHA16_EXT=$8048 |
GL_INTENSITY_EXT=$8049 |
GL_INTENSITY4_EXT=$804A |
GL_INTENSITY8_EXT=$804B |
GL_INTENSITY12_EXT=$804C |
GL_INTENSITY16_EXT=$804D |
GL_RGB2_EXT=$804E |
GL_RGB4_EXT=$804F |
GL_RGB5_EXT=$8050 |
GL_RGB8_EXT=$8051 |
GL_RGB10_EXT=$8052 |
GL_RGB12_EXT=$8053 |
GL_RGB16_EXT=$8054 |
GL_RGBA2_EXT=$8055 |
GL_RGBA4_EXT=$8056 |
GL_RGB5_A1_EXT=$8057 |
GL_RGBA8_EXT=$8058 |
GL_RGB10_A2_EXT=$8059 |
GL_RGBA12_EXT=$805A |
GL_RGBA16_EXT=$805B |
GL_TEXTURE_RED_SIZE_EXT=$805C |
GL_TEXTURE_GREEN_SIZE_EXT=$805D |
GL_TEXTURE_BLUE_SIZE_EXT=$805E |
GL_TEXTURE_ALPHA_SIZE_EXT=$805F |
GL_TEXTURE_LUMINANCE_SIZE_EXT=$8060 |
GL_TEXTURE_INTENSITY_SIZE_EXT=$8061 |
GL_REPLACE_EXT=$8062 |
GL_PROXY_TEXTURE_1D_EXT=$8063 |
GL_PROXY_TEXTURE_2D_EXT=$8064 |
GL_TEXTURE_TOO_LARGE_EXT=$8065 |
;EXT_texture_object |
GL_TEXTURE_PRIORITY_EXT=$8066 |
GL_TEXTURE_RESIDENT_EXT=$8067 |
GL_TEXTURE_1D_BINDING_EXT=$8068 |
GL_TEXTURE_2D_BINDING_EXT=$8069 |
GL_TEXTURE_3D_BINDING_EXT=$806A |
;EXT_texture3D |
GL_PACK_SKIP_IMAGES_EXT=$806B |
GL_PACK_IMAGE_HEIGHT_EXT=$806C |
GL_UNPACK_SKIP_IMAGES_EXT=$806D |
GL_UNPACK_IMAGE_HEIGHT_EXT=$806E |
GL_TEXTURE_3D_EXT=$806F |
GL_PROXY_TEXTURE_3D_EXT=$8070 |
GL_TEXTURE_DEPTH_EXT=$8071 |
GL_TEXTURE_WRAP_R_EXT=$8072 |
GL_MAX_3D_TEXTURE_SIZE_EXT=$8073 |
;SGI_color_matrix |
GL_COLOR_MATRIX_SGI=$80B1 |
GL_COLOR_MATRIX_STACK_DEPTH_SGI=$80B2 |
GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI=$80B3 |
GL_POST_COLOR_MATRIX_RED_SCALE_SGI=$80B4 |
GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI=$80B5 |
GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI=$80B6 |
GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI=$80B7 |
GL_POST_COLOR_MATRIX_RED_BIAS_SGI=$80B8 |
GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI=$80B9 |
GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI=$80BA |
GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI=$80BB |
;SGI_texture_color_table |
GL_TEXTURE_COLOR_TABLE_SGI=$80BC |
GL_PROXY_TEXTURE_COLOR_TABLE_SGI=$80BD |
GL_TEXTURE_COLOR_TABLE_BIAS_SGI=$80BE |
GL_TEXTURE_COLOR_TABLE_SCALE_SGI=$80BF |
;SGI_color_table |
GL_COLOR_TABLE_SGI=$80D0 |
GL_POST_CONVOLUTION_COLOR_TABLE_SGI=$80D1 |
GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI=$80D2 |
GL_PROXY_COLOR_TABLE_SGI=$80D3 |
GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI=$80D4 |
GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI=$80D5 |
GL_COLOR_TABLE_SCALE_SGI=$80D6 |
GL_COLOR_TABLE_BIAS_SGI=$80D7 |
GL_COLOR_TABLE_FORMAT_SGI=$80D8 |
GL_COLOR_TABLE_WIDTH_SGI=$80D9 |
GL_COLOR_TABLE_RED_SIZE_SGI=$80DA |
GL_COLOR_TABLE_GREEN_SIZE_SGI=$80DB |
GL_COLOR_TABLE_BLUE_SIZE_SGI=$80DC |
GL_COLOR_TABLE_ALPHA_SIZE_SGI=$80DD |
GL_COLOR_TABLE_LUMINANCE_SIZE_SGI=$80DE |
GL_COLOR_TABLE_INTENSITY_SIZE_SGI=$80DF |
;EXT_cmyka |
GL_CMYK_EXT=$800C |
GL_CMYKA_EXT=$800D |
GL_PACK_CMYK_HINT_EXT=$800E |
GL_UNPACK_CMYK_HINT_EXT=$800F |
;EXT_rescale_normal |
GL_RESCALE_NORMAL_EXT=$803A |
;EXT_clip_volume_hint |
GL_CLIP_VOLUME_CLIPPING_HINT_EXT=$80F0 |
;EXT_cull_vertex |
GL_CULL_VERTEX_EXT=$81AA |
GL_CULL_VERTEX_EYE_POSITION_EXT=$81AB |
GL_CULL_VERTEX_OBJECT_POSITION_EXT=$81AC |
;EXT_index_array_formats |
GL_IUI_V2F_EXT=$81AD |
GL_IUI_V3F_EXT=$81AE |
GL_IUI_N3F_V2F_EXT=$81AF |
GL_IUI_N3F_V3F_EXT=$81B0 |
GL_T2F_IUI_V2F_EXT=$81B1 |
GL_T2F_IUI_V3F_EXT=$81B2 |
GL_T2F_IUI_N3F_V2F_EXT=$81B3 |
GL_T2F_IUI_N3F_V3F_EXT=$81B4 |
;EXT_index_func |
GL_INDEX_TEST_EXT=$81B5 |
GL_INDEX_TEST_FUNC_EXT=$81B6 |
GL_INDEX_TEST_REF_EXT=$81B7 |
;EXT_index_material |
GL_INDEX_MATERIAL_EXT=$81B8 |
GL_INDEX_MATERIAL_PARAMETER_EXT=$81B9 |
GL_INDEX_MATERIAL_FACE_EXT=$81BA |
;EXT_shared_texture_palette |
GL_SHARED_TEXTURE_PALETTE_EXT=$81FB |
;EXT_nurbs_tessellator |
GLU_NURBS_MODE_EXT=100160 |
GLU_NURBS_TESSELLATOR_EXT=100161 |
GLU_NURBS_RENDERER_EXT=100162 |
GLU_NURBS_BEGIN_EXT=100164 |
GLU_NURBS_VERTEX_EXT=100165 |
GLU_NURBS_NORMAL_EXT=100166 |
GLU_NURBS_COLOR_EXT=100167 |
GLU_NURBS_TEX_COORD_EXT=100168 |
GLU_NURBS_END_EXT=100169 |
GLU_NURBS_BEGIN_DATA_EXT=100170 |
GLU_NURBS_VERTEX_DATA_EXT=100171 |
GLU_NURBS_NORMAL_DATA_EXT=100172 |
GLU_NURBS_COLOR_DATA_EXT=100173 |
GLU_NURBS_TEX_COORD_DATA_EXT=100174 |
GLU_NURBS_END_DATA_EXT=100175 |
;EXT_object_space_tess |
GLU_OBJECT_PARAMETRIC_ERROR_EXT=100208 |
GLU_OBJECT_PATH_LENGTH_EXT=100209 |
;EXT_point_parameters |
GL_POINT_SIZE_MIN_EXT=$8126 |
GL_POINT_SIZE_MAX_EXT=$8127 |
GL_POINT_FADE_THRESHOLD_SIZE_EXT=$8128 |
GL_DISTANCE_ATTENUATION_EXT=$8129 |
;EXT_compiled_vertex_array |
GL_ARRAY_ELEMENT_LOCK_FIRST_EXT=$81A8 |
GL_ARRAY_ELEMENT_LOCK_COUNT_EXT=$81A9 |
;ARB_multitexture |
GL_ACTIVE_TEXTURE_ARB=$84E0 |
GL_CLIENT_ACTIVE_TEXTURE_ARB=$84E1 |
GL_MAX_TEXTURE_UNITS_ARB=$84E2 |
GL_TEXTURE0_ARB=$84C0 |
GL_TEXTURE1_ARB=$84C1 |
GL_TEXTURE2_ARB=$84C2 |
GL_TEXTURE3_ARB=$84C3 |
GL_TEXTURE4_ARB=$84C4 |
GL_TEXTURE5_ARB=$84C5 |
GL_TEXTURE6_ARB=$84C6 |
GL_TEXTURE7_ARB=$84C7 |
GL_TEXTURE8_ARB=$84C8 |
GL_TEXTURE9_ARB=$84C9 |
GL_TEXTURE10_ARB=$84CA |
GL_TEXTURE11_ARB=$84CB |
GL_TEXTURE12_ARB=$84CC |
GL_TEXTURE13_ARB=$84CD |
GL_TEXTURE14_ARB=$84CE |
GL_TEXTURE15_ARB=$84CF |
GL_TEXTURE16_ARB=$84D0 |
GL_TEXTURE17_ARB=$84D1 |
GL_TEXTURE18_ARB=$84D2 |
GL_TEXTURE19_ARB=$84D3 |
GL_TEXTURE20_ARB=$84D4 |
GL_TEXTURE21_ARB=$84D5 |
GL_TEXTURE22_ARB=$84D6 |
GL_TEXTURE23_ARB=$84D7 |
GL_TEXTURE24_ARB=$84D8 |
GL_TEXTURE25_ARB=$84D9 |
GL_TEXTURE26_ARB=$84DA |
GL_TEXTURE27_ARB=$84DB |
GL_TEXTURE28_ARB=$84DC |
GL_TEXTURE29_ARB=$84DD |
GL_TEXTURE30_ARB=$84DE |
GL_TEXTURE31_ARB=$84DF |
;EXT_stencil_wrap |
GL_INCR_WRAP_EXT=$8507 |
GL_DECR_WRAP_EXT=$8508 |
;NV_texgen_reflection |
GL_NORMAL_MAP_NV=$8511 |
GL_REFLECTION_MAP_NV=$8512 |
;EXT_texture_env_combine |
GL_COMBINE_EXT=$8570 |
GL_COMBINE_RGB_EXT=$8571 |
GL_COMBINE_ALPHA_EXT=$8572 |
GL_RGB_SCALE_EXT=$8573 |
GL_ADD_SIGNED_EXT=$8574 |
GL_INTERPOLATE_EXT=$8575 |
GL_CONSTANT_EXT=$8576 |
GL_PRIMARY_COLOR_EXT=$8577 |
GL_PREVIOUS_EXT=$8578 |
GL_SOURCE0_RGB_EXT=$8580 |
GL_SOURCE1_RGB_EXT=$8581 |
GL_SOURCE2_RGB_EXT=$8582 |
GL_SOURCE0_ALPHA_EXT=$8588 |
GL_SOURCE1_ALPHA_EXT=$8589 |
GL_SOURCE2_ALPHA_EXT=$858A |
GL_OPERAND0_RGB_EXT=$8590 |
GL_OPERAND1_RGB_EXT=$8591 |
GL_OPERAND2_RGB_EXT=$8592 |
GL_OPERAND0_ALPHA_EXT=$8598 |
GL_OPERAND1_ALPHA_EXT=$8599 |
GL_OPERAND2_ALPHA_EXT=$859A |
;NV_texture_env_combine4 |
GL_COMBINE4_NV=$8503 |
GL_SOURCE3_RGB_NV=$8583 |
GL_SOURCE3_ALPHA_NV=$858B |
GL_OPERAND3_RGB_NV=$8593 |
GL_OPERAND3_ALPHA_NV=$859B |
GL_BLEND_ equ ATION=$8009 |
GL_TABLE_TOO_LARGE=$8031 |
GL_UNSIGNED_BYTE_3_3_2=$8032 |
GL_UNSIGNED_SHORT_4_4_4_4=$8033 |
GL_UNSIGNED_SHORT_5_5_5_1=$8034 |
GL_UNSIGNED_INT_8_8_8_8=$8035 |
GL_UNSIGNED_INT_10_10_10_2=$8036 |
GL_UNSIGNED_BYTE_2_3_3_REV=$8362 |
GL_UNSIGNED_SHORT_5_6_5=$8363 |
GL_UNSIGNED_SHORT_5_6_5_REV=$8364 |
GL_UNSIGNED_SHORT_4_4_4_4_REV=$8365 |
GL_UNSIGNED_SHORT_1_5_5_5_REV=$8366 |
GL_UNSIGNED_INT_8_8_8_8_REV=$8367 |
GL_UNSIGNED_INT_2_10_10_10_REV=$8368 |
;GL_ARB_transpose_matrix |
GL_TRANSPOSE_MODELVIEW_MATRIX_ARB=$84E3 |
GL_TRANSPOSE_PROJECTION_MATRIX_ARB=$84E4 |
GL_TRANSPOSE_TEXTURE_MATRIX_ARB=$84E5 |
GL_TRANSPOSE_COLOR_MATRIX_ARB=$84E6 |
;GL_ARB_multisample |
GL_MULTISAMPLE_ARB=$809D |
GL_SAMPLE_ALPHA_TO_COVERAGE_ARB=$809E |
GL_SAMPLE_ALPHA_TO_ONE_ARB=$809F |
GL_SAMPLE_COVERAGE_ARB=$80A0 |
GL_SAMPLE_BUFFERS_ARB=$80A8 |
GL_SAMPLES_ARB=$80A9 |
GL_SAMPLE_COVERAGE_VALUE_ARB=$80AA |
GL_SAMPLE_COVERAGE_INVERT_ARB=$80AB |
GL_MULTISAMPLE_BIT_ARB=$20000000 |
;GL_ARB_texture_cube_map |
GL_NORMAL_MAP_ARB=$8511 |
GL_REFLECTION_MAP_ARB=$8512 |
GL_TEXTURE_CUBE_MAP_ARB=$8513 |
GL_TEXTURE_BINDING_CUBE_MAP_ARB=$8514 |
GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB=$8515 |
GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB=$8516 |
GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB=$8517 |
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB=$8518 |
GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB=$8519 |
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB=$851A |
GL_PROXY_TEXTURE_CUBE_MAP_ARB=$851B |
GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB=$851C |
;GL_ARB_texture_compression |
GL_COMPRESSED_ALPHA_ARB=$84E9 |
GL_COMPRESSED_LUMINANCE_ARB=$84EA |
GL_COMPRESSED_LUMINANCE_ALPHA_ARB=$84EB |
GL_COMPRESSED_INTENSITY_ARB=$84EC |
GL_COMPRESSED_RGB_ARB=$84ED |
GL_COMPRESSED_RGBA_ARB=$84EE |
GL_TEXTURE_COMPRESSION_HINT_ARB=$84EF |
GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB=$86A0 |
GL_TEXTURE_COMPRESSED_ARB=$86A1 |
GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB=$86A2 |
GL_COMPRESSED_TEXTURE_FORMATS_ARB=$86A3 |
;GL_ARB_vertex_blend |
GL_MAX_VERTEX_UNITS_ARB=$86A4 |
GL_ACTIVE_VERTEX_UNITS_ARB=$86A5 |
GL_WEIGHT_SUM_UNITY_ARB=$86A6 |
GL_VERTEX_BLEND_ARB=$86A7 |
GL_CURRENT_WEIGHT_ARB=$86A8 |
GL_WEIGHT_ARRAY_TYPE_ARB=$86A9 |
GL_WEIGHT_ARRAY_STRIDE_ARB=$86AA |
GL_WEIGHT_ARRAY_SIZE_ARB=$86AB |
GL_WEIGHT_ARRAY_POINTER_ARB=$86AC |
GL_WEIGHT_ARRAY_ARB=$86AD |
GL_MODELVIEW0_ARB=$1700 |
GL_MODELVIEW1_ARB=$850A |
GL_MODELVIEW2_ARB=$8722 |
GL_MODELVIEW3_ARB=$8723 |
GL_MODELVIEW4_ARB=$8724 |
GL_MODELVIEW5_ARB=$8725 |
GL_MODELVIEW6_ARB=$8726 |
GL_MODELVIEW7_ARB=$8727 |
GL_MODELVIEW8_ARB=$8728 |
GL_MODELVIEW9_ARB=$8729 |
GL_MODELVIEW10_ARB=$872A |
GL_MODELVIEW11_ARB=$872B |
GL_MODELVIEW12_ARB=$872C |
GL_MODELVIEW13_ARB=$872D |
GL_MODELVIEW14_ARB=$872E |
GL_MODELVIEW15_ARB=$872F |
GL_MODELVIEW16_ARB=$8730 |
GL_MODELVIEW17_ARB=$8731 |
GL_MODELVIEW18_ARB=$8732 |
GL_MODELVIEW19_ARB=$8733 |
GL_MODELVIEW20_ARB=$8734 |
GL_MODELVIEW21_ARB=$8735 |
GL_MODELVIEW22_ARB=$8736 |
GL_MODELVIEW23_ARB=$8737 |
GL_MODELVIEW24_ARB=$8738 |
GL_MODELVIEW25_ARB=$8739 |
GL_MODELVIEW26_ARB=$873A |
GL_MODELVIEW27_ARB=$873B |
GL_MODELVIEW28_ARB=$873C |
GL_MODELVIEW29_ARB=$873D |
GL_MODELVIEW30_ARB=$873E |
GL_MODELVIEW31_ARB=$873F |
;GL_SGIS_texture_filter4 |
GL_FILTER4_SGIS=$8146 |
GL_TEXTURE_FILTER4_SIZE_SGIS=$8147 |
;GL_SGIS_pixel_texture |
GL_PIXEL_TEXTURE_SGIS=$8353 |
GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS=$8354 |
GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS=$8355 |
GL_PIXEL_GROUP_COLOR_SGIS=$8356 |
;GL_SGIX_pixel_texture |
GL_PIXEL_TEX_GEN_SGIX=$8139 |
GL_PIXEL_TEX_GEN_MODE_SGIX=$832B |
;GL_SGIS_texture4D |
GL_PACK_SKIP_VOLUMES_SGIS=$8130 |
GL_PACK_IMAGE_DEPTH_SGIS=$8131 |
GL_UNPACK_SKIP_VOLUMES_SGIS=$8132 |
GL_UNPACK_IMAGE_DEPTH_SGIS=$8133 |
GL_TEXTURE_4D_SGIS=$8134 |
GL_PROXY_TEXTURE_4D_SGIS=$8135 |
GL_TEXTURE_4DSIZE_SGIS=$8136 |
GL_TEXTURE_WRAP_Q_SGIS=$8137 |
GL_MAX_4D_TEXTURE_SIZE_SGIS=$8138 |
GL_TEXTURE_4D_BINDING_SGIS=$814F |
;GL_SGIS_detail_texture |
GL_DETAIL_TEXTURE_2D_SGIS=$8095 |
GL_DETAIL_TEXTURE_2D_BINDING_SGIS=$8096 |
GL_LINEAR_DETAIL_SGIS=$8097 |
GL_LINEAR_DETAIL_ALPHA_SGIS=$8098 |
GL_LINEAR_DETAIL_COLOR_SGIS=$8099 |
GL_DETAIL_TEXTURE_LEVEL_SGIS=$809A |
GL_DETAIL_TEXTURE_MODE_SGIS=$809B |
GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS=$809C |
;GL_SGIS_sharpen_texture |
GL_LINEAR_SHARPEN_SGIS=$80AD |
GL_LINEAR_SHARPEN_ALPHA_SGIS=$80AE |
GL_LINEAR_SHARPEN_COLOR_SGIS=$80AF |
GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS=$80B0 |
;GL_SGIS_texture_lod |
GL_TEXTURE_MIN_LOD_SGIS=$813A |
GL_TEXTURE_MAX_LOD_SGIS=$813B |
GL_TEXTURE_BASE_LEVEL_SGIS=$813C |
GL_TEXTURE_MAX_LEVEL_SGIS=$813D |
;GL_SGIS_multisample |
GL_MULTISAMPLE_SGIS=$809D |
GL_SAMPLE_ALPHA_TO_MASK_SGIS=$809E |
GL_SAMPLE_ALPHA_TO_ONE_SGIS=$809F |
GL_SAMPLE_MASK_SGIS=$80A0 |
GL_1PASS_SGIS=$80A1 |
GL_2PASS_0_SGIS=$80A2 |
GL_2PASS_1_SGIS=$80A3 |
GL_4PASS_0_SGIS=$80A4 |
GL_4PASS_1_SGIS=$80A5 |
GL_4PASS_2_SGIS=$80A6 |
GL_4PASS_3_SGIS=$80A7 |
GL_SAMPLE_BUFFERS_SGIS=$80A8 |
GL_SAMPLES_SGIS=$80A9 |
GL_SAMPLE_MASK_VALUE_SGIS=$80AA |
GL_SAMPLE_MASK_INVERT_SGIS=$80AB |
GL_SAMPLE_PATTERN_SGIS=$80AC |
;GL_SGIS_generate_mipmap |
GL_GENERATE_MIPMAP_SGIS=$8191 |
GL_GENERATE_MIPMAP_HINT_SGIS=$8192 |
;GL_SGIX_clipmap |
GL_LINEAR_CLIPMAP_LINEAR_SGIX=$8170 |
GL_TEXTURE_CLIPMAP_CENTER_SGIX=$8171 |
GL_TEXTURE_CLIPMAP_FRAME_SGIX=$8172 |
GL_TEXTURE_CLIPMAP_OFFSET_SGIX=$8173 |
GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX=$8174 |
GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX=$8175 |
GL_TEXTURE_CLIPMAP_DEPTH_SGIX=$8176 |
GL_MAX_CLIPMAP_DEPTH_SGIX=$8177 |
GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX=$8178 |
GL_NEAREST_CLIPMAP_NEAREST_SGIX=$844D |
GL_NEAREST_CLIPMAP_LINEAR_SGIX=$844E |
GL_LINEAR_CLIPMAP_NEAREST_SGIX=$844F |
;GL_SGIX_shadow |
GL_TEXTURE_COMPARE_SGIX=$819A |
GL_TEXTURE_COMPARE_OPERATOR_SGIX=$819B |
GL_TEXTURE_L equ AL_R_SGIX=$819C |
GL_TEXTURE_G equ AL_R_SGIX=$819D |
;GL_SGIS_texture_edge_clamp |
GL_CLAMP_TO_EDGE_SGIS=$812F |
;GL_SGIS_texture_border_clamp |
GL_CLAMP_TO_BORDER_SGIS=$812D |
;GL_SGIX_interlace |
GL_INTERLACE_SGIX=$8094 |
;GL_SGIX_pixel_tiles |
GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX=$813E |
GL_PIXEL_TILE_CACHE_INCREMENT_SGIX=$813F |
GL_PIXEL_TILE_WIDTH_SGIX=$8140 |
GL_PIXEL_TILE_HEIGHT_SGIX=$8141 |
GL_PIXEL_TILE_GRID_WIDTH_SGIX=$8142 |
GL_PIXEL_TILE_GRID_HEIGHT_SGIX=$8143 |
GL_PIXEL_TILE_GRID_DEPTH_SGIX=$8144 |
GL_PIXEL_TILE_CACHE_SIZE_SGIX=$8145 |
;GL_SGIS_texture_select |
GL_DUAL_ALPHA4_SGIS=$8110 |
GL_DUAL_ALPHA8_SGIS=$8111 |
GL_DUAL_ALPHA12_SGIS=$8112 |
GL_DUAL_ALPHA16_SGIS=$8113 |
GL_DUAL_LUMINANCE4_SGIS=$8114 |
GL_DUAL_LUMINANCE8_SGIS=$8115 |
GL_DUAL_LUMINANCE12_SGIS=$8116 |
GL_DUAL_LUMINANCE16_SGIS=$8117 |
GL_DUAL_INTENSITY4_SGIS=$8118 |
GL_DUAL_INTENSITY8_SGIS=$8119 |
GL_DUAL_INTENSITY12_SGIS=$811A |
GL_DUAL_INTENSITY16_SGIS=$811B |
GL_DUAL_LUMINANCE_ALPHA4_SGIS=$811C |
GL_DUAL_LUMINANCE_ALPHA8_SGIS=$811D |
GL_QUAD_ALPHA4_SGIS=$811E |
GL_QUAD_ALPHA8_SGIS=$811F |
GL_QUAD_LUMINANCE4_SGIS=$8120 |
GL_QUAD_LUMINANCE8_SGIS=$8121 |
GL_QUAD_INTENSITY4_SGIS=$8122 |
GL_QUAD_INTENSITY8_SGIS=$8123 |
GL_DUAL_TEXTURE_SELECT_SGIS=$8124 |
GL_QUAD_TEXTURE_SELECT_SGIS=$8125 |
;GL_SGIX_sprite |
GL_SPRITE_SGIX=$8148 |
GL_SPRITE_MODE_SGIX=$8149 |
GL_SPRITE_AXIS_SGIX=$814A |
GL_SPRITE_TRANSLATION_SGIX=$814B |
GL_SPRITE_AXIAL_SGIX=$814C |
GL_SPRITE_OBJECT_ALIGNED_SGIX=$814D |
GL_SPRITE_EYE_ALIGNED_SGIX=$814E |
;GL_SGIX_texture_multi_buffer |
GL_TEXTURE_MULTI_BUFFER_HINT_SGIX=$812E |
;GL_SGIS_point_parameters |
GL_POINT_SIZE_MIN_SGIS=$8126 |
GL_POINT_SIZE_MAX_SGIS=$8127 |
GL_POINT_FADE_THRESHOLD_SIZE_SGIS=$8128 |
GL_DISTANCE_ATTENUATION_SGIS=$8129 |
;GL_SGIX_instruments |
GL_INSTRUMENT_BUFFER_POINTER_SGIX=$8180 |
GL_INSTRUMENT_MEASUREMENTS_SGIX=$8181 |
;GL_SGIX_texture_scale_bias |
GL_POST_TEXTURE_FILTER_BIAS_SGIX=$8179 |
GL_POST_TEXTURE_FILTER_SCALE_SGIX=$817A |
GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX=$817B |
GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX=$817C |
;GL_SGIX_framezoom |
GL_FRAMEZOOM_SGIX=$818B |
GL_FRAMEZOOM_FACTOR_SGIX=$818C |
GL_MAX_FRAMEZOOM_FACTOR_SGIX=$818D |
;GL_FfdMaskSGIX |
GL_TEXTURE_DEFORMATION_BIT_SGIX=$00000001 |
GL_GEOMETRY_DEFORMATION_BIT_SGIX=$00000002 |
;GL_SGIX_polynomial_ffd |
GL_GEOMETRY_DEFORMATION_SGIX=$8194 |
GL_TEXTURE_DEFORMATION_SGIX=$8195 |
GL_DEFORMATIONS_MASK_SGIX=$8196 |
GL_MAX_DEFORMATION_ORDER_SGIX=$8197 |
;GL_SGIX_reference_plane |
GL_REFERENCE_PLANE_SGIX=$817D |
GL_REFERENCE_PLANE_ equ ATION_SGIX=$817E |
;GL_SGIX_depth_texture |
GL_DEPTH_COMPONENT16_SGIX=$81A5 |
GL_DEPTH_COMPONENT24_SGIX=$81A6 |
GL_DEPTH_COMPONENT32_SGIX=$81A7 |
;GL_SGIS_fog_function |
GL_FOG_FUNC_SGIS=$812A |
GL_FOG_FUNC_POINTS_SGIS=$812B |
GL_MAX_FOG_FUNC_POINTS_SGIS=$812C |
;GL_SGIX_fog_offset |
GL_FOG_OFFSET_SGIX=$8198 |
GL_FOG_OFFSET_VALUE_SGIX=$8199 |
;GL_HP_image_transform |
GL_IMAGE_SCALE_X_HP=$8155 |
GL_IMAGE_SCALE_Y_HP=$8156 |
GL_IMAGE_TRANSLATE_X_HP=$8157 |
GL_IMAGE_TRANSLATE_Y_HP=$8158 |
GL_IMAGE_ROTATE_ANGLE_HP=$8159 |
GL_IMAGE_ROTATE_ORIGIN_X_HP=$815A |
GL_IMAGE_ROTATE_ORIGIN_Y_HP=$815B |
GL_IMAGE_MAG_FILTER_HP=$815C |
GL_IMAGE_MIN_FILTER_HP=$815D |
GL_IMAGE_CUBIC_WEIGHT_HP=$815E |
GL_CUBIC_HP=$815F |
GL_AVERAGE_HP=$8160 |
GL_IMAGE_TRANSFORM_2D_HP=$8161 |
GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP=$8162 |
GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP=$8163 |
;GL_HP_convolution_border_modes |
GL_IGNORE_BORDER_HP=$8150 |
GL_CONSTANT_BORDER_HP=$8151 |
GL_REPLICATE_BORDER_HP=$8153 |
GL_CONVOLUTION_BORDER_COLOR_HP=$8154 |
;GL_SGIX_texture_add_env |
GL_TEXTURE_ENV_BIAS_SGIX=$80BE |
;GL_PGI_vertex_hints |
GL_VERTEX_DATA_HINT_PGI=$1A22A |
GL_VERTEX_CONSISTENT_HINT_PGI=$1A22B |
GL_MATERIAL_SIDE_HINT_PGI=$1A22C |
GL_MAX_VERTEX_HINT_PGI=$1A22D |
GL_COLOR3_BIT_PGI=$00010000 |
GL_COLOR4_BIT_PGI=$00020000 |
GL_EDGEFLAG_BIT_PGI=$00040000 |
GL_INDEX_BIT_PGI=$00080000 |
GL_MAT_AMBIENT_BIT_PGI=$00100000 |
GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI=$00200000 |
GL_MAT_DIFFUSE_BIT_PGI=$00400000 |
GL_MAT_EMISSION_BIT_PGI=$00800000 |
GL_MAT_COLOR_INDEXES_BIT_PGI=$01000000 |
GL_MAT_SHININESS_BIT_PGI=$02000000 |
GL_MAT_SPECULAR_BIT_PGI=$04000000 |
GL_NORMAL_BIT_PGI=$08000000 |
GL_TEXCOORD1_BIT_PGI=$10000000 |
GL_TEXCOORD2_BIT_PGI=$20000000 |
GL_TEXCOORD3_BIT_PGI=$40000000 |
GL_TEXCOORD4_BIT_PGI=$80000000 |
GL_VERTEX23_BIT_PGI=$00000004 |
GL_VERTEX4_BIT_PGI=$00000008 |
;GL_PGI_misc_hints |
GL_PREFER_DOUBLEBUFFER_HINT_PGI=$1A1F8 |
GL_CONSERVE_MEMORY_HINT_PGI=$1A1FD |
GL_RECLAIM_MEMORY_HINT_PGI=$1A1FE |
GL_NATIVE_GRAPHICS_HANDLE_PGI=$1A202 |
GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI=$1A203 |
GL_NATIVE_GRAPHICS_END_HINT_PGI=$1A204 |
GL_ALWAYS_FAST_HINT_PGI=$1A20C |
GL_ALWAYS_SOFT_HINT_PGI=$1A20D |
GL_ALLOW_DRAW_OBJ_HINT_PGI=$1A20E |
GL_ALLOW_DRAW_WIN_HINT_PGI=$1A20F |
GL_ALLOW_DRAW_FRG_HINT_PGI=$1A210 |
GL_ALLOW_DRAW_MEM_HINT_PGI=$1A211 |
GL_STRICT_DEPTHFUNC_HINT_PGI=$1A216 |
GL_STRICT_LIGHTING_HINT_PGI=$1A217 |
GL_STRICT_SCISSOR_HINT_PGI=$1A218 |
GL_FULL_STIPPLE_HINT_PGI=$1A219 |
GL_CLIP_NEAR_HINT_PGI=$1A220 |
GL_CLIP_FAR_HINT_PGI=$1A221 |
GL_WIDE_LINE_HINT_PGI=$1A222 |
GL_BACK_NORMALS_HINT_PGI=$1A223 |
;GL_EXT_paletted_texture |
GL_TEXTURE_INDEX_SIZE_EXT=$80ED |
;GL_SGIX_list_priority |
GL_LIST_PRIORITY_SGIX=$8182 |
;GL_SGIX_ir_instrument1 |
GL_IR_INSTRUMENT1_SGIX=$817F |
;GL_SGIX_calligraphic_fragment |
GL_CALLIGRAPHIC_FRAGMENT_SGIX=$8183 |
;GL_SGIX_texture_lod_bias |
GL_TEXTURE_LOD_BIAS_S_SGIX=$818E |
GL_TEXTURE_LOD_BIAS_T_SGIX=$818F |
GL_TEXTURE_LOD_BIAS_R_SGIX=$8190 |
;GL_SGIX_shadow_ambient |
GL_SHADOW_AMBIENT_SGIX=$80BF |
;GL_SGIX_ycrcb |
GL_YCRCB_422_SGIX=$81BB |
GL_YCRCB_444_SGIX=$81BC |
;GL_SGIX_fragment_lighting |
GL_FRAGMENT_LIGHTING_SGIX=$8400 |
GL_FRAGMENT_COLOR_MATERIAL_SGIX=$8401 |
GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX=$8402 |
GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX=$8403 |
GL_MAX_FRAGMENT_LIGHTS_SGIX=$8404 |
GL_MAX_ACTIVE_LIGHTS_SGIX=$8405 |
GL_CURRENT_RASTER_NORMAL_SGIX=$8406 |
GL_LIGHT_ENV_MODE_SGIX=$8407 |
GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX=$8408 |
GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX=$8409 |
GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX=$840A |
GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX=$840B |
GL_FRAGMENT_LIGHT0_SGIX=$840C |
GL_FRAGMENT_LIGHT1_SGIX=$840D |
GL_FRAGMENT_LIGHT2_SGIX=$840E |
GL_FRAGMENT_LIGHT3_SGIX=$840F |
GL_FRAGMENT_LIGHT4_SGIX=$8410 |
GL_FRAGMENT_LIGHT5_SGIX=$8411 |
GL_FRAGMENT_LIGHT6_SGIX=$8412 |
GL_FRAGMENT_LIGHT7_SGIX=$8413 |
;GL_IBM_rasterpos_clip |
GL_RASTER_POSITION_UNCLIPPED_IBM=$19262 |
;GL_HP_texture_lighting |
GL_TEXTURE_LIGHTING_MODE_HP=$8167 |
GL_TEXTURE_POST_SPECULAR_HP=$8168 |
GL_TEXTURE_PRE_SPECULAR_HP=$8169 |
;GL_EXT_draw_range_elements |
GL_MAX_ELEMENTS_VERTICES_EXT=$80E8 |
GL_MAX_ELEMENTS_INDICES_EXT=$80E9 |
;GL_WIN_phong_shading |
GL_PHONG_WIN=$80EA |
GL_PHONG_HINT_WIN=$80EB |
;GL_WIN_specular_fog |
GL_FOG_SPECULAR_TEXTURE_WIN=$80EC |
;GL_EXT_light_texture |
GL_FRAGMENT_MATERIAL_EXT=$8349 |
GL_FRAGMENT_NORMAL_EXT=$834A |
GL_FRAGMENT_COLOR_EXT=$834C |
GL_ATTENUATION_EXT=$834D |
GL_SHADOW_ATTENUATION_EXT=$834E |
GL_TEXTURE_APPLICATION_MODE_EXT=$834F |
GL_TEXTURE_LIGHT_EXT=$8350 |
GL_TEXTURE_MATERIAL_FACE_EXT=$8351 |
GL_TEXTURE_MATERIAL_PARAMETER_EXT=$8352 |
;GL_SGIX_blend_alpha_minmax |
GL_ALPHA_MIN_SGIX=$8320 |
GL_ALPHA_MAX_SGIX=$8321 |
;GL_SGIX_async |
GL_ASYNC_MARKER_SGIX=$8329 |
;GL_SGIX_async_pixel |
GL_ASYNC_TEX_IMAGE_SGIX=$835C |
GL_ASYNC_DRAW_PIXELS_SGIX=$835D |
GL_ASYNC_READ_PIXELS_SGIX=$835E |
GL_MAX_ASYNC_TEX_IMAGE_SGIX=$835F |
GL_MAX_ASYNC_DRAW_PIXELS_SGIX=$8360 |
GL_MAX_ASYNC_READ_PIXELS_SGIX=$8361 |
;GL_SGIX_async_histogram |
GL_ASYNC_HISTOGRAM_SGIX=$832C |
GL_MAX_ASYNC_HISTOGRAM_SGIX=$832D |
;GL_INTEL_parallel_arrays |
GL_PARALLEL_ARRAYS_INTEL=$83F4 |
GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL=$83F5 |
GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL=$83F6 |
GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL=$83F7 |
GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL=$83F8 |
;GL_HP_occlusion_test |
GL_OCCLUSION_TEST_HP=$8165 |
GL_OCCLUSION_TEST_RESULT_HP=$8166 |
;GL_EXT_pixel_transform |
GL_PIXEL_TRANSFORM_2D_EXT=$8330 |
GL_PIXEL_MAG_FILTER_EXT=$8331 |
GL_PIXEL_MIN_FILTER_EXT=$8332 |
GL_PIXEL_CUBIC_WEIGHT_EXT=$8333 |
GL_CUBIC_EXT=$8334 |
GL_AVERAGE_EXT=$8335 |
GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT=$8336 |
GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT=$8337 |
GL_PIXEL_TRANSFORM_2D_MATRIX_EXT=$8338 |
;GL_EXT_separate_specular_color |
GL_LIGHT_MODEL_COLOR_CONTROL_EXT=$81F8 |
GL_SINGLE_COLOR_EXT=$81F9 |
GL_SEPARATE_SPECULAR_COLOR_EXT=$81FA |
;GL_EXT_secondary_color |
GL_COLOR_SUM_EXT=$8458 |
GL_CURRENT_SECONDARY_COLOR_EXT=$8459 |
GL_SECONDARY_COLOR_ARRAY_SIZE_EXT=$845A |
GL_SECONDARY_COLOR_ARRAY_TYPE_EXT=$845B |
GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT=$845C |
GL_SECONDARY_COLOR_ARRAY_POINTER_EXT=$845D |
GL_SECONDARY_COLOR_ARRAY_EXT=$845E |
;GL_EXT_texture_perturb_normal |
GL_PERTURB_EXT=$85AE |
GL_TEXTURE_NORMAL_EXT=$85AF |
;GL_EXT_fog_coord |
GL_FOG_COORDINATE_SOURCE_EXT=$8450 |
GL_FOG_COORDINATE_EXT=$8451 |
GL_FRAGMENT_DEPTH_EXT=$8452 |
GL_CURRENT_FOG_COORDINATE_EXT=$8453 |
GL_FOG_COORDINATE_ARRAY_TYPE_EXT=$8454 |
GL_FOG_COORDINATE_ARRAY_STRIDE_EXT=$8455 |
GL_FOG_COORDINATE_ARRAY_POINTER_EXT=$8456 |
GL_FOG_COORDINATE_ARRAY_EXT=$8457 |
;GL_REND_screen_coordinates |
GL_SCREEN_COORDINATES_REND=$8490 |
GL_INVERTED_SCREEN_W_REND=$8491 |
;GL_EXT_coordinate_frame |
GL_TANGENT_ARRAY_EXT=$8439 |
GL_BINORMAL_ARRAY_EXT=$843A |
GL_CURRENT_TANGENT_EXT=$843B |
GL_CURRENT_BINORMAL_EXT=$843C |
GL_TANGENT_ARRAY_TYPE_EXT=$843E |
GL_TANGENT_ARRAY_STRIDE_EXT=$843F |
GL_BINORMAL_ARRAY_TYPE_EXT=$8440 |
GL_BINORMAL_ARRAY_STRIDE_EXT=$8441 |
GL_TANGENT_ARRAY_POINTER_EXT=$8442 |
GL_BINORMAL_ARRAY_POINTER_EXT=$8443 |
GL_MAP1_TANGENT_EXT=$8444 |
GL_MAP2_TANGENT_EXT=$8445 |
GL_MAP1_BINORMAL_EXT=$8446 |
GL_MAP2_BINORMAL_EXT=$8447 |
;GL_EXT_texture_env_combine |
GL_SOURCE3_RGB_EXT=$8583 |
GL_SOURCE4_RGB_EXT=$8584 |
GL_SOURCE5_RGB_EXT=$8585 |
GL_SOURCE6_RGB_EXT=$8586 |
GL_SOURCE7_RGB_EXT=$8587 |
GL_SOURCE3_ALPHA_EXT=$858B |
GL_SOURCE4_ALPHA_EXT=$858C |
GL_SOURCE5_ALPHA_EXT=$858D |
GL_SOURCE6_ALPHA_EXT=$858E |
GL_SOURCE7_ALPHA_EXT=$858F |
GL_OPERAND3_RGB_EXT=$8593 |
GL_OPERAND4_RGB_EXT=$8594 |
GL_OPERAND5_RGB_EXT=$8595 |
GL_OPERAND6_RGB_EXT=$8596 |
GL_OPERAND7_RGB_EXT=$8597 |
GL_OPERAND3_ALPHA_EXT=$859B |
GL_OPERAND4_ALPHA_EXT=$859C |
GL_OPERAND5_ALPHA_EXT=$859D |
GL_OPERAND6_ALPHA_EXT=$859E |
GL_OPERAND7_ALPHA_EXT=$859F |
;GL_APPLE_specular_vector |
GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE=$85B0 |
;GL_APPLE_transform_hint |
GL_TRANSFORM_HINT_APPLE=$85B1 |
;GL_SGIX_fog_scale |
GL_FOG_SCALE_SGIX=$81FC |
GL_FOG_SCALE_VALUE_SGIX=$81FD |
;GL_SUNX_constant_data |
GL_UNPACK_CONSTANT_DATA_SUNX=$81D5 |
GL_TEXTURE_CONSTANT_DATA_SUNX=$81D6 |
;GL_SUN_global_alpha |
GL_GLOBAL_ALPHA_SUN=$81D9 |
GL_GLOBAL_ALPHA_FACTOR_SUN=$81DA |
;GL_SUN_triangle_list |
GL_RESTART_SUN=$01 |
GL_REPLACE_MIDDLE_SUN=$02 |
GL_REPLACE_OLDEST_SUN=$03 |
GL_TRIANGLE_LIST_SUN=$81D7 |
GL_REPLACEMENT_CODE_SUN=$81D8 |
GL_REPLACEMENT_CODE_ARRAY_SUN=$85C0 |
GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN=$85C1 |
GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN=$85C2 |
GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN=$85C3 |
GL_R1UI_V3F_SUN=$85C4 |
GL_R1UI_C4UB_V3F_SUN=$85C5 |
GL_R1UI_C3F_V3F_SUN=$85C6 |
GL_R1UI_N3F_V3F_SUN=$85C7 |
GL_R1UI_C4F_N3F_V3F_SUN=$85C8 |
GL_R1UI_T2F_V3F_SUN=$85C9 |
GL_R1UI_T2F_N3F_V3F_SUN=$85CA |
GL_R1UI_T2F_C4F_N3F_V3F_SUN=$85CB |
;GL_EXT_blend_func_separate |
GL_BLEND_DST_RGB_EXT=$80C8 |
GL_BLEND_SRC_RGB_EXT=$80C9 |
GL_BLEND_DST_ALPHA_EXT=$80CA |
GL_BLEND_SRC_ALPHA_EXT=$80CB |
;GL_INGR_color_clamp |
GL_RED_MIN_CLAMP_INGR=$8560 |
GL_GREEN_MIN_CLAMP_INGR=$8561 |
GL_BLUE_MIN_CLAMP_INGR=$8562 |
GL_ALPHA_MIN_CLAMP_INGR=$8563 |
GL_RED_MAX_CLAMP_INGR=$8564 |
GL_GREEN_MAX_CLAMP_INGR=$8565 |
GL_BLUE_MAX_CLAMP_INGR=$8566 |
GL_ALPHA_MAX_CLAMP_INGR=$8567 |
;GL_INGR_interlace_read |
GL_INTERLACE_READ_INGR=$8568 |
;GL_EXT_422_pixels |
GL_422_EXT=$80CC |
GL_422_REV_EXT=$80CD |
GL_422_AVERAGE_EXT=$80CE |
GL_422_REV_AVERAGE_EXT=$80CF |
;GL_EXT_texture_cube_map |
GL_NORMAL_MAP_EXT=$8511 |
GL_REFLECTION_MAP_EXT=$8512 |
GL_TEXTURE_CUBE_MAP_EXT=$8513 |
GL_TEXTURE_BINDING_CUBE_MAP_EXT=$8514 |
GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT=$8515 |
GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT=$8516 |
GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT=$8517 |
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT=$8518 |
GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT=$8519 |
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT=$851A |
GL_PROXY_TEXTURE_CUBE_MAP_EXT=$851B |
GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT=$851C |
;GL_SUN_convolution_border_modes |
GL_WRAP_BORDER_SUN=$81D4 |
;GL_EXT_texture_lod_bias |
GL_MAX_TEXTURE_LOD_BIAS_EXT=$84FD |
GL_TEXTURE_FILTER_CONTROL_EXT=$8500 |
GL_TEXTURE_LOD_BIAS_EXT=$8501 |
;GL_EXT_texture_filter_anisotropic |
GL_TEXTURE_MAX_ANISOTROPY_EXT=$84FE |
GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT=$84FF |
;GL_EXT_vertex_weighting |
GL_MODELVIEW0_STACK_DEPTH_EXT=GL_MODELVIEW_STACK_DEPTH |
GL_MODELVIEW1_STACK_DEPTH_EXT=$8502 |
GL_MODELVIEW0_MATRIX_EXT=GL_MODELVIEW_MATRIX |
GL_MODELVIEW_MATRIX1_EXT=$8506 |
GL_VERTEX_WEIGHTING_EXT=$8509 |
GL_MODELVIEW0_EXT=GL_MODELVIEW |
GL_MODELVIEW1_EXT=$850A |
GL_CURRENT_VERTEX_WEIGHT_EXT=$850B |
GL_VERTEX_WEIGHT_ARRAY_EXT=$850C |
GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT=$850D |
GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT=$850E |
GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT=$850F |
GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT=$8510 |
;GL_NV_light_max_exponent |
GL_MAX_SHININESS_NV=$8504 |
GL_MAX_SPOT_EXPONENT_NV=$8505 |
;GL_NV_vertex_array_range |
GL_VERTEX_ARRAY_RANGE_NV=$851D |
GL_VERTEX_ARRAY_RANGE_LENGTH_NV=$851E |
GL_VERTEX_ARRAY_RANGE_VALID_NV=$851F |
GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV=$8520 |
GL_VERTEX_ARRAY_RANGE_POINTER_NV=$8521 |
;GL_NV_register_combiners |
GL_REGISTER_COMBINERS_NV=$8522 |
GL_VARIABLE_A_NV=$8523 |
GL_VARIABLE_B_NV=$8524 |
GL_VARIABLE_C_NV=$8525 |
GL_VARIABLE_D_NV=$8526 |
GL_VARIABLE_E_NV=$8527 |
GL_VARIABLE_F_NV=$8528 |
GL_VARIABLE_G_NV=$8529 |
GL_CONSTANT_COLOR0_NV=$852A |
GL_CONSTANT_COLOR1_NV=$852B |
GL_PRIMARY_COLOR_NV=$852C |
GL_SECONDARY_COLOR_NV=$852D |
GL_SPARE0_NV=$852E |
GL_SPARE1_NV=$852F |
GL_DISCARD_NV=$8530 |
GL_E_TIMES_F_NV=$8531 |
GL_SPARE0_PLUS_SECONDARY_COLOR_NV=$8532 |
GL_UNSIGNED_IDENTITY_NV=$8536 |
GL_UNSIGNED_INVERT_NV=$8537 |
GL_EXPAND_NORMAL_NV=$8538 |
GL_EXPAND_NEGATE_NV=$8539 |
GL_HALF_BIAS_NORMAL_NV=$853A |
GL_HALF_BIAS_NEGATE_NV=$853B |
GL_SIGNED_IDENTITY_NV=$853C |
GL_SIGNED_NEGATE_NV=$853D |
GL_SCALE_BY_TWO_NV=$853E |
GL_SCALE_BY_FOUR_NV=$853F |
GL_SCALE_BY_ONE_HALF_NV=$8540 |
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV=$8541 |
GL_COMBINER_INPUT_NV=$8542 |
GL_COMBINER_MAPPING_NV=$8543 |
GL_COMBINER_COMPONENT_USAGE_NV=$8544 |
GL_COMBINER_AB_DOT_PRODUCT_NV=$8545 |
GL_COMBINER_CD_DOT_PRODUCT_NV=$8546 |
GL_COMBINER_MUX_SUM_NV=$8547 |
GL_COMBINER_SCALE_NV=$8548 |
GL_COMBINER_BIAS_NV=$8549 |
GL_COMBINER_AB_OUTPUT_NV=$854A |
GL_COMBINER_CD_OUTPUT_NV=$854B |
GL_COMBINER_SUM_OUTPUT_NV=$854C |
GL_MAX_GENERAL_COMBINERS_NV=$854D |
GL_NUM_GENERAL_COMBINERS_NV=$854E |
GL_COLOR_SUM_CLAMP_NV=$854F |
GL_COMBINER0_NV=$8550 |
GL_COMBINER1_NV=$8551 |
GL_COMBINER2_NV=$8552 |
GL_COMBINER3_NV=$8553 |
GL_COMBINER4_NV=$8554 |
GL_COMBINER5_NV=$8555 |
GL_COMBINER6_NV=$8556 |
GL_COMBINER7_NV=$8557 |
;GL_NV_fog_distance |
GL_FOG_DISTANCE_MODE_NV=$855A |
GL_EYE_RADIAL_NV=$855B |
GL_EYE_PLANE_ABSOLUTE_NV=$855C |
;GL_NV_texgen_emboss |
GL_EMBOSS_LIGHT_NV=$855D |
GL_EMBOSS_CONSTANT_NV=$855E |
GL_EMBOSS_MAP_NV=$855F |
;GL_EXT_texture_compression_s3tc |
GL_COMPRESSED_RGB_S3TC_DXT1_EXT=$83F0 |
GL_COMPRESSED_RGBA_S3TC_DXT1_EXT=$83F1 |
GL_COMPRESSED_RGBA_S3TC_DXT3_EXT=$83F2 |
GL_COMPRESSED_RGBA_S3TC_DXT5_EXT=$83F3 |
;GL_IBM_cull_vertex |
GL_CULL_VERTEX_IBM=103050 |
;GL_IBM_vertex_array_lists |
GL_VERTEX_ARRAY_LIST_IBM=103070 |
GL_NORMAL_ARRAY_LIST_IBM=103071 |
GL_COLOR_ARRAY_LIST_IBM=103072 |
GL_INDEX_ARRAY_LIST_IBM=103073 |
GL_TEXTURE_COORD_ARRAY_LIST_IBM=103074 |
GL_EDGE_FLAG_ARRAY_LIST_IBM=103075 |
GL_FOG_COORDINATE_ARRAY_LIST_IBM=103076 |
GL_SECONDARY_COLOR_ARRAY_LIST_IBM=103077 |
GL_VERTEX_ARRAY_LIST_STRIDE_IBM=103080 |
GL_NORMAL_ARRAY_LIST_STRIDE_IBM=103081 |
GL_COLOR_ARRAY_LIST_STRIDE_IBM=103082 |
GL_INDEX_ARRAY_LIST_STRIDE_IBM=103083 |
GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM=103084 |
GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM=103085 |
GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM=103086 |
GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM=103087 |
;GL_SGIX_subsample |
GL_PACK_SUBSAMPLE_RATE_SGIX=$85A0 |
GL_UNPACK_SUBSAMPLE_RATE_SGIX=$85A1 |
GL_PIXEL_SUBSAMPLE_4444_SGIX=$85A2 |
GL_PIXEL_SUBSAMPLE_2424_SGIX=$85A3 |
GL_PIXEL_SUBSAMPLE_4242_SGIX=$85A4 |
;GL_SGIX_ycrcba |
GL_YCRCB_SGIX=$8318 |
GL_YCRCBA_SGIX=$8319 |
;GL_SGI_depth_pass_instrument |
GL_DEPTH_PASS_INSTRUMENT_SGIX=$8310 |
GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX=$8311 |
GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX=$8312 |
;GL_3DFX_texture_compression_FXT1 |
GL_COMPRESSED_RGB_FXT1_3DFX=$86B0 |
GL_COMPRESSED_RGBA_FXT1_3DFX=$86B1 |
;GL_3DFX_multisample |
GL_MULTISAMPLE_3DFX=$86B2 |
GL_SAMPLE_BUFFERS_3DFX=$86B3 |
GL_SAMPLES_3DFX=$86B4 |
GL_MULTISAMPLE_BIT_3DFX=$20000000 |
;GL_EXT_multisample |
GL_MULTISAMPLE_EXT=$809D |
GL_SAMPLE_ALPHA_TO_MASK_EXT=$809E |
GL_SAMPLE_ALPHA_TO_ONE_EXT=$809F |
GL_SAMPLE_MASK_EXT=$80A0 |
GL_1PASS_EXT=$80A1 |
GL_2PASS_0_EXT=$80A2 |
GL_2PASS_1_EXT=$80A3 |
GL_4PASS_0_EXT=$80A4 |
GL_4PASS_1_EXT=$80A5 |
GL_4PASS_2_EXT=$80A6 |
GL_4PASS_3_EXT=$80A7 |
GL_SAMPLE_BUFFERS_EXT=$80A8 |
GL_SAMPLES_EXT=$80A9 |
GL_SAMPLE_MASK_VALUE_EXT=$80AA |
GL_SAMPLE_MASK_INVERT_EXT=$80AB |
GL_SAMPLE_PATTERN_EXT=$80AC |
;GL_SGIX_vertex_preclip |
GL_VERTEX_PRECLIP_SGIX=$83EE |
GL_VERTEX_PRECLIP_HINT_SGIX=$83EF |
;GL_SGIX_convolution_accuracy |
GL_CONVOLUTION_HINT_SGIX=$8316 |
;GL_SGIX_resample |
GL_PACK_RESAMPLE_SGIX=$842C |
GL_UNPACK_RESAMPLE_SGIX=$842D |
GL_RESAMPLE_REPLICATE_SGIX=$842E |
GL_RESAMPLE_ZERO_FILL_SGIX=$842F |
GL_RESAMPLE_DECIMATE_SGIX=$8430 |
;GL_SGIS_point_line_texgen |
GL_EYE_DISTANCE_TO_POINT_SGIS=$81F0 |
GL_OBJECT_DISTANCE_TO_POINT_SGIS=$81F1 |
GL_EYE_DISTANCE_TO_LINE_SGIS=$81F2 |
GL_OBJECT_DISTANCE_TO_LINE_SGIS=$81F3 |
GL_EYE_POINT_SGIS=$81F4 |
GL_OBJECT_POINT_SGIS=$81F5 |
GL_EYE_LINE_SGIS=$81F6 |
GL_OBJECT_LINE_SGIS=$81F7 |
;GL_SGIS_texture_color_mask |
GL_TEXTURE_COLOR_WRITEMASK_SGIS=$81EF |
;GL_NV_vertex_program |
GL_VERTEX_PROGRAM_NV=$8620 |
GL_VERTEX_STATE_PROGRAM_NV=$8621 |
GL_ATTRIB_ARRAY_SIZE_NV=$8623 |
GL_ATTRIB_ARRAY_STRIDE_NV=$8624 |
GL_ATTRIB_ARRAY_TYPE_NV=$8625 |
GL_CURRENT_ATTRIB_NV=$8626 |
GL_PROGRAM_LENGTH_NV=$8627 |
GL_PROGRAM_STRING_NV=$8628 |
GL_MODELVIEW_PROJECTION_NV=$8629 |
GL_IDENTITY_NV=$862A |
GL_INVERSE_NV=$862B |
GL_TRANSPOSE_NV=$862C |
GL_INVERSE_TRANSPOSE_NV=$862D |
GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV=$862E |
GL_MAX_TRACK_MATRICES_NV=$862F |
GL_MATRIX0_NV=$8630 |
GL_MATRIX1_NV=$8631 |
GL_MATRIX2_NV=$8632 |
GL_MATRIX3_NV=$8633 |
GL_MATRIX4_NV=$8634 |
GL_MATRIX5_NV=$8635 |
GL_MATRIX6_NV=$8636 |
GL_MATRIX7_NV=$8637 |
GL_CURRENT_MATRIX_STACK_DEPTH_NV=$8640 |
GL_CURRENT_MATRIX_NV=$8641 |
GL_VERTEX_PROGRAM_POINT_SIZE_NV=$8642 |
GL_VERTEX_PROGRAM_TWO_SIDE_NV=$8643 |
GL_PROGRAM_PARAMETER_NV=$8644 |
GL_ATTRIB_ARRAY_POINTER_NV=$8645 |
GL_PROGRAM_TARGET_NV=$8646 |
GL_PROGRAM_RESIDENT_NV=$8647 |
GL_TRACK_MATRIX_NV=$8648 |
GL_TRACK_MATRIX_TRANSFORM_NV=$8649 |
GL_VERTEX_PROGRAM_BINDING_NV=$864A |
GL_PROGRAM_ERROR_POSITION_NV=$864B |
GL_VERTEX_ATTRIB_ARRAY0_NV=$8650 |
GL_VERTEX_ATTRIB_ARRAY1_NV=$8651 |
GL_VERTEX_ATTRIB_ARRAY2_NV=$8652 |
GL_VERTEX_ATTRIB_ARRAY3_NV=$8653 |
GL_VERTEX_ATTRIB_ARRAY4_NV=$8654 |
GL_VERTEX_ATTRIB_ARRAY5_NV=$8655 |
GL_VERTEX_ATTRIB_ARRAY6_NV=$8656 |
GL_VERTEX_ATTRIB_ARRAY7_NV=$8657 |
GL_VERTEX_ATTRIB_ARRAY8_NV=$8658 |
GL_VERTEX_ATTRIB_ARRAY9_NV=$8659 |
GL_VERTEX_ATTRIB_ARRAY10_NV=$865A |
GL_VERTEX_ATTRIB_ARRAY11_NV=$865B |
GL_VERTEX_ATTRIB_ARRAY12_NV=$865C |
GL_VERTEX_ATTRIB_ARRAY13_NV=$865D |
GL_VERTEX_ATTRIB_ARRAY14_NV=$865E |
GL_VERTEX_ATTRIB_ARRAY15_NV=$865F |
GL_MAP1_VERTEX_ATTRIB0_4_NV=$8660 |
GL_MAP1_VERTEX_ATTRIB1_4_NV=$8661 |
GL_MAP1_VERTEX_ATTRIB2_4_NV=$8662 |
GL_MAP1_VERTEX_ATTRIB3_4_NV=$8663 |
GL_MAP1_VERTEX_ATTRIB4_4_NV=$8664 |
GL_MAP1_VERTEX_ATTRIB5_4_NV=$8665 |
GL_MAP1_VERTEX_ATTRIB6_4_NV=$8666 |
GL_MAP1_VERTEX_ATTRIB7_4_NV=$8667 |
GL_MAP1_VERTEX_ATTRIB8_4_NV=$8668 |
GL_MAP1_VERTEX_ATTRIB9_4_NV=$8669 |
GL_MAP1_VERTEX_ATTRIB10_4_NV=$866A |
GL_MAP1_VERTEX_ATTRIB11_4_NV=$866B |
GL_MAP1_VERTEX_ATTRIB12_4_NV=$866C |
GL_MAP1_VERTEX_ATTRIB13_4_NV=$866D |
GL_MAP1_VERTEX_ATTRIB14_4_NV=$866E |
GL_MAP1_VERTEX_ATTRIB15_4_NV=$866F |
GL_MAP2_VERTEX_ATTRIB0_4_NV=$8670 |
GL_MAP2_VERTEX_ATTRIB1_4_NV=$8671 |
GL_MAP2_VERTEX_ATTRIB2_4_NV=$8672 |
GL_MAP2_VERTEX_ATTRIB3_4_NV=$8673 |
GL_MAP2_VERTEX_ATTRIB4_4_NV=$8674 |
GL_MAP2_VERTEX_ATTRIB5_4_NV=$8675 |
GL_MAP2_VERTEX_ATTRIB6_4_NV=$8676 |
GL_MAP2_VERTEX_ATTRIB7_4_NV=$8677 |
GL_MAP2_VERTEX_ATTRIB8_4_NV=$8678 |
GL_MAP2_VERTEX_ATTRIB9_4_NV=$8679 |
GL_MAP2_VERTEX_ATTRIB10_4_NV=$867A |
GL_MAP2_VERTEX_ATTRIB11_4_NV=$867B |
GL_MAP2_VERTEX_ATTRIB12_4_NV=$867C |
GL_MAP2_VERTEX_ATTRIB13_4_NV=$867D |
GL_MAP2_VERTEX_ATTRIB14_4_NV=$867E |
GL_MAP2_VERTEX_ATTRIB15_4_NV=$867F |
;GLUerrors |
GLU_INVALID_ENUM=100900 |
GLU_INVALID_VALUE=100901 |
GLU_OUT_OF_MEMORY=100902 |
GLU_INCOMPATIBLE_GL_VERSION=100903 |
;GLUbooleanvalues |
GLU_TRUE=GL_TRUE |
GLU_FALSE=GL_FALSE |
;Quadricconstants |
GLU_SMOOTH=100000 |
GLU_FLAT=100001 |
GLU_NONE=100002 |
GLU_POINT=100010 |
GLU_LINE=100011 |
GLU_FILL=100012 |
GLU_SILHOUETTE=100013 |
GLU_OUTSIDE=100020 |
GLU_INSIDE=100021 |
;Tesselationconstants |
GLU_TESS_MAX_COORD=1.0e150 |
GLU_TESS_WINDING_RULE=100140 |
GLU_TESS_BOUNDARY_ONLY=100141 |
GLU_TESS_TOLERANCE=100142 |
GLU_TESS_WINDING_ODD=100130 |
GLU_TESS_WINDING_NONZERO=100131 |
GLU_TESS_WINDING_POSITIVE=100132 |
GLU_TESS_WINDING_NEGATIVE=100133 |
GLU_TESS_WINDING_ABS_GEQ_TWO=100134 |
GLU_TESS_BEGIN=100100 |
GLU_TESS_VERTEX=100101 |
GLU_TESS_END=100102 |
GLU_TESS_ERROR=100103 |
GLU_TESS_EDGE_FLAG=100104 |
GLU_TESS_COMBINE=100105 |
GLU_TESS_BEGIN_DATA=100106 |
GLU_TESS_VERTEX_DATA=100107 |
GLU_TESS_END_DATA=100108 |
GLU_TESS_ERROR_DATA=100109 |
GLU_TESS_EDGE_FLAG_DATA=100110 |
GLU_TESS_COMBINE_DATA=100111 |
GLU_TESS_ERROR1=100151 |
GLU_TESS_ERROR2=100152 |
GLU_TESS_ERROR3=100153 |
GLU_TESS_ERROR4=100154 |
GLU_TESS_ERROR5=100155 |
GLU_TESS_ERROR6=100156 |
GLU_TESS_ERROR7=100157 |
GLU_TESS_ERROR8=100158 |
GLU_TESS_MISSING_BEGIN_POLYGON=GLU_TESS_ERROR1 |
GLU_TESS_MISSING_BEGIN_CONTOUR=GLU_TESS_ERROR2 |
GLU_TESS_MISSING_END_POLYGON=GLU_TESS_ERROR3 |
GLU_TESS_MISSING_END_CONTOUR=GLU_TESS_ERROR4 |
GLU_TESS_COORD_TOO_LARGE=GLU_TESS_ERROR5 |
GLU_TESS_NEED_COMBINE_CALLBACK=GLU_TESS_ERROR6 |
;NURBSconstants |
GLU_AUTO_LOAD_MATRIX=100200 |
GLU_CULLING=100201 |
GLU_SAMPLING_TOLERANCE=100203 |
GLU_DISPLAY_MODE=100204 |
GLU_PARAMETRIC_TOLERANCE=100202 |
GLU_SAMPLING_METHOD=100205 |
GLU_U_STEP=100206 |
GLU_V_STEP=100207 |
GLU_PATH_LENGTH=100215 |
GLU_PARAMETRIC_ERROR=100216 |
GLU_DOMAIN_DISTANCE=100217 |
GLU_MAP1_TRIM_2=100210 |
GLU_MAP1_TRIM_3=100211 |
GLU_OUTLINE_POLYGON=100240 |
GLU_OUTLINE_PATCH=100241 |
GLU_NURBS_ERROR1=100251 |
GLU_NURBS_ERROR2=100252 |
GLU_NURBS_ERROR3=100253 |
GLU_NURBS_ERROR4=100254 |
GLU_NURBS_ERROR5=100255 |
GLU_NURBS_ERROR6=100256 |
GLU_NURBS_ERROR7=100257 |
GLU_NURBS_ERROR8=100258 |
GLU_NURBS_ERROR9=100259 |
GLU_NURBS_ERROR10=100260 |
GLU_NURBS_ERROR11=100261 |
GLU_NURBS_ERROR12=100262 |
GLU_NURBS_ERROR13=100263 |
GLU_NURBS_ERROR14=100264 |
GLU_NURBS_ERROR15=100265 |
GLU_NURBS_ERROR16=100266 |
GLU_NURBS_ERROR17=100267 |
GLU_NURBS_ERROR18=100268 |
GLU_NURBS_ERROR19=100269 |
GLU_NURBS_ERROR20=100270 |
GLU_NURBS_ERROR21=100271 |
GLU_NURBS_ERROR22=100272 |
GLU_NURBS_ERROR23=100273 |
GLU_NURBS_ERROR24=100274 |
GLU_NURBS_ERROR25=100275 |
GLU_NURBS_ERROR26=100276 |
GLU_NURBS_ERROR27=100277 |
GLU_NURBS_ERROR28=100278 |
GLU_NURBS_ERROR29=100279 |
GLU_NURBS_ERROR30=100280 |
GLU_NURBS_ERROR31=100281 |
GLU_NURBS_ERROR32=100282 |
GLU_NURBS_ERROR33=100283 |
GLU_NURBS_ERROR34=100284 |
GLU_NURBS_ERROR35=100285 |
GLU_NURBS_ERROR36=100286 |
GLU_NURBS_ERROR37=100287 |
;Contourstypes |
GLU_CW=100120 |
GLU_CCW=100121 |
GLU_INTERIOR=100122 |
GLU_EXTERIOR=100123 |
GLU_UNKNOWN=100124 |
/programs/develop/libraries/TinyGL/asm_fork/opinfo.inc |
---|
0,0 → 1,70 |
ADD_OP Color,7,'%f %f %f %f %d %d %d' |
ADD_OP TexCoord,4,'%f %f %f %f' |
ADD_OP EdgeFlag,1,'%d' |
ADD_OP Normal,3,'%f %f %f' |
ADD_OP Begin,1,'%C' |
ADD_OP Vertex,4,'%f %f %f %f' |
ADD_OP End,0,'' |
ADD_OP EnableDisable,2,'%C %d' |
ADD_OP MatrixMode,1,'%C' |
ADD_OP LoadMatrix,16,'' |
ADD_OP LoadIdentity,0,'' |
ADD_OP MultMatrix,16,'' |
ADD_OP PushMatrix,0,'' |
ADD_OP PopMatrix,0,'' |
ADD_OP Rotate,4,'%f %f %f %f' |
ADD_OP Translate,3,'%f %f %f' |
ADD_OP Scale,3,'%f %f %f' |
ADD_OP Viewport,4,'%d %d %d %d' |
ADD_OP Frustum,6,'%f %f %f %f %f %f' |
ADD_OP Material,6,'%C %C %f %f %f %f' |
ADD_OP ColorMaterial,2,'%C %C' |
ADD_OP Light,6,'%C %C %f %f %f %f' |
ADD_OP LightModel,5,'%C %f %f %f %f' |
ADD_OP Clear,1,'%d' |
ADD_OP ClearColor,4,'%f %f %f %f' |
ADD_OP ClearDepth,1,'%f' |
ADD_OP InitNames,0,'' |
ADD_OP PushName,1,'%d' |
ADD_OP PopName,0,'' |
ADD_OP LoadName,1,'%d' |
ADD_OP TexImage2D,9,'%d %d %d %d %d %d %d %d %d' |
ADD_OP BindTexture,2,'%C %d' |
ADD_OP TexEnv,7,'%C %C %C %f %f %f %f' |
ADD_OP TexParameter,7,'%C %C %C %f %f %f %f' |
ADD_OP PixelStore,2,'%C %C' |
ADD_OP ShadeModel,1,'%C' |
ADD_OP CullFace,1,'%C' |
ADD_OP FrontFace,1,'%C' |
ADD_OP PolygonMode,2,'%C %C' |
ADD_OP CallList,1,'%d' |
ADD_OP Hint,2,'%C %C' |
; special opcodes |
ADD_OP EndList,0,'' |
ADD_OP NextBuffer,1,'%p' |
; opengl 1.1 arrays |
ADD_OP ArrayElement, 1, '%d' |
ADD_OP EnableClientState, 1, '%C' |
ADD_OP DisableClientState, 1, '%C' |
ADD_OP VertexPointer, 4, '%d %C %d %p' |
ADD_OP ColorPointer, 4, '%d %C %d %p' |
ADD_OP NormalPointer, 3, '%C %d %p' |
ADD_OP TexCoordPointer, 4, '%d %C %d %p' |
; opengl 1.1 polygon offset |
ADD_OP PolygonOffset, 2, '%f %f' |
purge ADD_OP |
/programs/develop/libraries/TinyGL/asm_fork/select.asm |
---|
0,0 → 1,168 |
align 4 |
proc glRenderMode uses ebx ecx, mode:dword |
call gl_get_context |
xor ebx,ebx |
cmp dword[eax+offs_cont_render_mode],GL_RENDER |
je .e_sw_1 |
cmp dword[eax+offs_cont_render_mode],GL_SELECT |
jne .def_1 |
cmp dword[eax+offs_cont_select_overflow],0 |
je @f |
sub ebx,[eax+offs_cont_select_hits] |
jmp .else_e |
@@: |
mov ebx,[eax+offs_cont_select_hits] |
.else_e: |
mov dword[eax+offs_cont_select_overflow],0 |
mov ecx,[eax+offs_cont_select_buffer] |
mov dword[eax+offs_cont_select_ptr],ecx |
mov dword[eax+offs_cont_name_stack_size],0 |
jmp .e_sw_1 |
.def_1: |
; assert(0); |
.e_sw_1: |
cmp dword[mode],GL_RENDER |
jne @f |
mov dword[eax+offs_cont_render_mode],GL_RENDER |
jmp .e_sw_2 |
@@: |
cmp dword[mode],GL_SELECT |
jne .def_2 |
mov dword[eax+offs_cont_render_mode],GL_SELECT |
; assert( c->select_buffer != NULL); |
mov ecx,[eax+offs_cont_select_buffer] |
mov dword[eax+offs_cont_select_ptr],ecx |
mov dword[eax+offs_cont_select_hits],0 |
mov dword[eax+offs_cont_select_overflow],0 |
mov dword[eax+offs_cont_select_hit],0 ;NULL |
jmp .e_sw_2 |
.def_2: |
; assert(0); |
.e_sw_2: |
mov eax,ebx |
ret |
endp |
align 4 |
proc glSelectBuffer uses eax ebx, size:dword, buf:dword |
call gl_get_context |
; assert(c->render_mode != GL_SELECT); |
mov ebx,[buf] |
mov dword[eax+offs_cont_select_buffer],ebx |
mov ebx,[size] |
mov dword[eax+offs_cont_select_size],ebx |
ret |
endp |
align 4 |
proc glopInitNames uses eax, context:dword, p:dword |
mov eax,[context] |
cmp dword[eax+offs_cont_render_mode],GL_SELECT |
jne @f |
mov dword[eax+offs_cont_name_stack_size],0 |
mov dword[eax+offs_cont_select_hit],0 ;=NULL |
@@: |
ret |
endp |
align 4 |
proc glopPushName uses eax ebx, context:dword, p:dword |
mov eax,[context] |
cmp dword[eax+offs_cont_render_mode],GL_SELECT |
jne @f |
; assert(c->name_stack_size<MAX_NAME_STACK_DEPTH); |
mov dword[eax+offs_cont_select_hit],0 ;=NULL |
inc dword[eax+offs_cont_name_stack_size] |
mov ebx,dword[eax+offs_cont_name_stack_size] |
shl ebx,2 |
add ebx,eax |
mov eax,[p] |
mov eax,[eax+4] |
mov dword[ebx+offs_cont_name_stack],eax ;context.name_stack[context.name_stack_size++]=p[1] |
@@: |
ret |
endp |
align 4 |
proc glopPopName uses eax, context:dword, p:dword |
mov eax,[context] |
cmp dword[eax+offs_cont_render_mode],GL_SELECT |
jne @f |
; assert(c->name_stack_size>0); |
dec dword[eax+offs_cont_name_stack_size] |
mov dword[eax+offs_cont_select_hit],0 ;=NULL |
@@: |
ret |
endp |
align 4 |
proc glopLoadName uses eax ebx, context:dword, p:dword |
mov eax,[context] |
cmp dword[eax+offs_cont_render_mode],GL_SELECT |
jne @f |
; assert(c->name_stack_size>0); |
mov dword[eax+offs_cont_select_hit],0 ;=NULL |
mov ebx,dword[eax+offs_cont_name_stack_size] |
dec ebx |
shl ebx,2 |
add ebx,eax |
mov eax,[p] |
mov eax,[eax+4] |
mov dword[ebx+offs_cont_name_stack],eax ;context.name_stack[context.name_stack_size-1]=p[1] |
@@: |
ret |
endp |
align 4 |
proc gl_add_select uses eax ebx ecx edx, context:dword, zmin:dword, zmax:dword |
; unsigned int *ptr; |
; int i; |
mov eax,[context] |
cmp dword[eax+offs_cont_select_overflow],0 |
jne .end_f ;if (!context.select_overflow) |
cmp dword[eax+offs_cont_select_hit],0 ;if (context.select_hit==NULL) |
jne .els_0 |
mov ecx,[eax+offs_cont_name_stack_size] |
mov ebx,[eax+offs_cont_select_ptr] |
sub ebx,[eax+offs_cont_select_buffer] |
sub ebx,3 |
sub ebx,ecx |
cmp ebx,[eax+offs_cont_select_size] |
jle .els_1 |
mov dword[eax+offs_cont_select_overflow],1 |
jmp .end_f |
.els_1: |
mov ebx,[eax+offs_cont_select_ptr] |
mov [eax+offs_cont_select_hit],ebx |
mov edx,[eax+offs_cont_name_stack_size] |
mov [ebx],edx |
add ebx,4 |
mov edx,[zmin] |
mov [ebx],edx |
add ebx,4 |
mov edx,[zmax] |
mov [ebx],edx |
add ebx,4 |
; for(i=0;i<ecx;i++) *ptr++=c->name_stack[i]; |
mov [eax+offs_cont_select_ptr],ebx |
inc dword[eax+offs_cont_select_hits] |
jmp .end_f |
.els_0: |
mov ebx,[zmin] |
cmp dword[eax+offs_cont_select_hit+4],ebx |
jle @f |
mov dword[eax+offs_cont_select_hit+4],ebx |
@@: |
mov ebx,[zmax] |
cmp dword[eax+offs_cont_select_hit+8],ebx |
jge .end_f |
mov dword[eax+offs_cont_select_hit+8],ebx |
.end_f: |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/texture.asm |
---|
0,0 → 1,260 |
; |
; Texture Manager |
; |
align 4 |
proc find_texture uses ebx ecx, context:dword, h:dword |
mov ebx,[context] |
mov ebx,[ebx+offs_cont_shared_state+4] ;ebx = &texture_hash_table |
mov eax,[h] |
and eax,0xff |
shl eax,2 |
add eax,[ebx] ;eax = &context.shared_state.texture_hash_table[h % TEXTURE_HASH_TABLE_SIZE] |
; [eax] - указатель на текстуру, получаемую через хеш таблицу |
mov ecx,[h] ; ecx - указатель на искомую текстуру |
@@: |
cmp dword[eax],0 |
je .no_found |
mov ebx,[eax] |
cmp dword[ebx+offs_text_handle],ecx |
je .found |
mov eax,[ebx+offs_text_next] |
jmp @b |
.no_found: |
xor eax,eax ;ret NULL |
.found: |
ret |
endp |
;static void free_texture(GLContext *c,int h) |
;{ |
; GLTexture *t,**ht; |
; GLImage *im; |
; int i; |
; |
; t=find_texture(c,h); |
; if (t->prev==NULL) { |
; ht=&c->shared_state.texture_hash_table |
; [t->handle % TEXTURE_HASH_TABLE_SIZE]; |
; *ht=t->next; |
; } else { |
; t->prev->next=t->next; |
; } |
; if (t->next!=NULL) t->next->prev=t->prev; |
; |
; for(i=0;i<MAX_TEXTURE_LEVELS;i++) { |
; im=&t->images[i]; |
; if (im->pixmap != NULL) gl_free(im->pixmap); |
; } |
; |
; gl_free(t); |
;} |
;output: |
; eax - указатель на память |
align 4 |
proc alloc_texture uses ebx ecx, context:dword, h:dword |
stdcall gl_zalloc,sizeof.GLTexture |
mov ebx,[context] |
mov ebx,[ebx+offs_cont_shared_state+4] ;ebx = &texture_hash_table |
mov ecx,[h] |
and ecx,0xff |
shl ecx,2 |
add ecx,[ebx] ;ecx = &context.shared_state.texture_hash_table[h % TEXTURE_HASH_TABLE_SIZE] |
mov ebx,[ecx] |
mov [eax+offs_text_next],ebx |
mov dword[eax+offs_text_prev],0 ;NULL |
cmp dword[eax+offs_text_next],0 ;NULL |
je @f |
mov [eax+offs_text_prev],eax |
@@: |
mov [ecx],eax |
mov ebx,[h] |
mov [eax+offs_text_handle],ebx |
ret |
endp |
align 4 |
proc glInitTextures uses eax edx, context:dword |
; textures |
mov edx,[context] |
mov dword[edx+offs_cont_texture_2d_enabled],0 |
stdcall find_texture,edx,0 |
mov dword[edx+offs_cont_current_texture],eax |
ret |
endp |
;void glGenTextures(int n, unsigned int *textures) |
;{ |
; GLContext *c=gl_get_context(); |
; int max,i; |
; GLTexture *t; |
; |
; max=0; |
; for(i=0;i<TEXTURE_HASH_TABLE_SIZE;i++) { |
; t=c->shared_state.texture_hash_table[i]; |
; while (t!=NULL) { |
; if (t->handle>max) max=t->handle; |
; t=t->next; |
; } |
; |
; } |
; for(i=0;i<n;i++) { |
; textures[i]=max+i+1; |
; } |
;} |
; |
; |
;void glDeleteTextures(int n, const unsigned int *textures) |
;{ |
; GLContext *c=gl_get_context(); |
; int i; |
; GLTexture *t; |
; |
; for(i=0;i<n;i++) { |
; t=find_texture(c,textures[i]); |
; if (t!=NULL && t!=0) { |
; if (t==c->current_texture) { |
; glBindTexture(GL_TEXTURE_2D,0); |
; } |
; free_texture(c,textures[i]); |
; } |
; } |
;} |
align 4 |
proc glopBindTexture uses eax ebx edx, context:dword, p:dword |
mov ebx,[p] |
mov edx,[context] |
; assert(p[1].i == GL_TEXTURE_2D && texture >= 0); |
;[ebx+8] = p[2] |
stdcall find_texture, edx,dword[ebx+8] |
cmp eax,0 ;NULL |
jne @f |
stdcall alloc_texture, edx,dword[ebx+8] |
@@: |
mov [edx+offs_cont_current_texture],eax |
ret |
endp |
align 4 |
proc glopTexImage2D, context:dword, p:dword |
;{ |
; int target=p[1].i; |
; int level=p[2].i; |
; int components=p[3].i; |
; int width=p[4].i; |
; int height=p[5].i; |
; int border=p[6].i; |
; int format=p[7].i; |
; int type=p[8].i; |
; void *pixels=p[9].p; |
; GLImage *im; |
; unsigned char *pixels1; |
; int do_free; |
; |
; if (!(target == GL_TEXTURE_2D && level == 0 && components == 3 && |
; border == 0 && format == GL_RGB && |
; type == GL_UNSIGNED_BYTE)) { |
; gl_fatal_error("glTexImage2D: combinaison of parameters not handled"); |
; } |
; |
; do_free=0; |
; if (width != 256 || height != 256) { |
; pixels1 = gl_malloc(256 * 256 * 3); |
; /* no interpolation is done here to respect the original image aliasing ! */ |
; gl_resizeImageNoInterpolate(pixels1,256,256,pixels,width,height); |
; do_free=1; |
; width=256; |
; height=256; |
; } else { |
; pixels1=pixels; |
; } |
; |
; im=&c->current_texture->images[level]; |
; im->xsize=width; |
; im->ysize=height; |
; if (im->pixmap!=NULL) gl_free(im->pixmap); |
;#if TGL_FEATURE_RENDER_BITS == 24 |
; im->pixmap=gl_malloc(width*height*3); |
; if(im->pixmap) { |
; memcpy(im->pixmap,pixels1,width*height*3); |
; } |
;#elif TGL_FEATURE_RENDER_BITS == 32 |
; im->pixmap=gl_malloc(width*height*4); |
; if(im->pixmap) { |
; gl_convertRGB_to_8A8R8G8B(im->pixmap,pixels1,width,height); |
; } |
;#elif TGL_FEATURE_RENDER_BITS == 16 |
; im->pixmap=gl_malloc(width*height*2); |
; if(im->pixmap) { |
; gl_convertRGB_to_5R6G5B(im->pixmap,pixels1,width,height); |
; } |
;#else |
;#error TODO |
;#endif |
; if (do_free) gl_free(pixels1); |
ret |
endp |
; TODO: not all tests are done |
align 4 |
proc glopTexEnv, context:dword, p:dword |
; int target=p[1].i; |
; int pname=p[2].i; |
; int param=p[3].i; |
; |
; if (target != GL_TEXTURE_ENV) { |
; error: |
; gl_fatal_error("glTexParameter: unsupported option"); |
; } |
; |
; if (pname != GL_TEXTURE_ENV_MODE) goto error; |
; |
; if (param != GL_DECAL) goto error; |
ret |
endp |
; TODO: not all tests are done |
align 4 |
proc glopTexParameter, context:dword, p:dword |
; int target=p[1].i; |
; int pname=p[2].i; |
; int param=p[3].i; |
; |
; if (target != GL_TEXTURE_2D) { |
; error: |
; gl_fatal_error("glTexParameter: unsupported option"); |
; } |
; |
; switch(pname) { |
; case GL_TEXTURE_WRAP_S: |
; case GL_TEXTURE_WRAP_T: |
; if (param != GL_REPEAT) goto error; |
; break; |
; } |
ret |
endp |
align 4 |
proc glopPixelStore, context:dword, p:dword |
; int pname=p[1].i; |
; int param=p[2].i; |
; |
; if (pname != GL_UNPACK_ALIGNMENT || |
; param != 1) { |
; gl_fatal_error("glPixelStore: unsupported option"); |
; } |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/tinygl.asm |
---|
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' |
/programs/develop/libraries/TinyGL/asm_fork/vertex.asm |
---|
0,0 → 1,651 |
align 4 |
proc glopNormal uses ecx esi edi, context:dword, p:dword |
mov esi,[p] |
add esi,4 |
mov edi,[context] |
add edi,offs_cont_current_normal |
mov ecx,4 |
rep movsd |
mov dword[esi],0.0 ;context.current_normal.W = 0.0 |
ret |
endp |
align 4 |
proc glopTexCoord uses ecx esi edi, context:dword, p:dword |
mov esi,[p] |
add esi,4 |
mov edi,[context] |
add edi,offs_cont_current_tex_coord |
mov ecx,4 |
rep movsd |
ret |
endp |
align 4 |
proc glopEdgeFlag uses eax ebx, context:dword, p:dword |
mov eax,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] ;ebx = p[1] |
mov dword[eax+offs_cont_current_edge_flag],ebx |
ret |
endp |
align 4 |
proc glopColor uses eax ecx esi edi, context:dword, p:dword |
locals |
q rd 7 |
endl |
;current_color[3] = p[1-4] |
;longcurrent_color[2] = p[5-7] |
mov esi,[p] |
add esi,4 |
mov edi,[context] |
add edi,offs_cont_current_color |
mov ecx,7 |
rep movsd |
mov eax,[context] |
cmp dword[eax+offs_cont_color_material_enabled],1 |
jne @f |
mov dword[q],OP_Material |
mov ecx,[eax+offs_cont_current_color_material_mode] |
mov dword[q+4],ecx |
mov ecx,[eax+offs_cont_current_color_material_type] |
mov dword[q+8],ecx |
mov esi,[p] |
add esi,4 |
mov edi,dword[q+12] ;edi = [q3] |
mov ecx,4 |
rep movsd |
stdcall glopMaterial, eax,[q] |
@@: |
ret |
endp |
align 4 |
proc gl_eval_viewport uses eax, context:dword |
locals |
zsize dd ? ;float |
endl |
mov eax,[context] |
add eax,offs_cont_viewport ;eax = (GLViewport*) v |
mov dword[zsize],(1 shl (ZB_Z_BITS + ZB_POINT_Z_FRAC_BITS)) |
fild dword[zsize] |
fstp dword[zsize] |
fld1 |
fld1 |
fadd st1,st0 ;st1 = 2.0 |
fdiv st0,st1 ;st0 = 0.5 |
fild dword[eax+offs_vpor_xsize] |
fsub st0,st1 |
fdiv st0,st2 |
fst dword[eax+offs_vpor_scale+offs_X] |
fiadd dword[eax+offs_vpor_xmin] |
fstp dword[eax+offs_vpor_trans+offs_X] |
fild dword[eax+offs_vpor_ysize] |
fsub st0,st1 |
fdiv st0,st2 |
fchs |
fst dword[eax+offs_vpor_scale+offs_Y] |
fchs |
fiadd dword[eax+offs_vpor_ymin] |
fstp dword[eax+offs_vpor_trans+offs_Y] |
fld dword[zsize] |
fsub st0,st1 |
fdiv st0,st2 |
fchs |
fst dword[eax+offs_vpor_scale+offs_Z] |
fchs |
mov dword[zsize],(1 shl ZB_POINT_Z_FRAC_BITS) / 2 |
fiadd dword[zsize] |
fstp dword[eax+offs_vpor_trans+offs_Z] |
if DEBUG ;gl_eval_viewport |
stdcall dbg_print,f_ev,txt_nl |
add eax,offs_vpor_scale |
stdcall gl_print_matrix,eax,1 |
add eax,8 |
stdcall gl_print_matrix,eax,1 |
end if |
ret |
endp |
align 4 |
proc glopBegin uses eax ebx ecx edx, context:dword, p:dword |
locals |
tmp M4 |
endl |
; assert(c->in_begin == 0); |
mov edx,[context] |
mov ebx,[p] |
mov ebx,[ebx+4] ;ebx = p[1] |
mov [edx+offs_cont_begin_type],ebx |
mov dword[edx+offs_cont_in_begin],1 |
mov dword[edx+offs_cont_vertex_n],0 |
mov dword[edx+offs_cont_vertex_cnt],0 |
bt dword[edx+offs_cont_matrix_model_projection_updated],0 |
jnc .end_mmpu |
cmp dword[edx+offs_cont_lighting_enabled],0 ;if(context.lighting_enabled) |
je @f |
; precompute inverse modelview |
mov ebx,ebp |
sub ebx,64 |
stdcall gl_M4_Inv, ebx, edx+offs_cont_matrix_stack_ptr |
stdcall gl_M4_Transpose, edx+offs_cont_matrix_model_view_inv, ebx |
jmp .end_if_0 |
@@: |
mov ecx,edx |
add ecx,offs_cont_matrix_model_projection |
; precompute projection matrix |
stdcall gl_M4_Mul, ecx,dword[edx+offs_cont_matrix_stack_ptr+4],dword[edx+offs_cont_matrix_stack_ptr] |
;if DEBUG ;glopBegin |
;stdcall gl_print_matrix,ecx,4 |
;stdcall gl_print_matrix,[edx+offs_cont_matrix_stack_ptr+4],4 |
;stdcall gl_print_matrix,[edx+offs_cont_matrix_stack_ptr],4 |
;end if |
; test to accelerate computation |
mov dword[edx+offs_cont_matrix_model_projection_no_w_transform],0 |
fldz |
fld dword[ecx+12*4] |
fcomp st1 |
fstsw ax |
sahf |
jne .end_if_0 |
fld dword[ecx+13*4] |
fcomp st1 |
fstsw ax |
sahf |
jne .end_if_0 |
fld dword[ecx+14*4] |
fcomp st1 |
fstsw ax |
sahf |
jne .end_if_0 |
mov dword[edx+offs_cont_matrix_model_projection_no_w_transform],1 |
.end_if_0: |
; test if the texture matrix is not Identity |
stdcall gl_M4_IsId,edx+offs_cont_matrix_stack_ptr+8 |
xor edx,1 |
mov ebx,[context] |
mov dword[ebx+offs_cont_apply_texture_matrix],edx |
mov edx,[context] |
mov dword[edx+offs_cont_matrix_model_projection_updated],0 |
.end_mmpu: |
; viewport |
cmp dword[edx+offs_cont_viewport+offs_vpor_updated],0 ;if (context.viewport.updated) |
je @f |
stdcall gl_eval_viewport,edx |
mov dword[edx+offs_cont_viewport+offs_vpor_updated],0 |
@@: |
; triangle drawing functions |
cmp dword[edx+offs_cont_render_mode],GL_SELECT |
jne @f |
mov dword[edx+offs_cont_draw_triangle_front],gl_draw_triangle_select |
mov dword[edx+offs_cont_draw_triangle_back],gl_draw_triangle_select |
jmp .end_if_2 |
@@: |
cmp dword[edx+offs_cont_polygon_mode_front],GL_POINT |
jne @f |
mov dword[edx+offs_cont_draw_triangle_front],gl_draw_triangle_point |
jmp .end_if_1 |
@@: |
cmp dword[edx+offs_cont_polygon_mode_front],GL_LINE |
jne @f |
mov dword[edx+offs_cont_draw_triangle_front],gl_draw_triangle_line |
jmp .end_if_1 |
@@: ;default: |
mov dword[edx+offs_cont_draw_triangle_front],gl_draw_triangle_fill |
.end_if_1: |
cmp dword[edx+offs_cont_polygon_mode_back],GL_POINT |
jne @f |
mov dword[edx+offs_cont_draw_triangle_back],gl_draw_triangle_point |
jmp .end_if_2 |
@@: |
cmp dword[edx+offs_cont_polygon_mode_back],GL_LINE |
jne @f |
mov dword[edx+offs_cont_draw_triangle_back],gl_draw_triangle_line |
jmp .end_if_2 |
@@: ;default: |
mov dword[edx+offs_cont_draw_triangle_back],gl_draw_triangle_fill |
.end_if_2: |
ret |
endp |
; coords, tranformation , clip code and projection |
; TODO : handle all cases |
align 4 |
proc gl_vertex_transform, context:dword, v:dword |
pushad |
mov eax,[context] |
mov edx,[v] |
cmp dword[eax+offs_cont_lighting_enabled],0 ;if (context.lighting_enabled) |
je .els_0 |
; eye coordinates needed for lighting |
mov ebx,dword[eax+offs_cont_matrix_stack_ptr] |
;;;mov edx,[v] |
finit |
fld dword[edx+offs_vert_coord+offs_X] |
fld dword[edx+offs_vert_coord+offs_Y] |
fld dword[edx+offs_vert_coord+offs_Z] |
mov ecx,4 |
.cycle_0: |
fld dword[ebx] ;st0 = m[0] |
fmul st0,st3 ;st0 *= v.coord.X |
fld dword[ebx+4] ;st0 = m[1] |
fmul st0,st3 ;st0 *= v.coord.Y |
fld dword[ebx+8] ;st0 = m[2] |
fmul st0,st3 ;st0 *= v.coord.Z |
fadd dword[ebx+12] ;st0 += m[3] |
fadd st0,st1 ;st0 += v.coord.Z * m[2] |
fadd st0,st2 ;st0 += v.coord.Y * m[1] |
fstp dword[edx+offs_vert_ec] ;v.ec.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3] |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
add ebx,16 ;следущая строка матрицы |
add edx,4 ;следущая координата вектора |
loop .cycle_0 |
; projection coordinates |
mov ebx,dword[eax+offs_cont_matrix_stack_ptr+4] |
mov edx,[v] |
finit |
fld dword[edx+offs_vert_ec+offs_X] |
fld dword[edx+offs_vert_ec+offs_Y] |
fld dword[edx+offs_vert_ec+offs_Z] |
mov ecx,4 |
.cycle_1: |
fld dword[ebx] ;st0 = m[0] |
fmul st0,st3 ;st0 *= v.ec.X |
fld dword[ebx+4] ;st0 = m[1] |
fmul st0,st3 ;st0 *= v.ec.Y |
fld dword[ebx+8] ;st0 = m[2] |
fmul st0,st3 ;st0 *= v.ec.Z |
fadd dword[ebx+12] ;st0 += m[3] |
fadd st0,st1 ;st0 += v.ec.Z * m[2] |
fadd st0,st2 ;st0 += v.ec.Y * m[1] |
fstp dword[edx+offs_vert_pc] ;v.pc.X = v.ec.X * m[0] + v.ec.Y * m[1] + v.ec.Z * m[2] + m[3] |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
add ebx,16 ;следущая строка матрицы |
add edx,4 ;следущая координата вектора |
loop .cycle_1 |
mov ebx,eax |
add ebx,offs_cont_matrix_model_view_inv |
mov edi,eax |
add edi,offs_cont_current_normal |
mov edx,[v] |
finit |
fld dword[edi+offs_X] |
fld dword[edi+offs_Y] |
fld dword[edi+offs_Z] |
mov ecx,3 |
.cycle_2: |
fld dword[ebx] ;st0 = m[0] |
fmul st0,st3 ;st0 *= n.X |
fld dword[ebx+4] ;st0 = m[1] |
fmul st0,st3 ;st0 *= n.Y |
fld dword[ebx+8] ;st0 = m[2] |
fmul st0,st3 ;st0 *= n.Z |
fadd st0,st1 ;st0 += n.Z * m[2] |
fadd st0,st2 ;st0 += n.Y * m[1] |
fstp dword[edx+offs_vert_normal] ;v.normal.X = n.X * m[0] + n.Y * m[1] + n.Z * m[2] |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
add ebx,16 ;следущая строка матрицы |
add edx,4 ;следущая координата вектора |
loop .cycle_2 |
cmp dword[eax+offs_cont_normalize_enabled],0 |
je .end_els |
;stdcall gl_V3_Norm(&v->normal) |
jmp .end_els |
.els_0: |
; no eye coordinates needed, no normal |
; NOTE: W = 1 is assumed |
mov ebx,eax |
add ebx,offs_cont_matrix_model_projection |
;;;mov edx,[v] |
finit |
fld dword[edx+offs_vert_coord+offs_X] |
fld dword[edx+offs_vert_coord+offs_Y] |
fld dword[edx+offs_vert_coord+offs_Z] |
mov esi,edx |
add esi,offs_vert_pc |
fld dword[ebx] ;st0 = m[0] |
fmul st0,st3 ;st0 *= v.coord.X |
fld dword[ebx+4] ;st0 = m[1] |
fmul st0,st3 ;st0 *= v.coord.Y |
fld dword[ebx+8] ;st0 = m[2] |
fmul st0,st3 ;st0 *= v.coord.Z |
fadd dword[ebx+12] ;st0 += m[3] |
fadd st0,st1 ;st0 += v.coord.Z * m[2] |
fadd st0,st2 ;st0 += v.coord.Y * m[1] |
fstp dword[esi] ;v.pc.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3] |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
fld dword[ebx+16] ;st0 = m[4] |
fmul st0,st3 ;st0 *= v.coord.X |
fld dword[ebx+20] ;st0 = m[5] |
fmul st0,st3 ;st0 *= v.coord.Y |
fld dword[ebx+24] ;st0 = m[6] |
fmul st0,st3 ;st0 *= v.coord.Z |
fadd dword[ebx+28] ;st0 += m[7] |
fadd st0,st1 ;st0 += v.coord.Z * m[6] |
fadd st0,st2 ;st0 += v.coord.Y * m[5] |
fstp dword[esi+4] ;v.pc.X = v.coord.X * m[4] + v.coord.Y * m[5] + v.coord.Z * m[6] + m[7] |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
fld dword[ebx+32] ;st0 = m[8] |
fmul st0,st3 ;st0 *= v.coord.X |
fld dword[ebx+36] ;st0 = m[9] |
fmul st0,st3 ;st0 *= v.coord.Y |
fld dword[ebx+40] ;st0 = m[10] |
fmul st0,st3 ;st0 *= v.coord.Z |
fadd dword[ebx+44] ;st0 += m[11] |
fadd st0,st1 ;st0 += v.coord.Z * m[10] |
fadd st0,st2 ;st0 += v.coord.Y * m[9] |
fstp dword[esi+8] ;v.pc.X = v.coord.X * m[8] + v.coord.Y * m[9] + v.coord.Z * m[10] + m[11] |
cmp dword[eax+offs_cont_matrix_model_projection_no_w_transform],0 |
je .els_1 |
;if (context.matrix_model_projection_no_w_transform) |
mov ebx,dword[ebx+60] ;ebx = m[15] |
mov dword[esi+12],ebx ;v.pc.W = m[15] |
jmp .end_els |
.els_1: |
ffree st0 |
fincstp |
ffree st0 |
fincstp |
fld dword[ebx+48] ;st0 = m[12] |
fmul st0,st3 ;st0 *= v.coord.X |
fld dword[ebx+52] ;st0 = m[13] |
fmul st0,st3 ;st0 *= v.coord.Y |
fld dword[ebx+56] ;st0 = m[14] |
fmul st0,st3 ;st0 *= v.coord.Z |
fadd dword[ebx+60] ;st0 += m[15] |
fadd st0,st1 ;st0 += v.coord.Z * m[14] |
fadd st0,st2 ;st0 += v.coord.Y * m[13] |
fstp dword[esi+12] ;v.pc.W = v.coord.X * m[12] + v.coord.Y * m[13] + v.coord.Z * m[14] + m[15] |
.end_els: |
if DEBUG ;gl_vertex_transform |
stdcall dbg_print,f_vt,txt_nl |
mov edx,[v] |
add edx,offs_vert_pc |
stdcall gl_print_matrix,edx,1 |
end if |
mov edx,[v] |
stdcall gl_clipcode, dword[edx+offs_vert_pc+offs_X], dword[edx+offs_vert_pc+offs_Y],\ |
dword[edx+offs_vert_pc+offs_Z], dword[edx+offs_vert_pc+offs_W] |
mov dword[edx+offs_vert_clip_code],eax |
popad |
ret |
endp |
align 4 |
proc glopVertex, context:dword, p:dword |
locals |
;ebx = GLVertex * v |
n dd ? ;ebp-4 |
endl |
pushad |
mov edx,[context] |
; assert(c->in_begin != 0); |
mov ecx,[edx+offs_cont_vertex_n] |
mov [n],ecx |
inc dword[edx+offs_cont_vertex_cnt] |
; quick fix to avoid crashes on large polygons |
mov ecx,[edx+offs_cont_vertex_max] |
cmp dword[n],ecx |
jl @f |
shl dword[edx+offs_cont_vertex_max],1 ; just double size |
imul ecx,2*sizeof.GLVertex |
stdcall gl_malloc,ecx |
cmp eax,0 |
jne .no_err |
;gl_fatal_error("unable to allocate GLVertex array.\n"); |
.no_err: |
mov edi,eax |
mov ebx,eax |
mov esi,[edx+offs_cont_vertex] |
mov ecx,[n] |
imul ecx,(sizeof.GLVertex)/4 ;((...)/4) что-бы использовать movsd вместо movsb |
rep movsd |
stdcall gl_free,dword[edx+offs_cont_vertex] |
mov dword[edx+offs_cont_vertex],ebx |
@@: |
; new vertex entry |
mov ebx,[n] |
imul ebx,sizeof.GLVertex |
add ebx,[edx+offs_cont_vertex] |
inc dword[n] |
mov esi,[p] |
add esi,4 |
mov edi,ebx |
add edi,offs_vert_coord ;edi = &v.coord |
mov ecx,4 |
rep movsd |
stdcall gl_vertex_transform, edx, ebx |
; color |
cmp dword[edx+offs_cont_lighting_enabled],0 |
je .els_0 |
stdcall gl_shade_vertex, edx,ebx |
jmp @f |
.els_0: |
mov eax,[edx+offs_cont_current_color] |
mov [ebx+offs_vert_color],eax |
@@: |
; tex coords |
cmp dword[edx+offs_cont_texture_2d_enabled],0 |
je @f |
cmp dword[edx+offs_cont_apply_texture_matrix],0 |
je .els_1 |
; gl_M4_MulV4(&v->tex_coord, c->matrix_stack_ptr[2], &c->current_tex_coord); |
jmp @f |
.els_1: |
mov eax,[edx+offs_cont_current_tex_coord] |
mov [ebx+offs_vert_tex_coord],eax |
@@: |
; precompute the mapping to the viewport |
cmp dword[ebx+offs_vert_clip_code],0 |
jne @f |
stdcall gl_transform_to_viewport, edx,ebx |
@@: |
; edge flag |
mov eax,[edx+offs_cont_current_edge_flag] |
mov dword[ebx+offs_vert_edge_flag],eax ;v.edge_flag = context.current_edge_flag |
cmp dword[edx+offs_cont_begin_type],GL_POINTS |
jne @f |
stdcall gl_draw_point, edx, dword[edx+offs_cont_vertex] ;dword[edx+...] = &context.vertex[0] |
mov dword[n],0 |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_LINES |
jne @f |
cmp dword[n],2 |
jne .end_f |
mov eax,[edx+offs_cont_vertex] |
push eax |
add eax,sizeof.GLVertex |
push eax |
stdcall gl_draw_line, edx |
xor eax,eax |
mov dword[n],eax |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_LINE_STRIP |
je .li_loop |
cmp dword[edx+offs_cont_begin_type],GL_LINE_LOOP |
jne @f |
.li_loop: |
cmp dword[n],1 |
jne .els_2 |
mov esi,[edx+offs_cont_vertex] |
mov edi,esi |
add edi,2*sizeof.GLVertex |
mov ecx,(sizeof.GLVertex)/4 ;((...)/4) что-бы использовать movsd вместо movsb |
rep movsd ;context.vertex[2] = context.vertex[0] |
jmp .end_f |
.els_2: |
cmp dword[n],2 |
jne .end_f ;else if (n == 2) |
mov eax,[edx+offs_cont_vertex] |
push eax |
add eax,sizeof.GLVertex |
push eax |
stdcall gl_draw_line, edx |
mov edi,[edx+offs_cont_vertex] |
mov esi,edi |
add esi,sizeof.GLVertex |
mov ecx,(sizeof.GLVertex)/4 ;((...)/4) что-бы использовать movsd вместо movsb |
rep movsd ;context.vertex[0] = context.vertex[1] |
mov dword[n],1 |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_TRIANGLES |
jne @f |
cmp dword[n],3 |
jne .end_f |
; gl_draw_triangle(c, &c->vertex[0], &c->vertex[1], &c->vertex[2]); |
xor eax,eax |
mov dword[n],eax |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_TRIANGLE_STRIP |
jne @f |
; if (c->vertex_cnt >= 3) { |
; if (n == 3) |
; n = 0; |
; /* needed to respect triangle orientation */ |
; switch(c->vertex_cnt & 1) { |
; case 0: |
; gl_draw_triangle(c,&c->vertex[2],&c->vertex[1],&c->vertex[0]); |
; break; |
; default: |
; case 1: |
; gl_draw_triangle(c,&c->vertex[0],&c->vertex[1],&c->vertex[2]); |
; break; |
; } |
; } |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_TRIANGLE_FAN |
jne @f |
cmp dword[n],2 |
jne .end_f |
; gl_draw_triangle(c, &c->vertex[0], &c->vertex[1], &c->vertex[2]); |
; c->vertex[1] = c->vertex[2]; |
mov dword[n],2 |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_QUADS |
jne @f |
cmp dword[n],4 |
jne .end_f |
; c->vertex[2].edge_flag = 0; |
; gl_draw_triangle(c, &c->vertex[0], &c->vertex[1], &c->vertex[2]); |
; c->vertex[2].edge_flag = 1; |
; c->vertex[0].edge_flag = 0; |
; gl_draw_triangle(c, &c->vertex[0], &c->vertex[2], &c->vertex[3]); |
xor eax,eax |
mov dword[n],eax |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_QUAD_STRIP |
jne @f |
cmp dword[n],2 |
jne .end_f |
; gl_draw_triangle(c, &c->vertex[0], &c->vertex[1], &c->vertex[2]); |
; gl_draw_triangle(c, &c->vertex[1], &c->vertex[3], &c->vertex[2]); |
; for (i = 0; i < 2; i++) |
; c->vertex[i] = c->vertex[i + 2]; |
mov dword[n],2 |
jmp .end_f |
@@: |
cmp dword[edx+offs_cont_begin_type],GL_POLYGON |
jne @f |
;... |
jmp .end_f |
@@: |
; default: |
; gl_fatal_error("glBegin: type %x not handled\n", c->begin_type); |
; } |
.end_f: |
mov ecx,[n] |
mov [edx+offs_cont_vertex_n],ecx |
popad |
ret |
endp |
align 4 |
proc glopEnd uses eax ebx, context:dword, p:dword |
mov eax,[context] |
; assert(c->in_begin == 1); |
cmp dword[eax+offs_cont_begin_type],GL_LINE_LOOP |
jne .else_i |
cmp dword[eax+offs_cont_vertex_cnt],3 |
jl .end_i |
mov ebx,[eax+offs_cont_vertex] |
push ebx |
add ebx,2*sizeof.GLVertex |
push ebx |
stdcall gl_draw_line, eax |
jmp .end_i |
.else_i: |
cmp dword[eax+offs_cont_begin_type],GL_POLYGON |
jne .end_i |
mov ebx,dword[eax+offs_cont_vertex_cnt] |
@@: ;while (ebx >= 3) |
cmp ebx,3 |
jl .end_i |
dec ebx |
; gl_draw_triangle(c, &c->vertex[i], &c->vertex[0], &c->vertex[i - 1]); |
jmp @b |
.end_i: |
mov dword[eax+offs_cont_in_begin],0 |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/zbuffer.asm |
---|
0,0 → 1,545 |
; |
; |
; Z buffer: 16 bits Z / 16 bits color |
; |
; |
;include 'zbuffer.inc' |
;output: |
; eax - указатель на ZBuffer (0 если не удача) |
align 4 |
proc ZB_open uses ecx edi, xsize:dword, ysize:dword, mode:dword,\ |
nb_colors:dword, color_indexes:dword, color_table:dword, frame_buffer:dword |
stdcall gl_malloc, sizeof.ZBuffer |
cmp eax,0 |
jne @f |
stdcall dbg_print,f_zb_opn,err_1 |
jmp .end_f |
@@: |
mov edi,eax |
mov eax,[ysize] |
mov [edi+offs_zbuf_ysize],eax |
mov eax,[xsize] |
mov [edi+offs_zbuf_xsize],eax |
imul eax,PSZB |
add eax,3 |
and eax,not 3 |
mov [edi+offs_zbuf_linesize],eax |
mov eax,[mode] |
mov [edi+offs_zbuf_mode],eax |
if TGL_FEATURE_8_BITS eq 1 |
cmp eax,ZB_MODE_INDEX |
jne @f |
;ZB_initDither(edi, nb_colors, color_indexes, color_table); |
jmp .end_s |
@@: |
end if |
if TGL_FEATURE_32_BITS eq 1 |
cmp eax,ZB_MODE_RGBA |
je .correct |
end if |
if TGL_FEATURE_24_BITS eq 1 |
cmp eax,ZB_MODE_RGB24 |
je .correct |
end if |
cmp eax,ZB_MODE_5R6G5B |
jne @f |
.correct: |
mov dword[edi+offs_zbuf_nb_colors],0 |
jmp .end_s |
@@: ;default: |
stdcall dbg_print,f_zb_opn,err_3 |
jmp .error |
.end_s: |
mov ecx,[edi+offs_zbuf_xsize] |
imul ecx,[edi+offs_zbuf_ysize] |
shl ecx,2 ;*= sizeof(unsigned short) |
stdcall gl_malloc, ecx |
mov [edi+offs_zbuf_zbuf],eax |
cmp eax,0 |
jne @f |
stdcall dbg_print,f_zb_opn,err_2 |
jmp .error |
@@: |
mov dword[edi+offs_zbuf_frame_buffer_allocated],0 |
mov dword[edi+offs_zbuf_pbuf],0 ;NULL |
mov dword[edi+offs_zbuf_current_texture],0 ;NULL |
mov eax,edi |
jmp .end_f |
.error: |
stdcall gl_free,edi |
xor eax,eax |
.end_f: |
ret |
endp |
;void ZB_close(ZBuffer * zb) |
;{ |
if TGL_FEATURE_8_BITS eq 1 |
; if (zb->mode == ZB_MODE_INDEX) |
; ZB_closeDither(zb); |
end if |
; |
; if (zb->frame_buffer_allocated) |
; gl_free(zb->pbuf); |
; |
; gl_free(zb->zbuf); |
; gl_free(zb); |
;} |
align 4 |
proc ZB_resize uses eax ebx ecx edi esi, zb:dword, frame_buffer:dword, xsize:dword, ysize:dword |
mov ebx,[zb] |
; xsize must be a multiple of 4 |
mov edi,[xsize] |
and edi,not 3 |
mov esi,[ysize] |
mov [ebx+offs_zbuf_xsize], edi |
mov [ebx+offs_zbuf_ysize], esi |
mov eax,edi |
imul eax,PSZB |
add eax,3 |
and eax,not 3 |
mov [ebx+offs_zbuf_linesize],eax ;zb.linesize = (xsize * PSZB + 3) & ~3 |
mov ecx,edi |
imul ecx,esi |
shl ecx,2 ;*= sizeof(unsigned short) |
stdcall gl_free,dword[ebx+offs_zbuf_zbuf] |
stdcall gl_malloc,ecx |
mov [ebx+offs_zbuf_zbuf],eax |
cmp dword[ebx+offs_zbuf_frame_buffer_allocated],0 |
je @f |
stdcall gl_free,dword[ebx+offs_zbuf_pbuf] |
@@: |
cmp dword[frame_buffer],0 |
jne .els_0 |
inc esi |
imul esi,dword[ebx+offs_zbuf_linesize] |
stdcall gl_malloc,esi |
mov dword[ebx+offs_zbuf_pbuf],eax |
mov dword[ebx+offs_zbuf_frame_buffer_allocated],1 |
jmp @f |
.els_0: |
mov eax,[frame_buffer] |
mov dword[ebx+offs_zbuf_pbuf],eax |
mov dword[ebx+offs_zbuf_frame_buffer_allocated],0 |
@@: |
ret |
endp |
;static void ZB_copyBuffer(ZBuffer * zb, |
; void *buf, |
; int linesize) |
;{ |
; unsigned char *p1; |
; PIXEL *q; |
; int y, n; |
; |
; q = zb->pbuf; |
; p1 = buf; |
; n = zb->xsize * PSZB; |
; for (y = 0; y < zb->ysize; y++) { |
; memcpy(p1, q, n); |
; p1 += linesize; |
; q = (PIXEL *) ((char *) q + zb->linesize); |
; } |
;} |
; |
;#if TGL_FEATURE_RENDER_BITS == 16 |
;/* 32 bpp copy */ |
;#ifdef TGL_FEATURE_32_BITS |
;#define RGB16_TO_RGB32(p0,p1,v)\ |
;{\ |
; unsigned int g,b,gb;\ |
; g = (v & 0x07E007E0) << 5;\ |
; b = (v & 0x001F001F) << 3;\ |
; gb = g | b;\ |
; p0 = (gb & 0x0000FFFF) | ((v & 0x0000F800) << 8);\ |
; p1 = (gb >> 16) | ((v & 0xF8000000) >> 8);\ |
;} |
;static void ZB_copyFrameBufferRGB32(ZBuffer * zb, |
; void *buf, |
; int linesize) |
;{ |
; unsigned short *q; |
; unsigned int *p, *p1, v, w0, w1; |
; int y, n; |
; |
; q = zb->pbuf; |
; p1 = (unsigned int *) buf; |
; |
; for (y = 0; y < zb->ysize; y++) { |
; p = p1; |
; n = zb->xsize >> 2; |
; do { |
; v = *(unsigned int *) q; |
;#if BYTE_ORDER == BIG_ENDIAN |
; RGB16_TO_RGB32(w1, w0, v); |
;#else |
; RGB16_TO_RGB32(w0, w1, v); |
;#endif |
; p[0] = w0; |
; p[1] = w1; |
; |
; v = *(unsigned int *) (q + 2); |
;#if BYTE_ORDER == BIG_ENDIAN |
; RGB16_TO_RGB32(w1, w0, v); |
;#else |
; RGB16_TO_RGB32(w0, w1, v); |
;#endif |
; p[2] = w0; |
; p[3] = w1; |
; |
; q += 4; |
; p += 4; |
; } while (--n > 0); |
; |
; p1 += linesize; |
; } |
;} |
;#endif |
;/* 24 bit packed pixel handling */ |
;#ifdef TGL_FEATURE_24_BITS |
;/* order: RGBR GBRG BRGB */ |
;/* XXX: packed pixel 24 bit support not tested */ |
;/* XXX: big endian case not optimised */ |
;#if BYTE_ORDER == BIG_ENDIAN |
;#define RGB16_TO_RGB24(p0,p1,p2,v1,v2)\ |
;{\ |
; unsigned int r1,g1,b1,gb1,g2,b2,gb2;\ |
; v1 = (v1 << 16) | (v1 >> 16);\ |
; v2 = (v2 << 16) | (v2 >> 16);\ |
; r1 = (v1 & 0xF800F800);\ |
; g1 = (v1 & 0x07E007E0) << 5;\ |
; b1 = (v1 & 0x001F001F) << 3;\ |
; gb1 = g1 | b1;\ |
; p0 = ((gb1 & 0x0000FFFF) << 8) | (r1 << 16) | (r1 >> 24);\ |
; g2 = (v2 & 0x07E007E0) << 5;\ |
; b2 = (v2 & 0x001F001F) << 3;\ |
; gb2 = g2 | b2;\ |
; p1 = (gb1 & 0xFFFF0000) | (v2 & 0xF800) | ((gb2 >> 8) & 0xff);\ |
; p2 = (gb2 << 24) | ((v2 & 0xF8000000) >> 8) | (gb2 >> 16);\ |
;} |
;#else |
;#define RGB16_TO_RGB24(p0,p1,p2,v1,v2)\ |
;{\ |
; unsigned int r1,g1,b1,gb1,g2,b2,gb2;\ |
; r1 = (v1 & 0xF800F800);\ |
; g1 = (v1 & 0x07E007E0) << 5;\ |
; b1 = (v1 & 0x001F001F) << 3;\ |
; gb1 = g1 | b1;\ |
; p0 = ((gb1 & 0x0000FFFF) << 8) | (r1 << 16) | (r1 >> 24);\ |
; g2 = (v2 & 0x07E007E0) << 5;\ |
; b2 = (v2 & 0x001F001F) << 3;\ |
; gb2 = g2 | b2;\ |
; p1 = (gb1 & 0xFFFF0000) | (v2 & 0xF800) | ((gb2 >> 8) & 0xff);\ |
; p2 = (gb2 << 24) | ((v2 & 0xF8000000) >> 8) | (gb2 >> 16);\ |
;} |
;#endif |
;static void ZB_copyFrameBufferRGB24(ZBuffer * zb, |
; void *buf, int linesize) |
;{ |
; unsigned short *q; |
; unsigned int *p, *p1, w0, w1, w2, v0, v1; |
; int y, n; |
; |
; q = zb->pbuf; |
; p1 = (unsigned int *) buf; |
; linesize = linesize * 3; |
; |
; for (y = 0; y < zb->ysize; y++) { |
; p = p1; |
; n = zb->xsize >> 2; |
; do { |
; v0 = *(unsigned int *) q; |
; v1 = *(unsigned int *) (q + 2); |
; RGB16_TO_RGB24(w0, w1, w2, v0, v1); |
; p[0] = w0; |
; p[1] = w1; |
; p[2] = w2; |
; q += 4; |
; p += 3; |
; } while (--n > 0); |
; |
; (char *) p1 += linesize; |
; } |
;} |
;#endif |
;void ZB_copyFrameBuffer(ZBuffer * zb, void *buf, |
; int linesize) |
;{ |
; switch (zb->mode) { |
;#ifdef TGL_FEATURE_8_BITS |
; case ZB_MODE_INDEX: |
; ZB_ditherFrameBuffer(zb, buf, linesize >> 1); |
; break; |
;#endif |
;#ifdef TGL_FEATURE_16_BITS |
; case ZB_MODE_5R6G5B: |
; ZB_copyBuffer(zb, buf, linesize); |
; break; |
;#endif |
;#ifdef TGL_FEATURE_32_BITS |
; case ZB_MODE_RGBA: |
; ZB_copyFrameBufferRGB32(zb, buf, linesize >> 1); |
; break; |
;#endif |
;#ifdef TGL_FEATURE_24_BITS |
; case ZB_MODE_RGB24: |
; ZB_copyFrameBufferRGB24(zb, buf, linesize >> 1); |
; break; |
;#endif |
; default: |
; assert(0); |
; } |
;} |
;#endif /* TGL_FEATURE_RENDER_BITS == 16 */ |
;#if TGL_FEATURE_RENDER_BITS == 24 |
;#define RGB24_TO_RGB16(r, g, b) \ |
; ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3)) |
;/* XXX: not optimized */ |
;static void ZB_copyFrameBuffer5R6G5B(ZBuffer * zb, |
; void *buf, int linesize) |
;{ |
; PIXEL *q; |
; unsigned short *p, *p1; |
; int y, n; |
; |
; q = zb->pbuf; |
; p1 = (unsigned short *) buf; |
; |
; for (y = 0; y < zb->ysize; y++) { |
; p = p1; |
; n = zb->xsize >> 2; |
; do { |
; p[0] = RGB24_TO_RGB16(q[0], q[1], q[2]); |
; p[1] = RGB24_TO_RGB16(q[3], q[4], q[5]); |
; p[2] = RGB24_TO_RGB16(q[6], q[7], q[8]); |
; p[3] = RGB24_TO_RGB16(q[9], q[10], q[11]); |
; q = (PIXEL *)((char *)q + 4 * PSZB); |
; p += 4; |
; } while (--n > 0); |
; p1 = (unsigned short *)((char *)p1 + linesize); |
; } |
;} |
;void ZB_copyFrameBuffer(ZBuffer * zb, void *buf, |
; int linesize) |
;{ |
; switch (zb->mode) { |
;#ifdef TGL_FEATURE_16_BITS |
; case ZB_MODE_5R6G5B: |
; ZB_copyFrameBuffer5R6G5B(zb, buf, linesize); |
; break; |
;#endif |
;#ifdef TGL_FEATURE_24_BITS |
; case ZB_MODE_RGB24: |
; ZB_copyBuffer(zb, buf, linesize); |
; break; |
;#endif |
; default: |
; assert(0); |
; } |
;} |
;#endif /* TGL_FEATURE_RENDER_BITS == 24 */ |
;#if TGL_FEATURE_RENDER_BITS == 32 |
;#define RGB32_TO_RGB16(v) \ |
; (((v >> 8) & 0xf800) | (((v) >> 5) & 0x07e0) | (((v) & 0xff) >> 3)) |
;/* XXX: not optimized */ |
;static void ZB_copyFrameBuffer5R6G5B(ZBuffer * zb, |
; void *buf, int linesize) |
;{ |
; PIXEL *q; |
; unsigned short *p, *p1; |
; int y, n; |
; |
; q = zb->pbuf; |
; p1 = (unsigned short *) buf; |
; |
; for (y = 0; y < zb->ysize; y++) { |
; p = p1; |
; n = zb->xsize >> 2; |
; do { |
; p[0] = RGB32_TO_RGB16(q[0]); |
; p[1] = RGB32_TO_RGB16(q[1]); |
; p[2] = RGB32_TO_RGB16(q[2]); |
; p[3] = RGB32_TO_RGB16(q[3]); |
; q += 4; |
; p += 4; |
; } while (--n > 0); |
; p1 = (unsigned short *)((char *)p1 + linesize); |
; } |
;} |
; |
;void ZB_copyFrameBuffer(ZBuffer * zb, void *buf, |
; int linesize) |
;{ |
; switch (zb->mode) { |
;#ifdef TGL_FEATURE_16_BITS |
; case ZB_MODE_5R6G5B: |
; ZB_copyFrameBuffer5R6G5B(zb, buf, linesize); |
; break; |
;#endif |
;#ifdef TGL_FEATURE_32_BITS |
; case ZB_MODE_RGBA: |
; ZB_copyBuffer(zb, buf, linesize); |
; break; |
;#endif |
; default: |
; assert(0); |
; } |
;} |
; |
;#endif /* TGL_FEATURE_RENDER_BITS == 32 */ |
; |
; |
;/* |
; * adr must be aligned on an 'int' |
; */ |
;void memset_s(void *adr, int val, int count) |
;{ |
; int i, n, v; |
; unsigned int *p; |
; unsigned short *q; |
; |
; p = adr; |
; v = val | (val << 16); |
; |
; n = count >> 3; |
; for (i = 0; i < n; i++) { |
; p[0] = v; |
; p[1] = v; |
; p[2] = v; |
; p[3] = v; |
; p += 4; |
; } |
; |
; q = (unsigned short *) p; |
; n = count & 7; |
; for (i = 0; i < n; i++) |
; *q++ = val; |
;} |
; |
;void memset_l(void *adr, int val, int count) |
;{ |
; int i, n, v; |
; unsigned int *p; |
; |
; p = adr; |
; v = val; |
; n = count >> 2; |
; for (i = 0; i < n; i++) { |
; p[0] = v; |
; p[1] = v; |
; p[2] = v; |
; p[3] = v; |
; p += 4; |
; } |
; |
; n = count & 3; |
; for (i = 0; i < n; i++) |
; *p++ = val; |
;} |
; |
;/* count must be a multiple of 4 and >= 4 */ |
;void memset_RGB24(void *adr,int r, int v, int b,long count) |
;{ |
; long i, n; |
; register long v1,v2,v3,*pt=(long *)(adr); |
; unsigned char *p,R=(unsigned char)r,V=(unsigned char)v,B=(unsigned char)b; |
; |
; p=(unsigned char *)adr; |
; *p++=R; |
; *p++=V; |
; *p++=B; |
; *p++=R; |
; *p++=V; |
; *p++=B; |
; *p++=R; |
; *p++=V; |
; *p++=B; |
; *p++=R; |
; *p++=V; |
; *p++=B; |
; v1=*pt++; |
; v2=*pt++; |
; v3=*pt++; |
; n = count >> 2; |
; for(i=1;i<n;i++) { |
; *pt++=v1; |
; *pt++=v2; |
; *pt++=v3; |
; } |
;} |
; |
;void ZB_clear(ZBuffer * zb, int clear_z, int z, |
; int clear_color, int r, int g, int b) |
;{ |
;#if TGL_FEATURE_RENDER_BITS != 24 |
; int color; |
;#endif |
; int y; |
; PIXEL *pp; |
; |
; if (clear_z) { |
; memset_s(zb->zbuf, z, zb->xsize * zb->ysize); |
; } |
; if (clear_color) { |
; pp = zb->pbuf; |
; for (y = 0; y < zb->ysize; y++) { |
;#if TGL_FEATURE_RENDER_BITS == 15 || TGL_FEATURE_RENDER_BITS == 16 |
; color = RGB_TO_PIXEL(r, g, b); |
; memset_s(pp, color, zb->xsize); |
;#elif TGL_FEATURE_RENDER_BITS == 32 |
; color = RGB_TO_PIXEL(r, g, b); |
; memset_l(pp, color, zb->xsize); |
;#elif TGL_FEATURE_RENDER_BITS == 24 |
; memset_RGB24(pp,r>>8,g>>8,b>>8,zb->xsize); |
;#else |
;#error TODO |
;#endif |
; pp = (PIXEL *) ((char *) pp + zb->linesize); |
; } |
; } |
;} |
/programs/develop/libraries/TinyGL/asm_fork/zbuffer.inc |
---|
0,0 → 1,178 |
; |
; Z buffer |
; |
include 'zfeatures.inc' |
ZB_Z_BITS equ 16 |
ZB_POINT_Z_FRAC_BITS equ 14 |
ZB_POINT_S_MIN equ ( (1 shl 13) ) |
ZB_POINT_S_MAX equ ( (1 shl 22)-(1 shl 13) ) |
ZB_POINT_T_MIN equ ( (1 shl 21) ) |
ZB_POINT_T_MAX equ ( (1 shl 30)-(1 shl 21) ) |
ZB_POINT_RED_MIN equ ( (1 shl 10) ) |
ZB_POINT_RED_MAX equ ( (1 shl 16)-(1 shl 10) ) |
ZB_POINT_GREEN_MIN equ ( (1 shl 9) ) |
ZB_POINT_GREEN_MAX equ ( (1 shl 16)-(1 shl 9) ) |
ZB_POINT_BLUE_MIN equ ( (1 shl 10) ) |
ZB_POINT_BLUE_MAX equ ( (1 shl 16)-(1 shl 10) ) |
; display modes |
ZB_MODE_5R6G5B equ 1 ; true color 16 bits |
ZB_MODE_INDEX equ 2 ; color index 8 bits |
ZB_MODE_RGBA equ 3 ; 32 bit rgba mode |
ZB_MODE_RGB24 equ 4 ; 24 bit rgb mode |
ZB_NB_COLORS equ 225 ; number of colors for 8 bit display |
if TGL_FEATURE_RENDER_BITS eq 15 |
;#define RGB_TO_PIXEL(r,g,b) \ |
; ((((r) >> 1) & 0x7c00) | (((g) >> 6) & 0x03e0) | ((b) >> 11)) |
;typedef unsigned short PIXEL; |
;/* bytes per pixel */ |
;PSZB equ 2 |
;/* bits per pixel = (1 << PSZH) */ |
;PSZSH equ 4 |
else if TGL_FEATURE_RENDER_BITS eq 16 |
;/* 16 bit mode */ |
;#define RGB_TO_PIXEL(r,g,b) \ |
; (((r) & 0xF800) | (((g) >> 5) & 0x07E0) | ((b) >> 11)) |
;typedef unsigned short PIXEL; |
;PSZB equ 2 |
;PSZSH equ 4 |
else if TGL_FEATURE_RENDER_BITS eq 24 |
macro RGB_TO_PIXEL r,g,b |
{ |
mov eax,b |
shr eax,8 |
push eax |
mov eax,g |
and eax,0xff00 |
or dword[esp],eax |
mov eax,r |
shl eax,8 |
or dword[esp],eax |
pop eax |
} |
;typedef unsigned char PIXEL; |
PSZB equ 3 |
PSZSH equ 5 |
else if TGL_FEATURE_RENDER_BITS eq 32 |
;#define RGB_TO_PIXEL(r,g,b) \ |
; ((((r) << 8) & 0xff0000) | ((g) & 0xff00) | ((b) >> 8)) |
;typedef unsigned int PIXEL; |
;PSZB equ 4 |
;PSZSH equ 5 |
else |
;#error Incorrect number of bits per pixel |
end if |
struct ZBuffer |
xsize dd ? ;int |
ysize dd ? ;int |
linesize dd ? ;int ;line size, in bytes |
mode dd ? ;int |
zbuf dd ? ;*unsigned short |
pbuf dd ? ;*PIXEL |
frame_buffer_allocated dd ? ;int |
nb_colors dd ? ;int |
dctable dd ? ;*unsigned char |
ctable dd ? ;*int |
current_texture dd ? ;*PIXEL |
ends |
offs_zbuf_xsize equ 0 |
offs_zbuf_ysize equ 4 |
offs_zbuf_linesize equ 8 |
offs_zbuf_mode equ 16 |
offs_zbuf_zbuf equ 20 |
offs_zbuf_pbuf equ 24 |
offs_zbuf_frame_buffer_allocated equ 28 |
offs_zbuf_nb_colors equ 32 |
offs_zbuf_dctable equ 36 |
offs_zbuf_ctable equ 40 |
offs_zbuf_current_texture equ 44 |
struct ZBufferPoint |
x dd ? ;int ;integer coordinates in the zbuffer |
y dd ? ;int |
z dd ? ;int |
s dd ? ;int ;coordinates for the mapping |
t dd ? ;int |
r dd ? ;int ;color indexes |
g dd ? ;int |
b dd ? ;int |
fsz dd ? ;float ;temporary coordinates for mapping |
tz dd ? ;float |
ends |
offs_zbup_x equ 0 |
offs_zbup_y equ 4 |
offs_zbup_z equ 8 |
offs_zbup_s equ 12 |
offs_zbup_t equ 16 |
offs_zbup_r equ 20 |
offs_zbup_g equ 24 |
offs_zbup_b equ 28 |
offs_zbup_sz equ 32 |
offs_zbup_tz equ 36 |
; ztriangle.c |
; |
; Memory allocator for TinyGL |
; |
; modify these functions so that they suit your needs |
align 4 |
proc gl_free uses ebx ecx, mptr:dword |
mov ecx,[mptr] |
or ecx,ecx |
jz @f |
@@: |
mcall 68, 13 |
ret |
endp |
;description: |
; выделение памяти |
align 4 |
proc gl_malloc uses ebx ecx, size:dword |
mcall 68, 12, [size] |
ret |
endp |
;description: |
; выделение очищеной памяти |
align 4 |
proc gl_zalloc uses ebx ecx edi, size:dword |
mov ecx,[size] |
stdcall gl_malloc,ecx |
cmp eax,0 |
je @f |
mov ebx,eax |
mov edi,eax |
xor eax,eax |
shr ecx,2 |
rep stosd ;очистка памяти (пишем везде 0) |
mov eax,ebx |
@@: |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/zfeatures.inc |
---|
0,0 → 1,43 |
; |
; If not debugging, assert does nothing. |
; |
;#define assert(x) ((void)0) /* debugging disabled */ |
;#include <assert.h> /* debugging enabled */ |
; It is possible to enable/disable (compile time) features in this |
; header file. |
;TGL_FEATURE_ARRAYS equ 1 |
;TGL_FEATURE_DISPLAYLISTS equ 1 |
;TGL_FEATURE_POLYGON_OFFSET equ 1 |
; |
; Matrix of internal and external pixel formats supported. 'Y' means |
; supported. |
; |
; External 8 16 24 32 |
; Internal |
; 15 . . . . |
; 16 Y Y Y Y |
; 24 . Y Y . |
; 32 . Y . Y |
; |
; |
; 15 bpp does not work yet (although it is easy to add it - ask me if |
; you need it). |
; |
; Internal pixel format: see TGL_FEATURE_RENDER_BITS |
; External pixel format: see TGL_FEATURE_xxx_BITS |
; |
; enable various convertion code from internal pixel format (usually |
; 16 bits per pixel) to any external format */ |
;TGL_FEATURE_16_BITS equ 1 |
;TGL_FEATURE_8_BITS equ 1 |
TGL_FEATURE_24_BITS equ 1 |
;TGL_FEATURE_32_BITS equ 1 |
;TGL_FEATURE_RENDER_BITS equ 15 |
;TGL_FEATURE_RENDER_BITS equ 16 |
TGL_FEATURE_RENDER_BITS equ 24 |
;TGL_FEATURE_RENDER_BITS equ 32 |
/programs/develop/libraries/TinyGL/asm_fork/zgl.inc |
---|
0,0 → 1,515 |
include 'opengl_const.inc' |
include 'zbuffer.inc' |
include 'zmath.inc' |
;#define fputc(...) /*nothing*/ |
;#define fprintf(...) /*nothing*/ |
;#define vfprintf(...) /*nothing*/ |
;#undef stderr |
;#define stderr ((FILE*)-1) |
;enum { OP_ ## a , ... } |
s1 equ 0 |
macro ADD_OP a,b,c |
{ |
OP_#a equ s1 |
s1 equ (s1+1) |
} |
include 'opinfo.inc' |
;initially # of allocated GLVertexes (will grow when necessary) |
POLYGON_MAX_VERTEX equ 16 |
;Max # of specular light pow buffers |
MAX_SPECULAR_BUFFERS equ 8 |
;# of entries in specular buffer |
SPECULAR_BUFFER_SIZE equ 1024 |
;specular buffer granularity |
SPECULAR_BUFFER_RESOLUTION equ 1024 |
MAX_MODELVIEW_STACK_DEPTH equ 32 |
MAX_PROJECTION_STACK_DEPTH equ 8 |
MAX_TEXTURE_STACK_DEPTH equ 8 |
MAX_NAME_STACK_DEPTH equ 64 |
MAX_TEXTURE_LEVELS equ 11 |
MAX_LIGHTS equ 16 |
VERTEX_HASH_SIZE equ 1031 |
MAX_DISPLAY_LISTS equ 1024 |
OP_BUFFER_MAX_SIZE equ 512 |
TGL_OFFSET_FILL equ 0x1 |
TGL_OFFSET_LINE equ 0x2 |
TGL_OFFSET_POINT equ 0x4 |
struct GLSpecBuf |
shininess_i dd ? ;int |
last_used dd ? ;int |
buf rd SPECULAR_BUFFER_SIZE+1 ;float[SPECULAR_BUFFER_SIZE+1] |
next dd ? ;struct GLSpecBuf* |
ends |
struct GLLight |
ambient V4 |
diffuse V4 |
specular V4 |
position V4 |
spot_direction V3 |
spot_exponent dd ? ;float |
spot_cutoff dd ? ;float |
attenuation rd 3 ;float[3] |
; precomputed values |
cos_spot_cutoff dd ? ;float |
norm_spot_direction V3 |
norm_position V3 |
; we use a linked list to know which are the enabled lights |
enabled dd ? ;int |
next dd ? ;struct GLLight* |
prev dd ? ;struct GLLight* |
ends |
offs_ligh_ambient equ 0 ;V4 |
offs_ligh_diffuse equ 16 ;V4 |
offs_ligh_specular equ 32 ;V4 |
offs_ligh_position equ 48 ;V4 |
offs_ligh_spot_direction equ 64 ;V3 |
offs_ligh_spot_exponent equ 76 ;dd ? |
offs_ligh_spot_cutoff equ 80 ;dd ? |
offs_ligh_attenuation equ 84 ;rd 3 |
offs_ligh_cos_spot_cutoff equ 96 ;dd ? |
offs_ligh_norm_spot_direction equ 100 ;V3 |
offs_ligh_norm_position equ 112 ;V3 |
offs_ligh_enabled equ 124 ;dd ? |
offs_ligh_next equ 128 ;dd ? |
offs_ligh_prev equ 132 ;dd ? |
struct GLMaterial |
emission V4 |
ambient V4 |
diffuse V4 |
specular V4 |
shininess dd ? ;float |
; computed values |
shininess_i dd ? ;int |
do_specular dd ? ;int |
ends |
offs_mate_emission equ 0 ;V4 |
offs_mate_ambient equ 16 ;V4 |
offs_mate_diffuse equ 32 ;V4 |
offs_mate_specular equ 48 ;V4 |
offs_mate_shininess equ 64 ;dd |
offs_mate_shininess_i equ 68 ;dd |
offs_mate_do_specular equ 72 ;dd |
struct GLViewport |
xmin dd ? ;int |
ymin dd ? ;int |
xsize dd ? ;int |
ysize dd ? ;int |
scale V3 |
trans V3 |
updated dd ? ;int |
ends |
offs_vpor_xmin equ 0 |
offs_vpor_ymin equ 4 |
offs_vpor_xsize equ 8 |
offs_vpor_ysize equ 12 |
offs_vpor_scale equ 16 |
offs_vpor_trans equ 28 |
offs_vpor_updated equ 40 |
struct GLParamBuffer |
ops rd OP_BUFFER_MAX_SIZE ;GLParam[OP_BUFFER_MAX_SIZE] |
next dd ? ;struct GLParamBuffer* |
ends |
struct GLList |
first_op_buffer dd ? ;GLParamBuffer* |
; /* TODO: extensions for an hash table or a better allocating scheme */ |
ends |
struct GLVertex |
edge_flag dd ? ;int |
normal V3 |
coord V4 |
tex_coord V4 |
color V4 |
; computed values |
ec V4 ; eye coordinates |
pc V4 ; coordinates in the normalized volume |
clip_code dd ? ;int ; clip code |
zp ZBufferPoint ; integer coordinates for the rasterization |
ends |
offs_vert_edge_flag equ 0 |
offs_vert_normal equ 4 |
offs_vert_coord equ 16 |
offs_vert_tex_coord equ 32 |
offs_vert_color equ 48 |
offs_vert_ec equ 64 |
offs_vert_pc equ 80 |
offs_vert_clip_code equ 96 |
offs_vert_zp equ 100 |
struct GLImage |
pixmap dd ? ;void* |
xsize dd ? ;int |
ysize dd ? ;int |
ends |
offs_imag_pixmap equ 0 |
; textures |
TEXTURE_HASH_TABLE_SIZE equ 256 ;должно быть кратное 2, в коде берется остаток от деления (через and быстрее чем div) |
struct GLTexture |
images rb sizeof.GLImage * MAX_TEXTURE_LEVELS ;GLImage[MAX_TEXTURE_LEVELS] |
handle dd ? ;int |
next dd ? ;struct GLTexture* |
prev dd ? ;struct GLTexture* |
ends |
offs_text_images equ 0 |
offs_text_handle equ sizeof.GLImage*MAX_TEXTURE_LEVELS |
offs_text_next equ 4+offs_text_handle |
offs_text_prev equ 8+offs_text_handle |
; shared state |
struct GLSharedState |
lists dd ? ;GLList** |
texture_hash_table dd ? ;GLTexture** |
ends |
; display context |
struct GLContext |
; Z buffer |
zb dd ? ;ZBuffer* |
; lights |
lights rb sizeof.GLLight * MAX_LIGHTS ;GLLight[MAX_LIGHTS] |
first_light dd ? ;GLLight* |
ambient_light_model V4 |
local_light_model dd ? ;int |
lighting_enabled dd ? ;int |
light_model_two_side dd ? ;int |
; materials |
materials rb sizeof.GLMaterial * 2 ;GLMaterial[2] |
color_material_enabled dd ? ;int |
current_color_material_mode dd ? ;int |
current_color_material_type dd ? ;int |
; textures |
current_texture dd ? ;GLTexture* |
texture_2d_enabled dd ? ;int |
; shared state |
shared_state GLSharedState |
; current list |
current_op_buffer dd ? ;GLParamBuffer* |
current_op_buffer_index dd ? ;int |
exec_flag dd ? ;int |
compile_flag dd ? ;int |
print_flag dd ? ;int |
; matrix |
matrix_mode dd ? ;int режим активного вида матрицы (один из 3-х: GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE) |
matrix_stack rd 3 ;*M4[3] указатель на начало массива матриц |
matrix_stack_ptr rd 3 ;*M4[3] указатель на активную матрицу из массива |
matrix_stack_depth_max rd 3 ;int[3] максимальное число матриц в массивах matrix_stack |
matrix_model_view_inv M4 |
matrix_model_projection M4 |
matrix_model_projection_updated dd ? ;int |
matrix_model_projection_no_w_transform dd ? ;int |
apply_texture_matrix dd ? ;int |
; viewport |
viewport GLViewport |
; current state |
polygon_mode_back dd ? ;int |
polygon_mode_front dd ? ;int |
current_front_face dd ? ;int |
current_shade_model dd ? ;int |
current_cull_face dd ? ;int |
cull_face_enabled dd ? ;int |
normalize_enabled dd ? ;int |
draw_triangle_front dd ? ;gl_draw_triangle_func |
draw_triangle_back dd ? ;gl_draw_triangle_func |
; selection |
render_mode dd ? ;int |
select_buffer dd ? ;unsigned int* |
select_size dd ? ;int |
select_ptr dd ? ;unsigned int* |
select_hit dd ? ;unsigned int* |
select_overflow dd ? ;int |
select_hits dd ? ;int |
; names |
name_stack rd MAX_NAME_STACK_DEPTH ;unsigned int[MAX_NAME_STACK_DEPTH] |
name_stack_size dd ? ;int |
; clear |
clear_depth dd ? ;float |
clear_color V4 |
; current vertex state |
current_color V4 |
longcurrent_color rd 3 ;unsigned int[3] ;precomputed integer color |
current_normal V4 |
current_tex_coord V4 |
current_edge_flag dd ? ;int |
; glBegin / glEnd |
in_begin dd ? ;int |
begin_type dd ? ;int |
vertex_n dd ? ;int |
vertex_cnt dd ? ;int |
vertex_max dd ? ;int |
vertex dd ? ;GLVertex* |
; opengl 1.1 arrays |
vertex_array dd ? ;float* |
vertex_array_size dd ? ;int |
vertex_array_stride dd ? ;int |
normal_array dd ? ;float* |
normal_array_stride dd ? ;int |
color_array dd ? ;float* |
color_array_size dd ? ;int |
color_array_stride dd ? ;int |
texcoord_array dd ? ;float* |
texcoord_array_size dd ? ;int |
texcoord_array_stride dd ? ;int |
client_states dd ? ;int |
; opengl 1.1 polygon offset |
offset_factor dd ? ;float |
offset_units dd ? ;float |
offset_states dd ? ;int |
; specular buffer. could probably be shared between contexts, |
; but that wouldn't be 100% thread safe |
specbuf_first dd ? ;GLSpecBuf* |
specbuf_used_counter dd ? ;int |
specbuf_num_buffers dd ? ;int |
; opaque structure for user's use |
opaque dd ? ;void* |
; resize viewport function |
gl_resize_viewport dd ? ;(struct GLContext *c,int *xsize,int *ysize) |
; depth test |
depth_test dd ? ;int |
ends |
offs_cont_s0 equ (4 + sizeof.GLLight * MAX_LIGHTS) |
offs_cont_s1 equ (32 + offs_cont_s0 + sizeof.GLMaterial * 2) |
offs_cont_s2 equ (228 + offs_cont_s1 + sizeof.GLViewport) |
offs_cont_s3 equ (64 + offs_cont_s2 + MAX_NAME_STACK_DEPTH * 4) |
offs_cont_zb equ 0 ;ZBuffer* |
offs_cont_lights equ 4 ;GLLight[MAX_LIGHTS] |
offs_cont_first_light equ offs_cont_s0 ;GLLight* |
offs_cont_ambient_light_model equ 4+offs_cont_s0 ;V4 |
offs_cont_local_light_model equ 20+offs_cont_s0 ;int |
offs_cont_lighting_enabled equ 24+offs_cont_s0 ;int |
offs_cont_light_model_two_side equ 28+offs_cont_s0 ;int |
offs_cont_materials equ 32+offs_cont_s0 ;GLMaterial[2] |
offs_cont_color_material_enabled equ offs_cont_s1 ;int |
offs_cont_current_color_material_mode equ 4+offs_cont_s1 ;int |
offs_cont_current_color_material_type equ 8+offs_cont_s1 ;int |
offs_cont_current_texture equ 12+offs_cont_s1 ;GLTexture* |
offs_cont_texture_2d_enabled equ 16+offs_cont_s1 ;int |
offs_cont_shared_state equ 20+offs_cont_s1 ;GLSharedState |
offs_cont_current_op_buffer equ 28+offs_cont_s1 ;GLParamBuffer* |
offs_cont_current_op_buffer_index equ 32+offs_cont_s1 ;int |
offs_cont_exec_flag equ 36+offs_cont_s1 ;int |
offs_cont_compile_flag equ 40+offs_cont_s1 ;int |
offs_cont_print_flag equ 44+offs_cont_s1 ;int |
offs_cont_matrix_mode equ 48+offs_cont_s1 ;int |
offs_cont_matrix_stack equ 52+offs_cont_s1 ;*M4[3] |
offs_cont_matrix_stack_ptr equ 64+offs_cont_s1 ;*M4[3] |
offs_cont_matrix_stack_depth_max equ 76+offs_cont_s1 ;int[3] |
offs_cont_matrix_model_view_inv equ 88+offs_cont_s1 ;M4 |
offs_cont_matrix_model_projection equ 152+offs_cont_s1 ;M4 |
offs_cont_matrix_model_projection_updated equ 216+offs_cont_s1 ;int |
offs_cont_matrix_model_projection_no_w_transform equ 220+offs_cont_s1 ;int |
offs_cont_apply_texture_matrix equ 224+offs_cont_s1 ;int |
offs_cont_viewport equ 228+offs_cont_s1 ;GLViewport |
offs_cont_polygon_mode_back equ offs_cont_s2 ;int |
offs_cont_polygon_mode_front equ 4+offs_cont_s2 ;int |
offs_cont_current_front_face equ 8+offs_cont_s2 ;int |
offs_cont_current_shade_model equ 12+offs_cont_s2 ;int |
offs_cont_current_cull_face equ 16+offs_cont_s2 ;int |
offs_cont_cull_face_enabled equ 20+offs_cont_s2 ;int |
offs_cont_normalize_enabled equ 24+offs_cont_s2 ;int |
offs_cont_draw_triangle_front equ 28+offs_cont_s2 ;gl_draw_triangle_func |
offs_cont_draw_triangle_back equ 32+offs_cont_s2 ;gl_draw_triangle_func |
offs_cont_render_mode equ 36+offs_cont_s2 ;int |
offs_cont_select_buffer equ 40+offs_cont_s2 ;unsigned int* |
offs_cont_select_size equ 44+offs_cont_s2 ;int |
offs_cont_select_ptr equ 48+offs_cont_s2 ;unsigned int* |
offs_cont_select_hit equ 52+offs_cont_s2 ;unsigned int* |
offs_cont_select_overflow equ 56+offs_cont_s2 ;int |
offs_cont_select_hits equ 60+offs_cont_s2 ;int |
offs_cont_name_stack equ 64+offs_cont_s2 ;unsigned int[MAX_NAME_STACK_DEPTH] |
offs_cont_name_stack_size equ offs_cont_s3 ;int |
offs_cont_clear_depth equ 4+offs_cont_s3 ;float |
offs_cont_clear_color equ 8+offs_cont_s3 ;V4 |
offs_cont_current_color equ 24+offs_cont_s3 ;V4 |
offs_cont_longcurrent_color equ 40+offs_cont_s3 ;unsigned int[3] |
offs_cont_current_normal equ 52+offs_cont_s3 ;V4 |
offs_cont_current_tex_coord equ 68+offs_cont_s3 ;V4 |
offs_cont_current_edge_flag equ 84+offs_cont_s3 ;int |
offs_cont_in_begin equ 88+offs_cont_s3 ;int |
offs_cont_begin_type equ 92+offs_cont_s3 ;int |
offs_cont_vertex_n equ 96+offs_cont_s3 ;int |
offs_cont_vertex_cnt equ 100+offs_cont_s3 ;int |
offs_cont_vertex_max equ 104+offs_cont_s3 ;int |
offs_cont_vertex equ 108+offs_cont_s3 ;GLVertex* |
offs_cont_vertex_array equ 112+offs_cont_s3 ;float* |
offs_cont_vertex_array_size equ 116+offs_cont_s3 ;int |
offs_cont_vertex_array_stride equ 120+offs_cont_s3 ;int |
offs_cont_normal_array equ 124+offs_cont_s3 ;float* |
offs_cont_normal_array_stride equ 128+offs_cont_s3 ;int |
offs_cont_color_array equ 132+offs_cont_s3 ;float* |
offs_cont_color_array_size equ 136+offs_cont_s3 ;int |
offs_cont_color_array_stride equ 140+offs_cont_s3 ;int |
offs_cont_texcoord_array equ 144+offs_cont_s3 ;float* |
offs_cont_texcoord_array_size equ 148+offs_cont_s3 ;int |
offs_cont_texcoord_array_stride equ 152+offs_cont_s3 ;int |
offs_cont_client_states equ 156+offs_cont_s3 ;int |
offs_cont_offset_factor equ 160+offs_cont_s3 ;float |
offs_cont_offset_units equ 164+offs_cont_s3 ;float |
offs_cont_offset_states equ 168+offs_cont_s3 ;int |
offs_cont_specbuf_first equ 172+offs_cont_s3 ;GLSpecBuf* |
offs_cont_specbuf_used_counter equ 176+offs_cont_s3 ;int |
offs_cont_specbuf_num_buffers equ 180+offs_cont_s3 ;int |
offs_cont_opaque equ 184+offs_cont_s3 ;void* |
offs_cont_gl_resize_viewport equ 188+offs_cont_s3 ;(struct GLContext *c,int *xsize,int *ysize) |
offs_cont_depth_test equ 192+offs_cont_s3 ;int |
align 16 |
gl_ctx dd ? ;extern GLContext* |
align 16 |
proc gl_get_context |
mov eax,[gl_ctx] |
ret |
endp |
; this clip epsilon is needed to avoid some rounding errors after |
; several clipping stages |
CLIP_EPSILON dd 1.0e-5 |
align 4 |
proc gl_clipcode uses ebx, x:dword, y:dword, z:dword, w1:dword |
xor ebx,ebx |
;ffree st0 |
;fincstp |
fld1 |
fadd dword[CLIP_EPSILON] |
fmul dword[w1] |
fcom dword[x] |
fstsw ax |
sahf |
ja @f |
or ebx,2 |
@@: |
fcom dword[y] |
fstsw ax |
sahf |
ja @f |
or ebx,8 |
@@: |
fcom dword[z] |
fstsw ax |
sahf |
ja @f |
or ebx,32 |
@@: |
fchs |
fcom dword[x] |
fstsw ax |
sahf |
jbe @f |
or ebx,1 |
@@: |
fcom dword[y] |
fstsw ax |
sahf |
jbe @f |
or ebx,4 |
@@: |
fcom dword[z] |
fstsw ax |
sahf |
jbe @f |
or ebx,16 |
@@: |
mov eax,ebx |
if DEBUG ;gl_clipcode |
push edi |
mov ecx,80 |
lea edi,[buf_param] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,f_clipcode,buf_param |
pop edi |
end if |
ret |
endp |
;input: |
; rf,gf,bf - значения float |
; ri,gi,bi - адреса куда будут записаны rf,gf,bf преобразованые в int |
align 4 |
proc RGBFtoRGBI uses eax, rf:dword,gf:dword,bf:dword, ri:dword,gi:dword,bi:dword |
locals |
s dd ? |
endl |
mov dword[s],(ZB_POINT_RED_MAX - ZB_POINT_RED_MIN) |
fild dword[s] |
fmul dword[rf] |
mov eax,[ri] |
fistp dword[eax] |
add dword[eax],ZB_POINT_RED_MIN |
mov dword[s],(ZB_POINT_GREEN_MAX - ZB_POINT_GREEN_MIN) |
fild dword[s] |
fmul dword[gf] |
mov eax,[gi] |
fistp dword[eax] |
add dword[eax],ZB_POINT_GREEN_MIN |
;bi = (unsigned int) (bf * (ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) + ZB_POINT_BLUE_MIN); |
mov dword[s],(ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) |
fild dword[s] |
fmul dword[bf] |
mov eax,[bi] |
fistp dword[eax] |
add dword[eax],ZB_POINT_BLUE_MIN |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/zline.asm |
---|
0,0 → 1,164 |
align 4 |
proc ZB_plot uses eax ebx ecx edx edi, zb:dword, p:dword |
mov eax,[zb] |
mov ebx,[p] |
mov ecx,[ebx+offs_zbup_y] |
imul ecx,[eax+offs_zbuf_xsize] |
add ecx,[ebx+offs_zbup_x] |
add ecx,[eax+offs_zbuf_zbuf] |
mov edx,[eax+offs_zbuf_linesize] |
imul edx,[ebx+offs_zbup_y] |
mov edi,[ebx+offs_zbup_x] |
imul edi,PSZB |
add edx,edi |
add edx,[eax+offs_zbuf_pbuf] |
mov edi,[ebx+offs_zbup_z] |
shr edi,ZB_POINT_Z_FRAC_BITS |
cmp edi,[ecx] |
jl .end_f |
if TGL_FEATURE_RENDER_BITS eq 24 |
mov eax,[ebx+offs_zbup_r] |
mov byte[edx],ah |
mov eax,[ebx+offs_zbup_g] |
mov byte[edx+1],ah |
mov eax,[ebx+offs_zbup_b] |
mov byte[edx+2],ah |
else |
; *pp = RGB_TO_PIXEL(p->r, p->g, p->b); |
end if |
mov [ecx],edi |
.end_f: |
ret |
endp |
INTERP_Z equ 1 |
align 4 |
proc ZB_line_flat_z, zb:dword, p1:dword, p2:dword, color:dword |
include 'zline.inc' |
; line with color interpolation |
INTERP_Z equ 1 |
align 4 |
proc ZB_line_interp_z, zb:dword, p1:dword, p2:dword |
include 'zline_r.inc' |
; no Z interpolation |
align 4 |
proc ZB_line_flat, zb:dword, p1:dword, p2:dword, color:dword |
include 'zline.inc' |
align 4 |
proc ZB_line_interp, zb:dword, p1:dword, p2:dword |
include 'zline_r.inc' |
align 4 |
proc ZB_line_z uses eax ebx ecx, zb:dword, p1:dword, p2:dword |
if DEBUG ;ZB_line_z |
push edi |
mov ecx,80 |
mov eax,[p1] |
mov eax,[eax+offs_zbup_x] |
lea edi,[buf_param] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[p1] |
mov eax,[eax+offs_zbup_y] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[p2] |
mov eax,[eax+offs_zbup_x] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[p2] |
mov eax,[eax+offs_zbup_y] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,f_zbz,buf_param |
pop edi |
end if |
mov ebx,[p1] |
RGB_TO_PIXEL dword[ebx+offs_zbup_r],dword[ebx+offs_zbup_g],dword[ebx+offs_zbup_b] |
mov ecx,eax |
mov ebx,[p2] |
RGB_TO_PIXEL dword[ebx+offs_zbup_r],dword[ebx+offs_zbup_g],dword[ebx+offs_zbup_b] |
; choose if the line should have its color interpolated or not |
cmp ecx,eax |
jne .els |
stdcall ZB_line_flat_z, dword[zb], dword[p1], ebx, ecx |
jmp @f |
.els: |
stdcall ZB_line_interp_z, dword[zb], dword[p1], ebx |
@@: |
ret |
endp |
align 4 |
proc ZB_line uses eax ebx ecx, zb:dword, p1:dword, p2:dword |
if DEBUG ;ZB_line |
push edi |
mov ecx,80 |
mov eax,[p1] |
mov eax,[eax+offs_zbup_x] |
lea edi,[buf_param] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[p1] |
mov eax,[eax+offs_zbup_y] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[p2] |
mov eax,[eax+offs_zbup_x] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_zp_sp,2 |
stdcall str_len,edi |
add edi,eax |
sub ecx,eax |
mov eax,[p2] |
mov eax,[eax+offs_zbup_y] |
stdcall convert_int_to_str,ecx |
stdcall str_n_cat,edi,txt_nl,2 |
stdcall dbg_print,f_zb,buf_param |
pop edi |
end if |
mov ebx,[p1] |
RGB_TO_PIXEL dword[ebx+offs_zbup_r],dword[ebx+offs_zbup_g],dword[ebx+offs_zbup_b] |
mov ecx,eax |
mov ebx,[p2] |
RGB_TO_PIXEL dword[ebx+offs_zbup_r],dword[ebx+offs_zbup_g],dword[ebx+offs_zbup_b] |
; choose if the line should have its color interpolated or not |
cmp ecx,eax |
jne .els |
stdcall ZB_line_flat, dword[zb], dword[p1], ebx, ecx |
jmp @f |
.els: |
stdcall ZB_line_interp, dword[zb], dword[p1], ebx |
@@: |
ret |
endp |
/programs/develop/libraries/TinyGL/asm_fork/zline.inc |
---|
0,0 → 1,226 |
;PUTPIXEL -> RGBPIXEL |
locals |
n dd ? |
d_x dd ? |
d_y dd ? |
sx dd ? ;ширина буфера в пикселях |
pp_inc_1 dd ? |
pp_inc_2 dd ? |
a dd ? ;register int |
if TGL_FEATURE_RENDER_BITS eq 24 |
r dd ? ;register unsigned int |
g dd ? |
b dd ? |
end if |
if INTERP_Z eq 1 |
pz dd ? ;register unsigned short * |
zinc dd ? |
z dd ? ;register int |
zz dd ? |
end if |
endl |
pushad |
mov eax,[p1] |
mov ebx,[p2] |
mov ecx,[ebx+offs_zbup_y] |
cmp [eax+offs_zbup_y], ecx ;if (p1.y > p2.y) |
jg @f |
jl .end_0 ;if (p1.y != p2.y) |
mov ecx,[ebx+offs_zbup_x] |
cmp [eax+offs_zbup_x], ecx ;if (p1.x > p2.x) |
jle .end_0 ;if (p1.x <= p2.x) |
@@: ;if (p1.y > p2.y || (p1.y == p2.y && p1.x > p2.x)) |
mov [p1],ebx |
mov [p2],eax |
.end_0: |
mov eax,[zb] |
mov edx,[eax+offs_zbuf_xsize] |
mov [sx],edx |
mov ecx,[p1] |
mov edi,[eax+offs_zbuf_linesize] |
imul edi,[ecx+offs_zbup_y] |
mov edx,[ecx+offs_zbup_x] |
imul edx,PSZB |
add edi,edx |
add edi,[eax+offs_zbuf_pbuf] ;edi = (zb.pbuf + zb.linesize*p1.y + p1.x*PSZB) |
if INTERP_Z eq 1 |
mov edx,[ecx+offs_zbup_y] |
imul edx,[sx] |
add edx,[ecx+offs_zbup_x] |
add edx,[eax+offs_zbuf_zbuf] |
mov [pz],edx ;pz = zb.zbuf + (p1.y*sx + p1.x) |
mov edx,[ecx+offs_zbup_z] |
mov [z],edx ;z = p1.z |
end if |
mov ebx,[p2] |
mov eax,[ebx+offs_zbup_x] |
sub eax,[ecx+offs_zbup_x] |
mov [d_x],eax ;d_x = p2.x - p1.x |
mov eax,[ebx+offs_zbup_y] |
sub eax,[ecx+offs_zbup_y] |
mov [d_y],eax ;d_y = p2.y - p1.y |
if TGL_FEATURE_RENDER_BITS eq 24 |
; for 24 bits, we store the colors in different variables |
mov eax,[ebx+offs_zbup_r] |
shr eax,8 |
mov [r],eax ;r = p2.r >> 8 |
mov eax,[ebx+offs_zbup_g] |
shr eax,8 |
mov [g],eax ;g = p2.g >> 8 |
mov eax,[ebx+offs_zbup_b] |
shr eax,8 |
mov [b],eax ;b = p2.b >> 8 |
end if |
macro RGBPIXEL |
{ |
if TGL_FEATURE_RENDER_BITS eq 24 |
mov eax,[r] |
mov byte[edi],al |
mov eax,[g] |
mov byte[edi+1],al |
mov eax,[b] |
mov byte[edi+2],al |
;;; else |
;;; mov eax,[color] |
;;; mov [edi],eax |
end if |
} |
macro PUTPIXEL |
{ |
if INTERP_Z eq 1 |
local .end_0 |
mov eax,[z] |
shr eax, ZB_POINT_Z_FRAC_BITS |
mov [zz],eax |
cmp eax,[pz] |
jl .end_0 |
RGBPIXEL |
mov eax,dword[zz] |
mov [pz],eax |
.end_0: |
else ; INTERP_Z |
RGBPIXEL |
end if ; INTERP_Z |
} |
macro DRAWLINE d_x,d_y,inc_1,inc_2 |
{ |
mov eax,d_x |
mov [n],eax |
if INTERP_Z eq 1 |
mov ebx,[p1] |
mov eax,[p2] |
mov eax,[eax+offs_zbup_z] |
sub eax,[ebx+offs_zbup_z] |
xor edx,edx |
div dword[n] |
mov [zinc],eax ;zinc=(p2.z-p1.z)/n |
end if |
shl dword d_y,1 |
mov eax, d_y |
sub eax, d_x |
mov [a],eax ;a=2*d_y-d_x |
shl dword d_x,1 |
mov eax, d_y |
sub d_x,eax |
mov eax,inc_1 |
imul eax,PSZB |
mov [pp_inc_1],eax ;pp_inc_1 = inc_1*PSZB |
mov eax,inc_2 |
imul eax,PSZB |
mov [pp_inc_2],eax ;pp_inc_2 = inc_2*PSZB |
local .do_cycle |
local .els_0 |
local .end_0 |
align 4 |
.do_cycle: |
PUTPIXEL |
if INTERP_Z eq 1 |
mov eax,[zinc] |
add [z],eax |
end if |
cmp dword[a],0 |
jle .els_0 |
add edi,[pp_inc_1] |
if INTERP_Z eq 1 |
mov eax,inc_1 |
add [pz],eax |
end if |
mov eax,d_x |
sub [a],eax |
jmp .end_0 |
.els_0: |
add edi,[pp_inc_2] |
if INTERP_Z eq 1 |
mov eax,inc_2 |
add [pz],eax |
end if |
mov eax,d_y |
add [a],eax |
.end_0: |
dec dword[n] |
cmp dword[n],0 |
jge .do_cycle |
} |
; fin macro |
mov eax,[d_x] |
cmp eax,0 |
jne .els_0 |
cmp dword[d_y],0 |
jne .els_0 |
;if (d_x==0 && d_y==0) |
PUTPIXEL |
jmp .end_2 |
.els_0: |
cmp eax,0 |
jle .els_3 |
;if (d_x > 0) |
mov esi,[sx] |
inc esi |
cmp eax,[d_y] |
jl .els_2 |
;if (d_x >= d_y) |
DRAWLINE [d_x], [d_y], esi, 1 |
jmp .end_2 |
.els_2: |
DRAWLINE [d_y], [d_x], esi, [sx] |
jmp .end_2 |
.els_3: |
xor eax,eax |
sub eax,[d_x] |
mov [d_x],eax |
mov esi,[sx] |
dec esi |
cmp eax,[d_y] |
jl .els_4 |
;if (d_x >= d_y) |
DRAWLINE [d_x], [d_y], esi, -1 |
jmp .end_2 |
.els_4: |
DRAWLINE [d_y], [d_x], esi, [sx] |
.end_2: |
popad |
ret |
endp |
restore INTERP_Z |
; internal defines |
purge DRAWLINE |
purge PUTPIXEL |
purge RGBPIXEL |
/programs/develop/libraries/TinyGL/asm_fork/zline_r.inc |
---|
0,0 → 1,257 |
;PUTPIXEL -> RGBPIXEL |
locals |
n dd ? |
d_x dd ? |
d_y dd ? |
sx dd ? ;ширина буфера в пикселях |
pp_inc_1 dd ? |
pp_inc_2 dd ? |
a dd ? ;register int |
r dd ? ;register unsigned int |
g dd ? |
b dd ? |
rinc dd ? ;register unsigned int |
ginc dd ? |
binc dd ? |
if INTERP_Z eq 1 |
pz dd ? ;register unsigned short * |
zinc dd ? |
z dd ? ;register int |
zz dd ? |
end if |
endl |
pushad |
mov eax,[p1] |
mov ebx,[p2] |
mov ecx,[ebx+offs_zbup_y] |
cmp [eax+offs_zbup_y], ecx ;if (p1.y > p2.y) |
jg @f |
jl .end_0 ;if (p1.y != p2.y) |
mov ecx,[ebx+offs_zbup_x] |
cmp [eax+offs_zbup_x], ecx ;if (p1.x > p2.x) |
jle .end_0 ;if (p1.x <= p2.x) |
@@: ;if (p1.y > p2.y || (p1.y == p2.y && p1.x > p2.x)) |
mov [p1],ebx |
mov [p2],eax |
.end_0: |
mov eax,[zb] |
mov edx,[eax+offs_zbuf_xsize] |
mov [sx],edx |
mov ecx,[p1] |
mov edi,[eax+offs_zbuf_linesize] |
imul edi,[ecx+offs_zbup_y] |
mov edx,[ecx+offs_zbup_x] |
imul edx,PSZB |
add edi,edx |
add edi,[eax+offs_zbuf_pbuf] ;edi = (zb.pbuf + zb.linesize*p1.y + p1.x*PSZB) |
if INTERP_Z eq 1 |
mov edx,[ecx+offs_zbup_y] |
imul edx,[sx] |
add edx,[ecx+offs_zbup_x] |
add edx,[eax+offs_zbuf_zbuf] |
mov [pz],edx ;pz = zb.zbuf + (p1.y*sx + p1.x) |
mov edx,[ecx+offs_zbup_z] |
mov [z],edx ;z = p1.z |
end if |
mov ebx,[p2] |
mov eax,[ebx+offs_zbup_x] |
sub eax,[ecx+offs_zbup_x] |
mov [d_x],eax ;d_x = p2.x - p1.x |
mov eax,[ebx+offs_zbup_y] |
sub eax,[ecx+offs_zbup_y] |
mov [d_y],eax ;d_y = p2.y - p1.y |
mov eax,[ecx+offs_zbup_r] |
shl eax,8 |
mov [r],eax ;r = p1.r << 8 |
mov eax,[ecx+offs_zbup_g] |
shl eax,8 |
mov [g],eax ;g = p1.g << 8 |
mov eax,[ecx+offs_zbup_b] |
shl eax,8 |
mov [b],eax ;b = p1.b << 8 |
macro RGBPIXEL |
{ |
if TGL_FEATURE_RENDER_BITS eq 24 |
mov eax,[r] |
shr eax,16 |
mov byte[edi],al |
mov eax,[g] |
shr eax,16 |
mov byte[edi+1],al |
mov eax,[b] |
shr eax,16 |
mov byte[edi+2],al |
;;; else |
;*pp = RGB_TO_PIXEL(r >> 8,g >> 8,b >> 8) |
end if |
} |
macro PUTPIXEL |
{ |
if INTERP_Z eq 1 |
local .end_0 |
mov eax,[z] |
shr eax, ZB_POINT_Z_FRAC_BITS |
mov [zz],eax |
cmp eax,[pz] |
jl .end_0 |
RGBPIXEL |
mov eax,dword[zz] |
mov [pz],eax |
.end_0: |
else ; INTERP_Z |
RGBPIXEL |
end if ; INTERP_Z |
} |
macro DRAWLINE d_x,d_y,inc_1,inc_2 |
{ |
mov eax,d_x |
mov [n],eax |
mov ebx,[p1] |
mov ecx,[p2] |
if INTERP_Z eq 1 |
mov eax,[ecx+offs_zbup_z] |
sub eax,[ebx+offs_zbup_z] |
xor edx,edx |
div dword[n] |
mov [zinc],eax ;zinc=(p2.z-p1.z)/n |
end if |
;ebx=&p1, ecx=&p2 |
mov eax,[ecx+offs_zbup_r] |
sub eax,[ebx+offs_zbup_r] |
shl eax,8 |
xor edx,edx |
div dword[n] |
mov [rinc],eax ;rinc=((p2.r-p1.r)<<8)/n |
mov eax,[ecx+offs_zbup_g] |
sub eax,[ebx+offs_zbup_g] |
shl eax,8 |
xor edx,edx |
div dword[n] |
mov [ginc],eax ;ginc=((p2.g-p1.g)<<8)/n |
mov eax,[ecx+offs_zbup_b] |
sub eax,[ebx+offs_zbup_b] |
shl eax,8 |
xor edx,edx |
div dword[n] |
mov [binc],eax ;binc=((p2.b-p1.b)<<8)/n |
shl dword d_y,1 |
mov eax, d_y |
sub eax, d_x |
mov [a],eax ;a=2*d_y-d_x |
shl dword d_x,1 |
mov eax, d_y |
sub d_x,eax |
mov eax,inc_1 |
imul eax,PSZB |
mov [pp_inc_1],eax ;pp_inc_1 = inc_1*PSZB |
mov eax,inc_2 |
imul eax,PSZB |
mov [pp_inc_2],eax ;pp_inc_2 = inc_2*PSZB |
local .do_cycle |
local .els_0 |
local .end_0 |
align 4 |
.do_cycle: |
PUTPIXEL |
if INTERP_Z eq 1 |
mov eax,[zinc] |
add [z],eax |
end if |
mov eax,[rinc] |
add [r],eax |
mov eax,[ginc] |
add [g],eax |
mov eax,[binc] |
add [b],eax |
cmp dword[a],0 |
jle .els_0 |
add edi,[pp_inc_1] |
if INTERP_Z eq 1 |
mov eax,inc_1 |
add [pz],eax |
end if |
mov eax,d_x |
sub [a],eax |
jmp .end_0 |
.els_0: |
add edi,[pp_inc_2] |
if INTERP_Z eq 1 |
mov eax,inc_2 |
add [pz],eax |
end if |
mov eax,d_y |
add [a],eax |
.end_0: |
dec dword[n] |
cmp dword[n],0 |
jge .do_cycle |
} |
; fin macro |
mov eax,[d_x] |
cmp eax,0 |
jne .els_0 |
cmp dword[d_y],0 |
jne .els_0 |
;if (d_x==0 && d_y==0) |
PUTPIXEL |
jmp .end_2 |
.els_0: |
cmp eax,0 |
jle .els_3 |
;if (d_x > 0) |
mov esi,[sx] |
inc esi |
cmp eax,[d_y] |
jl .els_2 |
;if (d_x >= d_y) |
DRAWLINE [d_x], [d_y], esi, 1 |
jmp .end_2 |
.els_2: |
DRAWLINE [d_y], [d_x], esi, [sx] |
jmp .end_2 |
.els_3: |
xor eax,eax |
sub eax,[d_x] |
mov [d_x],eax |
mov esi,[sx] |
dec esi |
cmp eax,[d_y] |
jl .els_4 |
;if (d_x >= d_y) |
DRAWLINE [d_x], [d_y], esi, -1 |
jmp .end_2 |
.els_4: |
DRAWLINE [d_y], [d_x], esi, [sx] |
.end_2: |
popad |
ret |
endp |
restore INTERP_Z |
; internal defines |
purge DRAWLINE |
purge PUTPIXEL |
purge RGBPIXEL |
/programs/develop/libraries/TinyGL/asm_fork/zmath.asm |
---|
0,0 → 1,428 |
; Some simple mathematical functions. Don't look for some logic in |
; the function names :-) |
; ******* Gestion des matrices 4x4 ****** |
align 4 |
proc gl_M4_Id uses eax ecx edi, a:dword |
mov edi,[a] |
add edi,4 |
mov ecx,14 |
mov eax,0.0 |
rep stosd |
mov eax,1.0 |
stosd |
mov edi,[a] |
stosd |
add edi,16 |
stosd |
add edi,16 |
stosd |
ret |
endp |
align 4 |
proc gl_M4_IsId uses ebx ecx, a:dword |
mov eax,[a] |
xor ebx,ebx |
xor ecx,ecx |
.cycle_01: |
fld dword[eax] |
cmp ecx,ebx |
je .once |
ftst ;ñðàâíåíèå ñ 0.0 |
fstsw ax |
sahf |
je @f |
jmp .not_1 ;åñëè äèàãîíàëüíûå ÷èñëà íå ðàâíû 0.0 ìàòðèöà íå åäèíè÷íàÿ |
.once: |
fld1 |
fcomp st1 ;ñðàâíåíèå ñ 1.0 |
fstsw ax |
test ah,0x40 |
je .not_1 ;åñëè íå ðàâíî 1.0 ìàòðèöà íå åäèíè÷íàÿ |
@@: |
add eax,4 |
inc ebx |
btr ebx,2 |
jnc .cycle_01 |
inc ecx |
bt ecx,2 ;ïðîâåðÿåì ðàâåíñòâî ecx==4 |
jnc .cycle_01 |
mov eax,1 |
jmp @f |
.not_1: |
xor eax,eax |
@@: |
ret |
endp |
align 4 |
proc gl_M4_Mul, c:dword,a:dword,b:dword |
pushad |
mov edx,[c] |
xor eax,eax |
.cycle_0: ;i |
xor ebx,ebx |
.cycle_1: ;j |
finit |
fldz ;sum=0 |
xor ecx,ecx |
M4_reg edi,[a],eax,0 |
.cycle_2: ;k |
fld dword[edi] |
add edi,4 |
M4_reg esi,[b],ecx,ebx |
fmul dword[esi] |
fadd st0,st1 ;sum += a[i][k] * b[k][j] |
inc ecx |
cmp ecx,4 |
jl .cycle_2 |
fstp dword[edx] ;c[i][j] = sum |
add edx,4 |
inc ebx |
cmp ebx,4 |
jl .cycle_1 |
inc eax |
cmp eax,4 |
jl .cycle_0 |
finit |
if DEBUG ;gl_M4_Mul |
stdcall dbg_print,f_m4m,txt_nl |
stdcall gl_print_matrix,[c],4 |
stdcall dbg_print,txt_sp,txt_nl |
end if |
popad |
ret |
endp |
; c=c*a |
align 4 |
proc gl_M4_MulLeft, c:dword,b:dword |
locals |
i dd ? |
a M4 |
endl |
pushad |
mov ecx,16 |
mov esi,[c] |
mov edi,ebp |
sub edi,sizeof.M4 |
rep movsd ;êîïèðîâàíèå ìàòðèö [a]=[c] |
mov edx,[c] |
mov dword[i],0 |
.cycle_0: ;i |
xor ebx,ebx |
.cycle_1: ;j |
finit |
fldz ;sum=0 |
xor ecx,ecx |
mov eax,ebp |
sub eax,sizeof.M4 |
M4_reg edi,eax,dword[i],0 |
.cycle_2: ;k |
fld dword[edi] |
add edi,4 |
M4_reg esi,[b],ecx,ebx |
fmul dword[esi] |
fadd st0,st1 ;sum += a[i][k] * b[k][j] |
inc ecx |
add eax,4 |
cmp ecx,4 |
jl .cycle_2 |
fstp dword[edx] ;c[i][j] = sum |
add edx,4 |
inc ebx |
cmp ebx,4 |
jl .cycle_1 |
inc dword[i] |
cmp dword[i],4 |
jl .cycle_0 |
finit |
if DEBUG ;gl_M4_MulLeft |
stdcall dbg_print,f_m4ml,txt_nl |
stdcall gl_print_matrix,[c],4 |
stdcall dbg_print,txt_sp,txt_nl |
end if |
popad |
ret |
endp |
align 4 |
proc gl_M4_Move uses ecx edi esi, a:dword,b:dword |
mov edi,[a] |
mov esi,[b] |
mov ecx,sizeof.M4/4 |
rep movsd |
ret |
endp |
align 4 |
proc gl_MoveV3 uses edi esi, a:dword,b:dword |
mov edi,[a] |
mov esi,[b] |
movsd |
movsd |
movsd |
ret |
endp |
;void gl_MulM4V3(V3 *a,M4 *b,V3 *c) |
;{ |
; a->X=b->m[0][0]*c->X+b->m[0][1]*c->Y+b->m[0][2]*c->Z+b->m[0][3]; |
; a->Y=b->m[1][0]*c->X+b->m[1][1]*c->Y+b->m[1][2]*c->Z+b->m[1][3]; |
; a->Z=b->m[2][0]*c->X+b->m[2][1]*c->Y+b->m[2][2]*c->Z+b->m[2][3]; |
;} |
;void gl_MulM3V3(V3 *a,M4 *b,V3 *c) |
;{ |
; a->X=b->m[0][0]*c->X+b->m[0][1]*c->Y+b->m[0][2]*c->Z; |
; a->Y=b->m[1][0]*c->X+b->m[1][1]*c->Y+b->m[1][2]*c->Z; |
; a->Z=b->m[2][0]*c->X+b->m[2][1]*c->Y+b->m[2][2]*c->Z; |
;} |
;void gl_M4_MulV4(V4 *a,M4 *b,V4 *c) |
;{ |
; a->X=b->m[0][0]*c->X+b->m[0][1]*c->Y+b->m[0][2]*c->Z+b->m[0][3]*c->W; |
; a->Y=b->m[1][0]*c->X+b->m[1][1]*c->Y+b->m[1][2]*c->Z+b->m[1][3]*c->W; |
; a->Z=b->m[2][0]*c->X+b->m[2][1]*c->Y+b->m[2][2]*c->Z+b->m[2][3]*c->W; |
; a->W=b->m[3][0]*c->X+b->m[3][1]*c->Y+b->m[3][2]*c->Z+b->m[3][3]*c->W; |
;} |
; transposition of a 4x4 matrix |
align 4 |
proc gl_M4_Transpose uses eax ecx edx, a:dword, b:dword |
mov eax,[a] |
mov ecx,[b] |
mov edx,[ecx] |
mov [eax],edx |
mov edx,[ecx+0x10] |
mov [eax+0x4],edx |
mov edx,[ecx+0x20] |
mov [eax+0x8],edx |
mov edx,[ecx+0x30] |
mov [eax+0x0c],edx |
mov edx,[ecx+0x4] |
mov [eax+0x10],edx |
mov edx,[ecx+0x14] |
mov [eax+0x14],edx |
mov edx,[ecx+0x24] |
mov [eax+0x18],edx |
mov edx,[ecx+0x34] |
mov [eax+0x1c],edx |
mov edx,[ecx+0x8] |
mov [eax+0x20],edx |
mov edx,[ecx+0x18] |
mov [eax+0x24],edx |
mov edx,[ecx+0x28] |
mov [eax+0x28],edx |
mov edx,[ecx+0x38] |
mov [eax+0x2c],edx |
mov edx,[ecx+0x0c] |
mov [eax+0x30],edx |
mov edx,[ecx+0x1c] |
mov [eax+0x34],edx |
mov edx,[ecx+0x2c] |
mov [eax+0x38],edx |
mov edx,[ecx+0x3c] |
mov [eax+0x3c],edx |
ret |
endp |
;/* inversion of an orthogonal matrix of type Y=M.X+P */ |
;void gl_M4_InvOrtho(M4 *a,M4 b) |
;{ |
; int i,j; |
; float s; |
; for(i=0;i<3;i++) |
; for(j=0;j<3;j++) a->m[i][j]=b.m[j][i]; |
; a->m[3][0]=0.0; a->m[3][1]=0.0; a->m[3][2]=0.0; a->m[3][3]=1.0; |
; for(i=0;i<3;i++) { |
; s=0; |
; for(j=0;j<3;j++) s-=b.m[j][i]*b.m[j][3]; |
; a->m[i][3]=s; |
; } |
;} |
;/* Inversion of a general nxn matrix. |
; Note : m is destroyed */ |
align 4 |
proc Matrix_Inv uses ecx, r:dword, m:dword, n:dword ;(float *r,float *m,int n) |
; int i,j,k,l; |
; float max,tmp,t; |
; /* identitée dans r */ |
; for(i=0;i<n*n;i++) r[i]=0; |
; for(i=0;i<n;i++) r[i*n+i]=1; |
; for(j=0;j<n;j++) { |
; /* recherche du nombre de plus grand module sur la colonne j */ |
; max=m[j*n+j]; |
; k=j; |
; for(i=j+1;i<n;i++) |
; if (fabs(m[i*n+j])>fabs(max)) { |
; k=i; |
; max=m[i*n+j]; |
; } |
; /* non intersible matrix */ |
; if (max==0) return 1; |
; /* permutation des lignes j et k */ |
; if (k!=j) { |
; for(i=0;i<n;i++) { |
; tmp=m[j*n+i]; |
; m[j*n+i]=m[k*n+i]; |
; m[k*n+i]=tmp; |
; |
; tmp=r[j*n+i]; |
; r[j*n+i]=r[k*n+i]; |
; r[k*n+i]=tmp; |
; } |
; } |
; /* multiplication de la ligne j par 1/max */ |
; max=1/max; |
; for(i=0;i<n;i++) { |
; m[j*n+i]*=max; |
; r[j*n+i]*=max; |
; } |
; for(l=0;l<n;l++) if (l!=j) { |
; t=m[l*n+j]; |
; for(i=0;i<n;i++) { |
; m[l*n+i]-=m[j*n+i]*t; |
; r[l*n+i]-=r[j*n+i]*t; |
; } |
; } |
; } |
; return 0; |
ret |
endp |
; inversion of a 4x4 matrix |
align 4 |
proc gl_M4_Inv uses eax ecx edi esi, a:dword, b:dword |
locals |
tmp M4 |
endl |
mov esi,[b] |
mov edi,ebp |
sub edi,sizeof.M4 ;edi = &tmp |
mov ecx,16 |
rep movsd |
sub edi,sizeof.M4 ;edi = &tmp |
stdcall Matrix_Inv,[a],edi,4 ;ïîðòèò eax ïîòîìó â uses åñòü eax |
ret |
endp |
align 4 |
proc gl_M4_Rotate uses eax ecx, a:dword,t:dword,u:dword |
locals |
s dd ? ;float |
c dd ? ;float |
v dd ? ;int |
w dd ? ;int |
endl |
mov eax,[u] |
inc eax |
mov dword [v],eax |
cmp dword [v],2 |
jle @f |
mov dword [v],0 |
@@: |
mov eax,[v] |
inc eax |
mov dword [w],eax |
cmp dword [w],2 |
jle @f |
mov dword [w],0 |
@@: |
fld dword [t] |
fsin |
fstp dword [s] |
fld dword [t] |
fcos |
fstp dword [c] |
stdcall gl_M4_Id,[a] |
M4_reg ecx,[a],[v],[v] |
mov eax,[c] |
mov [ecx],eax |
M4_reg ecx,[a],[v],[w] |
fld dword [s] |
fchs |
fstp dword [ecx] |
M4_reg ecx,[a],[w],[v] |
mov eax,[s] |
mov [ecx],eax |
M4_reg ecx,[a],[w],[w] |
mov eax,[c] |
mov [ecx],eax |
ret |
endp |
; inverse of a 3x3 matrix |
;void gl_M3_Inv(M3 *a,M3 *m) |
;{ |
; float det; |
; det = m->m[0][0]*m->m[1][1]*m->m[2][2]-m->m[0][0]*m->m[1][2]*m->m[2][1]- |
; m->m[1][0]*m->m[0][1]*m->m[2][2]+m->m[1][0]*m->m[0][2]*m->m[2][1]+ |
; m->m[2][0]*m->m[0][1]*m->m[1][2]-m->m[2][0]*m->m[0][2]*m->m[1][1]; |
; a->m[0][0] = (m->m[1][1]*m->m[2][2]-m->m[1][2]*m->m[2][1])/det; |
; a->m[0][1] = -(m->m[0][1]*m->m[2][2]-m->m[0][2]*m->m[2][1])/det; |
; a->m[0][2] = -(-m->m[0][1]*m->m[1][2]+m->m[0][2]*m->m[1][1])/det; |
; a->m[1][0] = -(m->m[1][0]*m->m[2][2]-m->m[1][2]*m->m[2][0])/det; |
; a->m[1][1] = (m->m[0][0]*m->m[2][2]-m->m[0][2]*m->m[2][0])/det; |
; a->m[1][2] = -(m->m[0][0]*m->m[1][2]-m->m[0][2]*m->m[1][0])/det; |
; a->m[2][0] = (m->m[1][0]*m->m[2][1]-m->m[1][1]*m->m[2][0])/det; |
; a->m[2][1] = -(m->m[0][0]*m->m[2][1]-m->m[0][1]*m->m[2][0])/det; |
; a->m[2][2] = (m->m[0][0]*m->m[1][1]-m->m[0][1]*m->m[1][0])/det; |
;} |
; vector arithmetic |
;int gl_V3_Norm(V3 *a) |
;{ |
; float n; |
; n=sqrt(a->X*a->X+a->Y*a->Y+a->Z*a->Z); |
; if (n==0) return 1; |
; a->X/=n; |
; a->Y/=n; |
; a->Z/=n; |
; return 0; |
;} |
macro gl_V3_New p_mem, x, y, z |
{ |
mov dword[p_mem],x |
mov dword[p_mem+4],y |
mov dword[p_mem+8],z |
} |
macro gl_V4_New p_mem, x, y, z, w |
{ |
mov dword[p_mem],x |
mov dword[p_mem+4],y |
mov dword[p_mem+8],z |
mov dword[p_mem+12],w |
} |
/programs/develop/libraries/TinyGL/asm_fork/zmath.inc |
---|
0,0 → 1,42 |
; Matrix & Vertex |
align 4 |
an180f dd 180.0 ;константа для вычисления углов |
struct M4 |
m rd 4*4 ;float[4][4] |
ends |
; макрос облегчающий доступ к элементам матрицы M4 |
; для доступа к элементам 1-й индекс множится на 16, 2-й на 4: |
; m[i1*16][i2*4], потом все пишется в регистр reg: |
; reg <-- m[i1][i2] |
macro M4_reg reg,m,i1,i2 |
{ |
mov reg,i1 ;1-й индекс |
if i2 eq 0 |
shl reg,4 |
else |
shl reg,2 |
add reg,i2 ;2-й индекс |
shl reg,2 |
end if |
add reg,m ;указатель на начало матрицы |
} |
struct M3 |
m rd 3*3 ;float[3][3] |
ends |
struct M34 |
m rd 3*4 ;float[3][4] |
ends |
struct V3 |
v rd 3 ;float[3] |
ends |
struct V4 |
v rd 4 ;float[4] |
ends |
/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm |
---|
0,0 → 1,344 |
INTERP_Z equ 1 |
macro DRAW_INIT |
{ |
if TGL_FEATURE_RENDER_BITS eq 24 |
mov ecx,[p2] |
mov eax,[ecx+offs_zbup_r] |
shr eax,8 |
mov [colorR],eax ;colorR=p2.r>>8 |
mov eax,[ecx+offs_zbup_g] |
shr eax,8 |
mov [colorG],eax ;colorG=p2.g>>8 |
mov eax,[ecx+offs_zbup_b] |
shr eax,8 |
mov [colorB],eax ;colorB=p2.b>>8 |
else |
; color=RGB_TO_PIXEL(p2->r,p2->g,p2->b); |
end if |
} |
macro PUT_PIXEL _a |
{ |
; zz=z >> ZB_POINT_Z_FRAC_BITS; |
; if (zz >= pz[_a]) { |
if TGL_FEATURE_RENDER_BITS eq 24 |
; pp[3 * _a]=colorR; |
; pp[3 * _a + 1]=colorG; |
; pp[3 * _a + 2]=colorB; |
; pz[_a]=zz; |
else |
; pp[_a]=color; |
; pz[_a]=zz; |
end if |
; } |
; z+=dzdx; |
} |
align 4 |
proc ZB_fillTriangleFlat, zb:dword, p0:dword, p1:dword, p2:dword |
locals |
if TGL_FEATURE_RENDER_BITS eq 24 |
colorR db ? |
colorG db ? |
colorB db ? ;unsigned char |
else |
color dd ? ;int |
end if |
include 'ztriangle.inc' |
ret |
endp |
; |
; Smooth filled triangle. |
; The code below is very tricky :) |
; |
INTERP_Z equ 1 |
INTERP_RGB equ 1 |
macro DRAW_INIT |
{ |
if TGL_FEATURE_RENDER_BITS eq 16 |
; _drgbdx=((drdx / (1<<6)) << 22) & 0xFFC00000; |
; _drgbdx|=(dgdx / (1<<5)) & 0x000007FF; |
; _drgbdx|=((dbdx / (1<<7)) << 12) & 0x001FF000; |
end if |
} |
macro PUT_PIXEL _a |
{ |
; zz=z >> ZB_POINT_Z_FRAC_BITS; |
if TGL_FEATURE_RENDER_BITS eq 24 |
; if (zz >= pz[_a]) { |
; pp[3 * _a]=or1 >> 8; |
; pp[3 * _a + 1]=og1 >> 8; |
; pp[3 * _a + 2]=ob1 >> 8; |
; pz[_a]=zz; |
; } |
; z+=dzdx; |
; og1+=dgdx; |
; or1+=drdx; |
; ob1+=dbdx; |
elseif TGL_FEATURE_RENDER_BITS eq 16 |
; if (zz >= pz[_a]) { |
; tmp=rgb & 0xF81F07E0; |
; pp[_a]=tmp | (tmp >> 16); |
; pz[_a]=zz; |
; } |
; z+=dzdx; |
; rgb=(rgb+drgbdx) & ( ~ 0x00200800); |
else |
; if (zz >= pz[_a]) { |
; pp[_a] = RGB_TO_PIXEL(or1, og1, ob1); |
; pz[_a]=zz; |
; } |
; z+=dzdx; |
; og1+=dgdx; |
; or1+=drdx; |
; ob1+=dbdx; |
end if |
} |
macro DRAW_LINE |
{ |
if TGL_FEATURE_RENDER_BITS eq 16 |
; register unsigned short *pz; |
; register PIXEL *pp; |
; register unsigned int tmp,z,zz,rgb,drgbdx; |
; register int n; |
; n=(x2 >> 16) - x1; |
; pp=pp1+x1; |
; pz=pz1+x1; |
; z=z1; |
; rgb=(r1 << 16) & 0xFFC00000; |
; rgb|=(g1 >> 5) & 0x000007FF; |
; rgb|=(b1 << 5) & 0x001FF000; |
; drgbdx=_drgbdx; |
; while (n>=3) { |
; PUT_PIXEL(0); |
; PUT_PIXEL(1); |
; PUT_PIXEL(2); |
; PUT_PIXEL(3); |
; pz+=4; |
; pp+=4; |
; n-=4; |
; } |
; while (n>=0) { |
; PUT_PIXEL(0); |
; pz+=1; |
; pp+=1; |
; n-=1; |
; } |
end if |
if TGL_FEATURE_RENDER_BITS eq 24 |
; register unsigned short *pz; |
; register PIXEL *pp; |
; register unsigned int s,t,z,zz; |
; register int n,dsdx,dtdx; |
; float sz,tz,fz,zinv; |
; n=(x2>>16)-x1; |
; fz=(float)z1; |
; zinv=1.0 / fz; |
; pp=(pp1 + x1 * PSZB); |
; pz=pz1+x1; |
; z=z1; |
; sz=sz1; |
; tz=tz1; |
; while (n>=(NB_INTERP-1)) { |
; { |
; float ss,tt; |
; ss=(sz * zinv); |
; tt=(tz * zinv); |
; s=(int) ss; |
; t=(int) tt; |
; dsdx= (int)( (dszdx - ss*fdzdx)*zinv ); |
; dtdx= (int)( (dtzdx - tt*fdzdx)*zinv ); |
; fz+=fndzdx; |
; zinv=1.0 / fz; |
; } |
; PUT_PIXEL(0); |
; PUT_PIXEL(1); |
; PUT_PIXEL(2); |
; PUT_PIXEL(3); |
; PUT_PIXEL(4); |
; PUT_PIXEL(5); |
; PUT_PIXEL(6); |
; PUT_PIXEL(7); |
; pz+=NB_INTERP; |
; pp=(pp + NB_INTERP * PSZB); |
; n-=NB_INTERP; |
; sz+=ndszdx; |
; tz+=ndtzdx; |
; } |
; { |
; float ss,tt; |
; ss=(sz * zinv); |
; tt=(tz * zinv); |
; s=(int) ss; |
; t=(int) tt; |
; dsdx= (int)( (dszdx - ss*fdzdx)*zinv ); |
; dtdx= (int)( (dtzdx - tt*fdzdx)*zinv ); |
; } |
; while (n>=0) { |
; PUT_PIXEL(0); |
; pz+=1; |
; pp=(PIXEL *)((char *)pp + PSZB); |
; n-=1; |
; } |
end if |
} |
align 4 |
proc ZB_fillTriangleSmooth, zb:dword, p0:dword, p1:dword, p2:dword |
locals |
if TGL_FEATURE_RENDER_BITS eq 16 |
_drgbdx dd ? ;int |
end if |
include 'ztriangle.inc' |
ret |
endp |
align 4 |
proc ZB_setTexture uses eax ebx, zb:dword, texture:dword |
mov eax,[zb] |
mov ebx,[texture] |
mov dword[eax+offs_zbuf_current_texture],ebx |
ret |
endp |
INTERP_Z equ 1 |
INTERP_ST equ 1 |
macro DRAW_INIT |
{ |
; texture=zb->current_texture; |
} |
macro PUT_PIXEL _a |
{ |
; zz=z >> ZB_POINT_Z_FRAC_BITS; |
if TGL_FEATURE_RENDER_BITS eq 24 |
; unsigned char *ptr; |
; if (zz >= pz[_a]) { |
; ptr = texture + (((t & 0x3FC00000) | s) >> 14) * 3; |
; pp[3 * _a]= ptr[0]; |
; pp[3 * _a + 1]= ptr[1]; |
; pp[3 * _a + 2]= ptr[2]; |
; pz[_a]=zz; |
; } |
else |
; if (zz >= pz[_a]) { |
; pp[_a]=texture[((t & 0x3FC00000) | s) >> 14]; |
; pz[_a]=zz; |
; } |
end if |
; z+=dzdx; |
; s+=dsdx; |
; t+=dtdx; |
} |
align 4 |
proc ZB_fillTriangleMapping, zb:dword, p0:dword, p1:dword, p2:dword |
locals |
texture dd ? ;PIXEL* |
include 'ztriangle.inc' |
ret |
endp |
; |
; Texture mapping with perspective correction. |
; We use the gradient method to make less divisions. |
; TODO: pipeline the division |
; |
if 1 |
INTERP_Z equ 1 |
INTERP_STZ equ 1 |
NB_INTERP equ 8 |
macro DRAW_INIT |
{ |
; texture=zb->current_texture; |
; fdzdx=(float)dzdx; |
; fndzdx=NB_INTERP * fdzdx; |
; ndszdx=NB_INTERP * dszdx; |
; ndtzdx=NB_INTERP * dtzdx; |
} |
macro PUT_PIXEL _a |
{ |
; zz=z >> ZB_POINT_Z_FRAC_BITS; |
if TGL_FEATURE_RENDER_BITS eq 24 |
; unsigned char *ptr; |
; if (zz >= pz[_a]) { |
; ptr = texture + (((t & 0x3FC00000) | (s & 0x003FC000)) >> 14) * 3; |
; pp[3 * _a]= ptr[0]; |
; pp[3 * _a + 1]= ptr[1]; |
; pp[3 * _a + 2]= ptr[2]; |
; pz[_a]=zz; |
; } |
else |
; if (zz >= pz[_a]) { |
; pp[_a]=*(PIXEL *)((char *)texture+ |
; (((t & 0x3FC00000) | (s & 0x003FC000)) >> (17 - PSZSH))); |
; pz[_a]=zz; |
; } |
end if |
; z+=dzdx; |
; s+=dsdx; |
; t+=dtdx; |
} |
align 4 |
proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
locals |
; PIXEL *texture; |
; float fdzdx,fndzdx,ndszdx,ndtzdx; |
include 'ztriangle.inc' |
ret |
endp |
end if |
if 0 |
; slow but exact version (only there for reference, incorrect for 24 |
; bits) |
INTERP_Z equ 1 |
INTERP_STZ equ 1 |
macro DRAW_INIT |
{ |
; texture=zb->current_texture; |
} |
macro PUT_PIXEL _a |
{ |
; float zinv; |
; int s,t; |
; zz=z >> ZB_POINT_Z_FRAC_BITS; |
; if (zz >= pz[_a]) { |
; zinv= 1.0 / (float) z; |
; s= (int) (sz * zinv); |
; t= (int) (tz * zinv); |
; pp[_a]=texture[((t & 0x3FC00000) | s) >> 14]; |
; pz[_a]=zz; |
; } |
; z+=dzdx; |
; sz+=dszdx; |
; tz+=dtzdx; |
} |
align 4 |
proc ZB_fillTriangleMappingPerspective, zb:dword, p0:dword, p1:dword, p2:dword |
locals |
texture dd ? ;PIXEL* |
include 'ztriangle.inc' |
ret |
endp |
end if |
/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc |
---|
0,0 → 1,415 |
; |
; We draw a triangle with various interpolations |
; |
t dd ? ;ZBufferPoint* |
pr1 dd ? ;ZBufferPoint* |
pr2 dd ? ;ZBufferPoint* |
l1 dd ? ;ZBufferPoint* |
l2 dd ? ;ZBufferPoint* |
fdx1 dd ? |
fdx2 dd ? |
fdy1 dd ? |
fdy2 dd ? |
fz dd ? |
d1 dd ? |
d2 dd ? |
pz1 dd ? ;unsigned short* |
pp1 dd ? ;PIXEL* |
part dd ? |
update_left dd ? |
update_right dd ? |
nb_lines dd ? |
dx1 dd ? |
dy1 dd ? |
tmp dd ? |
dx2 dd ? |
dy2 dd ? |
error dd ? |
derror dd ? |
x1 dd ? |
dxdy_min dd ? |
dxdy_max dd ? |
; warning: x2 is multiplied by 2^16 |
x2 dd ? |
dx2dy2 dd ? |
if INTERP_Z eq 1 |
z1 dd ? |
dzdx dd ? |
dzdy dd ? |
dzdl_min dd ? |
dzdl_max dd ? |
end if |
if INTERP_RGB eq 1 |
r1 dd ? ;int |
drdx dd ? |
drdy dd ? |
drdl_min dd ? |
drdl_max dd ? |
g1 dd ? |
dgdx dd ? |
dgdy dd ? |
dgdl_min dd ? |
dgdl_max dd ? |
b1 dd ? |
dbdx dd ? |
dbdy dd ? |
dbdl_min dd ? |
dbdl_max dd ? |
end if |
if INTERP_ST eq 1 |
;s1 dd ? |
dsdx dd ? |
dsdy dd ? |
dsdl_min dd ? |
dsdl_max dd ? |
t1 dd ? |
dtdx dd ? |
dtdy dd ? |
dtdl_min dd ? |
dtdl_max dd ? |
end if |
if INTERP_STZ eq 1 |
sz1 dd ? |
dszdx dd ? |
dszdy dd ? |
dszdl_min dd ? |
dszdl_max dd ? |
tz1 dd ? |
dtzdx dd ? |
dtzdy dd ? |
dtzdl_min dd ? |
dtzdl_max dd ? |
end if |
endl |
; /* we sort the vertex with increasing y */ |
; if (p1->y < p0->y) { |
; t = p0; |
; p0 = p1; |
; p1 = t; |
; } |
; if (p2->y < p0->y) { |
; t = p2; |
; p2 = p1; |
; p1 = p0; |
; p0 = t; |
; } else if (p2->y < p1->y) { |
; t = p1; |
; p1 = p2; |
; p2 = t; |
; } |
; we compute dXdx and dXdy for all interpolated values |
; fdx1 = p1->x - p0->x; |
; fdy1 = p1->y - p0->y; |
; fdx2 = p2->x - p0->x; |
; fdy2 = p2->y - p0->y; |
; fz = fdx1 * fdy2 - fdx2 * fdy1; |
; if (fz == 0) |
; return; |
; fz = 1.0 / fz; |
; fdx1 *= fz; |
; fdy1 *= fz; |
; fdx2 *= fz; |
; fdy2 *= fz; |
if INTERP_Z eq 1 |
; d1 = p1->z - p0->z; |
; d2 = p2->z - p0->z; |
; dzdx = (int) (fdy2 * d1 - fdy1 * d2); |
; dzdy = (int) (fdx1 * d2 - fdx2 * d1); |
end if |
if INTERP_RGB eq 1 |
; d1 = p1->r - p0->r; |
; d2 = p2->r - p0->r; |
; drdx = (int) (fdy2 * d1 - fdy1 * d2); |
; drdy = (int) (fdx1 * d2 - fdx2 * d1); |
; d1 = p1->g - p0->g; |
; d2 = p2->g - p0->g; |
; dgdx = (int) (fdy2 * d1 - fdy1 * d2); |
; dgdy = (int) (fdx1 * d2 - fdx2 * d1); |
; d1 = p1->b - p0->b; |
; d2 = p2->b - p0->b; |
; dbdx = (int) (fdy2 * d1 - fdy1 * d2); |
; dbdy = (int) (fdx1 * d2 - fdx2 * d1); |
end if |
if INTERP_ST eq 1 |
; d1 = p1->s - p0->s; |
; d2 = p2->s - p0->s; |
; dsdx = (int) (fdy2 * d1 - fdy1 * d2); |
; dsdy = (int) (fdx1 * d2 - fdx2 * d1); |
; d1 = p1->t - p0->t; |
; d2 = p2->t - p0->t; |
; dtdx = (int) (fdy2 * d1 - fdy1 * d2); |
; dtdy = (int) (fdx1 * d2 - fdx2 * d1); |
end if |
if INTERP_STZ eq 1 |
; { |
; float zz; |
; zz=(float) p0->z; |
; p0->sz= (float) p0->s * zz; |
; p0->tz= (float) p0->t * zz; |
; zz=(float) p1->z; |
; p1->sz= (float) p1->s * zz; |
; p1->tz= (float) p1->t * zz; |
; zz=(float) p2->z; |
; p2->sz= (float) p2->s * zz; |
; p2->tz= (float) p2->t * zz; |
; d1 = p1->sz - p0->sz; |
; d2 = p2->sz - p0->sz; |
; dszdx = (fdy2 * d1 - fdy1 * d2); |
; dszdy = (fdx1 * d2 - fdx2 * d1); |
; d1 = p1->tz - p0->tz; |
; d2 = p2->tz - p0->tz; |
; dtzdx = (fdy2 * d1 - fdy1 * d2); |
; dtzdy = (fdx1 * d2 - fdx2 * d1); |
; } |
end if |
; screen coordinates |
; pp1 = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p0->y); |
; pz1 = zb->zbuf + p0->y * zb->xsize; |
DRAW_INIT |
; for(part=0;part<2;part++) { |
; if (part == 0) { |
; if (fz > 0) { |
; update_left=1; |
; update_right=1; |
; l1=p0; |
; l2=p2; |
; pr1=p0; |
; pr2=p1; |
; } else { |
; update_left=1; |
; update_right=1; |
; l1=p0; |
; l2=p1; |
; pr1=p0; |
; pr2=p2; |
; } |
; nb_lines = p1->y - p0->y; |
; } else { |
; /* second part */ |
; if (fz > 0) { |
; update_left=0; |
; update_right=1; |
; pr1=p1; |
; pr2=p2; |
; } else { |
; update_left=1; |
; update_right=0; |
; l1=p1; |
; l2=p2; |
; } |
; nb_lines = p2->y - p1->y + 1; |
; } |
; compute the values for the left edge |
; if (update_left) { |
; dy1 = l2->y - l1->y; |
; dx1 = l2->x - l1->x; |
; if (dy1 > 0) |
; tmp = (dx1 << 16) / dy1; |
; else |
; tmp = 0; |
; x1 = l1->x; |
; error = 0; |
; derror = tmp & 0x0000ffff; |
; dxdy_min = tmp >> 16; |
; dxdy_max = dxdy_min + 1; |
if INTERP_Z eq 1 |
; z1=l1->z; |
; dzdl_min=(dzdy + dzdx * dxdy_min); |
; dzdl_max=dzdl_min + dzdx; |
end if |
if INTERP_RGB eq 1 |
; r1=l1->r; |
; drdl_min=(drdy + drdx * dxdy_min); |
; drdl_max=drdl_min + drdx; |
; g1=l1->g; |
; dgdl_min=(dgdy + dgdx * dxdy_min); |
; dgdl_max=dgdl_min + dgdx; |
; b1=l1->b; |
; dbdl_min=(dbdy + dbdx * dxdy_min); |
; dbdl_max=dbdl_min + dbdx; |
end if |
if INTERP_ST eq 1 |
; s1=l1->s; |
; dsdl_min=(dsdy + dsdx * dxdy_min); |
; dsdl_max=dsdl_min + dsdx; |
; t1=l1->t; |
; dtdl_min=(dtdy + dtdx * dxdy_min); |
; dtdl_max=dtdl_min + dtdx; |
end if |
if INTERP_STZ eq 1 |
; sz1=l1->sz; |
; dszdl_min=(dszdy + dszdx * dxdy_min); |
; dszdl_max=dszdl_min + dszdx; |
; tz1=l1->tz; |
; dtzdl_min=(dtzdy + dtzdx * dxdy_min); |
; dtzdl_max=dtzdl_min + dtzdx; |
end if |
; } |
; /* compute values for the right edge */ |
; if (update_right) { |
; dx2 = (pr2->x - pr1->x); |
; dy2 = (pr2->y - pr1->y); |
; if (dy2>0) |
; dx2dy2 = ( dx2 << 16) / dy2; |
; else |
; dx2dy2 = 0; |
; x2 = pr1->x << 16; |
; } |
; /* we draw all the scan line of the part */ |
; while (nb_lines>0) { |
; nb_lines--; |
;#ifndef DRAW_LINE |
; /* generic draw line */ |
; { |
; register PIXEL *pp; |
; register int n; |
if INTERP_Z eq 1 |
; register unsigned short *pz; |
; register unsigned int z,zz; |
end if |
if INTERP_RGB eq 1 |
; register unsigned int or1,og1,ob1; |
end if |
if INTERP_ST eq 1 |
; register unsigned int s,t; |
end if |
if INTERP_STZ eq 1 |
; float sz,tz; |
end if |
; n=(x2 >> 16) - x1; |
; pp=(PIXEL *)((char *)pp1 + x1 * PSZB); |
if INTERP_Z eq 1 |
; pz=pz1+x1; |
; z=z1; |
end if |
if INTERP_RGB eq 1 |
; or1 = r1; |
; og1 = g1; |
; ob1 = b1; |
end if |
if INTERP_ST eq 1 |
; s=s1; |
; t=t1; |
end if |
if INTERP_STZ eq 1 |
; sz=sz1; |
; tz=tz1; |
end if |
; while (n>=3) { |
; PUT_PIXEL(0); |
; PUT_PIXEL(1); |
; PUT_PIXEL(2); |
; PUT_PIXEL(3); |
if INTERP_Z eq 1 |
; pz+=4; |
end if |
; pp=(PIXEL *)((char *)pp + 4 * PSZB); |
; n-=4; |
; } |
; while (n>=0) { |
; PUT_PIXEL(0); |
if INTERP_Z eq 1 |
; pz+=1; |
end if |
; pp=(PIXEL *)((char *)pp + PSZB); |
; n-=1; |
; } |
; } |
;#else |
; DRAW_LINE(); |
;#endif |
; |
; /* left edge */ |
; error+=derror; |
; if (error > 0) { |
; error-=0x10000; |
; x1+=dxdy_max; |
if INTERP_Z eq 1 |
; z1+=dzdl_max; |
end if |
if INTERP_RGB eq 1 |
; r1+=drdl_max; |
; g1+=dgdl_max; |
; b1+=dbdl_max; |
end if |
if INTERP_ST eq 1 |
; s1+=dsdl_max; |
; t1+=dtdl_max; |
end if |
if INTERP_STZ eq 1 |
; sz1+=dszdl_max; |
; tz1+=dtzdl_max; |
end if |
; } else { |
; x1+=dxdy_min; |
if INTERP_Z eq 1 |
; z1+=dzdl_min; |
end if |
if INTERP_RGB eq 1 |
; r1+=drdl_min; |
; g1+=dgdl_min; |
; b1+=dbdl_min; |
end if |
if INTERP_ST eq 1 |
; s1+=dsdl_min; |
; t1+=dtdl_min; |
end if |
if INTERP_STZ eq 1 |
; sz1+=dszdl_min; |
; tz1+=dtzdl_min; |
end if |
; } |
; |
; /* right edge */ |
; x2+=dx2dy2; |
; |
; /* screen coordinates */ |
; pp1=(PIXEL *)((char *)pp1 + zb->linesize); |
; pz1+=zb->xsize; |
; } |
; } |
;} |
restore INTERP_Z |
restore INTERP_RGB |
restore INTERP_ST |
restore INTERP_STZ |
purge DRAW_INIT |
purge DRAW_LINE |
purge PUT_PIXEL |
/programs/develop/libraries/TinyGL/asm_fork |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |