windows-nt/Source/XPSP1/NT/multimedia/opengl/client/glcltpt.c
2020-09-26 16:20:57 +08:00

954 lines
32 KiB
C

/*
** Copyright 1991-1993, Silicon Graphics, Inc.
** All Rights Reserved.
**
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
** the contents of this file may not be disclosed to third parties, copied or
** duplicated in any form, in whole or in part, without the prior written
** permission of Silicon Graphics, Inc.
**
** RESTRICTED RIGHTS LEGEND:
** Use, duplication or disclosure by the Government is subject to restrictions
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
** rights reserved under the Copyright Laws of the United States.
*/
/*
* AUTOMATICALLY UPDATED OR GENERATED BY SGI: DO NOT EDIT
* IF YOU MUST MODIFY THIS FILE, PLEASE CONTACT ptar@sgi.com 415-390-1483
*/
/* Client Side Procedure Table */
#include "precomp.h"
#pragma hdrstop
#include "glclt.h"
#ifdef GL_METAFILE
#include "metasup.h"
#endif
// There are now 2 tables!
// One table is used for RGBA mode and the other is for CI mode.
GLCLTPROCTABLE glCltRGBAProcTable = {
/* Number of function entries in the table */
sizeof(GLDISPATCHTABLE) / sizeof(PROC),
/* gl Entry points */
{
glcltNewList ,
glcltEndList ,
glcltCallList ,
glcltCallLists ,
glcltDeleteLists ,
glcltGenLists ,
glcltListBase ,
glcltBegin ,
glcltBitmap ,
glcltColor3b_InRGBA ,
glcltColor3bv_InRGBA ,
glcltColor3d_InRGBA ,
glcltColor3dv_InRGBA ,
glcltColor3f_InRGBA ,
glcltColor3fv_InRGBA ,
glcltColor3i_InRGBA ,
glcltColor3iv_InRGBA ,
glcltColor3s_InRGBA ,
glcltColor3sv_InRGBA ,
glcltColor3ub_InRGBA ,
glcltColor3ubv_InRGBA ,
glcltColor3ui_InRGBA ,
glcltColor3uiv_InRGBA ,
glcltColor3us_InRGBA ,
glcltColor3usv_InRGBA ,
glcltColor4b_InRGBA ,
glcltColor4bv_InRGBA ,
glcltColor4d_InRGBA ,
glcltColor4dv_InRGBA ,
glcltColor4f_InRGBA ,
glcltColor4fv_InRGBA ,
glcltColor4i_InRGBA ,
glcltColor4iv_InRGBA ,
glcltColor4s_InRGBA ,
glcltColor4sv_InRGBA ,
glcltColor4ub_InRGBA ,
glcltColor4ubv_InRGBA ,
glcltColor4ui_InRGBA ,
glcltColor4uiv_InRGBA ,
glcltColor4us_InRGBA ,
glcltColor4usv_InRGBA ,
glcltEdgeFlag ,
glcltEdgeFlagv ,
glcltEnd ,
glcltIndexd_InRGBA ,
glcltIndexdv_InRGBA ,
glcltIndexf_InRGBA ,
glcltIndexfv_InRGBA ,
glcltIndexi_InRGBA ,
glcltIndexiv_InRGBA ,
glcltIndexs_InRGBA ,
glcltIndexsv_InRGBA ,
glcltNormal3b ,
glcltNormal3bv ,
glcltNormal3d ,
glcltNormal3dv ,
glcltNormal3f ,
glcltNormal3fv ,
glcltNormal3i ,
glcltNormal3iv ,
glcltNormal3s ,
glcltNormal3sv ,
glcltRasterPos2d ,
glcltRasterPos2dv ,
glcltRasterPos2f ,
glcltRasterPos2fv ,
glcltRasterPos2i ,
glcltRasterPos2iv ,
glcltRasterPos2s ,
glcltRasterPos2sv ,
glcltRasterPos3d ,
glcltRasterPos3dv ,
glcltRasterPos3f ,
glcltRasterPos3fv ,
glcltRasterPos3i ,
glcltRasterPos3iv ,
glcltRasterPos3s ,
glcltRasterPos3sv ,
glcltRasterPos4d ,
glcltRasterPos4dv ,
glcltRasterPos4f ,
glcltRasterPos4fv ,
glcltRasterPos4i ,
glcltRasterPos4iv ,
glcltRasterPos4s ,
glcltRasterPos4sv ,
glcltRectd ,
glcltRectdv ,
glcltRectf ,
glcltRectfv ,
glcltRecti ,
glcltRectiv ,
glcltRects ,
glcltRectsv ,
glcltTexCoord1d ,
glcltTexCoord1dv ,
glcltTexCoord1f ,
glcltTexCoord1fv ,
glcltTexCoord1i ,
glcltTexCoord1iv ,
glcltTexCoord1s ,
glcltTexCoord1sv ,
glcltTexCoord2d ,
glcltTexCoord2dv ,
glcltTexCoord2f ,
glcltTexCoord2fv ,
glcltTexCoord2i ,
glcltTexCoord2iv ,
glcltTexCoord2s ,
glcltTexCoord2sv ,
glcltTexCoord3d ,
glcltTexCoord3dv ,
glcltTexCoord3f ,
glcltTexCoord3fv ,
glcltTexCoord3i ,
glcltTexCoord3iv ,
glcltTexCoord3s ,
glcltTexCoord3sv ,
glcltTexCoord4d ,
glcltTexCoord4dv ,
glcltTexCoord4f ,
glcltTexCoord4fv ,
glcltTexCoord4i ,
glcltTexCoord4iv ,
glcltTexCoord4s ,
glcltTexCoord4sv ,
glcltVertex2d ,
glcltVertex2dv ,
glcltVertex2f ,
glcltVertex2fv ,
glcltVertex2i ,
glcltVertex2iv ,
glcltVertex2s ,
glcltVertex2sv ,
glcltVertex3d ,
glcltVertex3dv ,
glcltVertex3f ,
glcltVertex3fv ,
glcltVertex3i ,
glcltVertex3iv ,
glcltVertex3s ,
glcltVertex3sv ,
glcltVertex4d ,
glcltVertex4dv ,
glcltVertex4f ,
glcltVertex4fv ,
glcltVertex4i ,
glcltVertex4iv ,
glcltVertex4s ,
glcltVertex4sv ,
glcltClipPlane ,
glcltColorMaterial ,
glcltCullFace ,
glcltFogf ,
glcltFogfv ,
glcltFogi ,
glcltFogiv ,
glcltFrontFace ,
glcltHint ,
glcltLightf ,
glcltLightfv ,
glcltLighti ,
glcltLightiv ,
glcltLightModelf ,
glcltLightModelfv ,
glcltLightModeli ,
glcltLightModeliv ,
glcltLineStipple ,
glcltLineWidth ,
glcltMaterialf ,
glcltMaterialfv ,
glcltMateriali ,
glcltMaterialiv ,
glcltPointSize ,
glcltPolygonMode ,
glcltPolygonStipple ,
glcltScissor ,
glcltShadeModel ,
glcltTexParameterf ,
glcltTexParameterfv ,
glcltTexParameteri ,
glcltTexParameteriv ,
glcltTexImage1D ,
glcltTexImage2D ,
glcltTexEnvf ,
glcltTexEnvfv ,
glcltTexEnvi ,
glcltTexEnviv ,
glcltTexGend ,
glcltTexGendv ,
glcltTexGenf ,
glcltTexGenfv ,
glcltTexGeni ,
glcltTexGeniv ,
glcltFeedbackBuffer ,
glcltSelectBuffer ,
glcltRenderMode ,
glcltInitNames ,
glcltLoadName ,
glcltPassThrough ,
glcltPopName ,
glcltPushName ,
glcltDrawBuffer ,
glcltClear ,
glcltClearAccum ,
glcltClearIndex ,
glcltClearColor ,
glcltClearStencil ,
glcltClearDepth ,
glcltStencilMask ,
glcltColorMask ,
glcltDepthMask ,
glcltIndexMask ,
glcltAccum ,
glcltDisable ,
glcltEnable ,
glcltFinish ,
glcltFlush ,
glcltPopAttrib ,
glcltPushAttrib ,
glcltMap1d ,
glcltMap1f ,
glcltMap2d ,
glcltMap2f ,
glcltMapGrid1d ,
glcltMapGrid1f ,
glcltMapGrid2d ,
glcltMapGrid2f ,
glcltEvalCoord1d ,
glcltEvalCoord1dv ,
glcltEvalCoord1f ,
glcltEvalCoord1fv ,
glcltEvalCoord2d ,
glcltEvalCoord2dv ,
glcltEvalCoord2f ,
glcltEvalCoord2fv ,
glcltEvalMesh1 ,
glcltEvalPoint1 ,
glcltEvalMesh2 ,
glcltEvalPoint2 ,
glcltAlphaFunc ,
glcltBlendFunc ,
glcltLogicOp ,
glcltStencilFunc ,
glcltStencilOp ,
glcltDepthFunc ,
glcltPixelZoom ,
glcltPixelTransferf ,
glcltPixelTransferi ,
glcltPixelStoref ,
glcltPixelStorei ,
glcltPixelMapfv ,
glcltPixelMapuiv ,
glcltPixelMapusv ,
glcltReadBuffer ,
glcltCopyPixels ,
glcltReadPixels ,
glcltDrawPixels ,
glcltGetBooleanv ,
glcltGetClipPlane ,
glcltGetDoublev ,
glcltGetError ,
glcltGetFloatv ,
glcltGetIntegerv ,
glcltGetLightfv ,
glcltGetLightiv ,
glcltGetMapdv ,
glcltGetMapfv ,
glcltGetMapiv ,
glcltGetMaterialfv ,
glcltGetMaterialiv ,
glcltGetPixelMapfv ,
glcltGetPixelMapuiv ,
glcltGetPixelMapusv ,
glcltGetPolygonStipple ,
glcltGetString ,
glcltGetTexEnvfv ,
glcltGetTexEnviv ,
glcltGetTexGendv ,
glcltGetTexGenfv ,
glcltGetTexGeniv ,
glcltGetTexImage ,
glcltGetTexParameterfv ,
glcltGetTexParameteriv ,
glcltGetTexLevelParameterfv ,
glcltGetTexLevelParameteriv ,
glcltIsEnabled ,
glcltIsList ,
glcltDepthRange ,
glcltFrustum ,
glcltLoadIdentity ,
glcltLoadMatrixf ,
glcltLoadMatrixd ,
glcltMatrixMode ,
glcltMultMatrixf ,
glcltMultMatrixd ,
glcltOrtho ,
glcltPopMatrix ,
glcltPushMatrix ,
glcltRotated ,
glcltRotatef ,
glcltScaled ,
glcltScalef ,
glcltTranslated ,
glcltTranslatef ,
glcltViewport ,
glcltArrayElement ,
glcltBindTexture ,
glcltColorPointer ,
glcltDisableClientState ,
glcltDrawArrays ,
glcltDrawElements ,
glcltEdgeFlagPointer ,
glcltEnableClientState ,
glcltIndexPointer ,
glcltIndexub_InRGBA ,
glcltIndexubv_InRGBA ,
glcltInterleavedArrays ,
glcltNormalPointer ,
glcltPolygonOffset ,
glcltTexCoordPointer ,
glcltVertexPointer ,
glcltAreTexturesResident ,
glcltCopyTexImage1D ,
glcltCopyTexImage2D ,
glcltCopyTexSubImage1D ,
glcltCopyTexSubImage2D ,
glcltDeleteTextures ,
glcltGenTextures ,
glcltGetPointerv ,
glcltIsTexture ,
glcltPrioritizeTextures ,
glcltTexSubImage1D ,
glcltTexSubImage2D ,
glcltPopClientAttrib ,
glcltPushClientAttrib ,
}
};
GLCLTPROCTABLE glCltCIProcTable = {
/* Number of function entries in the table */
sizeof(GLDISPATCHTABLE) / sizeof(PROC),
/* gl Entry points */
{
glcltNewList ,
glcltEndList ,
glcltCallList ,
glcltCallLists ,
glcltDeleteLists ,
glcltGenLists ,
glcltListBase ,
glcltBegin ,
glcltBitmap ,
glcltColor3b_InCI ,
glcltColor3bv_InCI ,
glcltColor3d_InCI ,
glcltColor3dv_InCI ,
glcltColor3f_InCI ,
glcltColor3fv_InCI ,
glcltColor3i_InCI ,
glcltColor3iv_InCI ,
glcltColor3s_InCI ,
glcltColor3sv_InCI ,
glcltColor3ub_InCI ,
glcltColor3ubv_InCI ,
glcltColor3ui_InCI ,
glcltColor3uiv_InCI ,
glcltColor3us_InCI ,
glcltColor3usv_InCI ,
glcltColor4b_InCI ,
glcltColor4bv_InCI ,
glcltColor4d_InCI ,
glcltColor4dv_InCI ,
glcltColor4f_InCI ,
glcltColor4fv_InCI ,
glcltColor4i_InCI ,
glcltColor4iv_InCI ,
glcltColor4s_InCI ,
glcltColor4sv_InCI ,
glcltColor4ub_InCI ,
glcltColor4ubv_InCI ,
glcltColor4ui_InCI ,
glcltColor4uiv_InCI ,
glcltColor4us_InCI ,
glcltColor4usv_InCI ,
glcltEdgeFlag ,
glcltEdgeFlagv ,
glcltEnd ,
glcltIndexd_InCI ,
glcltIndexdv_InCI ,
glcltIndexf_InCI ,
glcltIndexfv_InCI ,
glcltIndexi_InCI ,
glcltIndexiv_InCI ,
glcltIndexs_InCI ,
glcltIndexsv_InCI ,
glcltNormal3b ,
glcltNormal3bv ,
glcltNormal3d ,
glcltNormal3dv ,
glcltNormal3f ,
glcltNormal3fv ,
glcltNormal3i ,
glcltNormal3iv ,
glcltNormal3s ,
glcltNormal3sv ,
glcltRasterPos2d ,
glcltRasterPos2dv ,
glcltRasterPos2f ,
glcltRasterPos2fv ,
glcltRasterPos2i ,
glcltRasterPos2iv ,
glcltRasterPos2s ,
glcltRasterPos2sv ,
glcltRasterPos3d ,
glcltRasterPos3dv ,
glcltRasterPos3f ,
glcltRasterPos3fv ,
glcltRasterPos3i ,
glcltRasterPos3iv ,
glcltRasterPos3s ,
glcltRasterPos3sv ,
glcltRasterPos4d ,
glcltRasterPos4dv ,
glcltRasterPos4f ,
glcltRasterPos4fv ,
glcltRasterPos4i ,
glcltRasterPos4iv ,
glcltRasterPos4s ,
glcltRasterPos4sv ,
glcltRectd ,
glcltRectdv ,
glcltRectf ,
glcltRectfv ,
glcltRecti ,
glcltRectiv ,
glcltRects ,
glcltRectsv ,
glcltTexCoord1d ,
glcltTexCoord1dv ,
glcltTexCoord1f ,
glcltTexCoord1fv ,
glcltTexCoord1i ,
glcltTexCoord1iv ,
glcltTexCoord1s ,
glcltTexCoord1sv ,
glcltTexCoord2d ,
glcltTexCoord2dv ,
glcltTexCoord2f ,
glcltTexCoord2fv ,
glcltTexCoord2i ,
glcltTexCoord2iv ,
glcltTexCoord2s ,
glcltTexCoord2sv ,
glcltTexCoord3d ,
glcltTexCoord3dv ,
glcltTexCoord3f ,
glcltTexCoord3fv ,
glcltTexCoord3i ,
glcltTexCoord3iv ,
glcltTexCoord3s ,
glcltTexCoord3sv ,
glcltTexCoord4d ,
glcltTexCoord4dv ,
glcltTexCoord4f ,
glcltTexCoord4fv ,
glcltTexCoord4i ,
glcltTexCoord4iv ,
glcltTexCoord4s ,
glcltTexCoord4sv ,
glcltVertex2d ,
glcltVertex2dv ,
glcltVertex2f ,
glcltVertex2fv ,
glcltVertex2i ,
glcltVertex2iv ,
glcltVertex2s ,
glcltVertex2sv ,
glcltVertex3d ,
glcltVertex3dv ,
glcltVertex3f ,
glcltVertex3fv ,
glcltVertex3i ,
glcltVertex3iv ,
glcltVertex3s ,
glcltVertex3sv ,
glcltVertex4d ,
glcltVertex4dv ,
glcltVertex4f ,
glcltVertex4fv ,
glcltVertex4i ,
glcltVertex4iv ,
glcltVertex4s ,
glcltVertex4sv ,
glcltClipPlane ,
glcltColorMaterial ,
glcltCullFace ,
glcltFogf ,
glcltFogfv ,
glcltFogi ,
glcltFogiv ,
glcltFrontFace ,
glcltHint ,
glcltLightf ,
glcltLightfv ,
glcltLighti ,
glcltLightiv ,
glcltLightModelf ,
glcltLightModelfv ,
glcltLightModeli ,
glcltLightModeliv ,
glcltLineStipple ,
glcltLineWidth ,
glcltMaterialf ,
glcltMaterialfv ,
glcltMateriali ,
glcltMaterialiv ,
glcltPointSize ,
glcltPolygonMode ,
glcltPolygonStipple ,
glcltScissor ,
glcltShadeModel ,
glcltTexParameterf ,
glcltTexParameterfv ,
glcltTexParameteri ,
glcltTexParameteriv ,
glcltTexImage1D ,
glcltTexImage2D ,
glcltTexEnvf ,
glcltTexEnvfv ,
glcltTexEnvi ,
glcltTexEnviv ,
glcltTexGend ,
glcltTexGendv ,
glcltTexGenf ,
glcltTexGenfv ,
glcltTexGeni ,
glcltTexGeniv ,
glcltFeedbackBuffer ,
glcltSelectBuffer ,
glcltRenderMode ,
glcltInitNames ,
glcltLoadName ,
glcltPassThrough ,
glcltPopName ,
glcltPushName ,
glcltDrawBuffer ,
glcltClear ,
glcltClearAccum ,
glcltClearIndex ,
glcltClearColor ,
glcltClearStencil ,
glcltClearDepth ,
glcltStencilMask ,
glcltColorMask ,
glcltDepthMask ,
glcltIndexMask ,
glcltAccum ,
glcltDisable ,
glcltEnable ,
glcltFinish ,
glcltFlush ,
glcltPopAttrib ,
glcltPushAttrib ,
glcltMap1d ,
glcltMap1f ,
glcltMap2d ,
glcltMap2f ,
glcltMapGrid1d ,
glcltMapGrid1f ,
glcltMapGrid2d ,
glcltMapGrid2f ,
glcltEvalCoord1d ,
glcltEvalCoord1dv ,
glcltEvalCoord1f ,
glcltEvalCoord1fv ,
glcltEvalCoord2d ,
glcltEvalCoord2dv ,
glcltEvalCoord2f ,
glcltEvalCoord2fv ,
glcltEvalMesh1 ,
glcltEvalPoint1 ,
glcltEvalMesh2 ,
glcltEvalPoint2 ,
glcltAlphaFunc ,
glcltBlendFunc ,
glcltLogicOp ,
glcltStencilFunc ,
glcltStencilOp ,
glcltDepthFunc ,
glcltPixelZoom ,
glcltPixelTransferf ,
glcltPixelTransferi ,
glcltPixelStoref ,
glcltPixelStorei ,
glcltPixelMapfv ,
glcltPixelMapuiv ,
glcltPixelMapusv ,
glcltReadBuffer ,
glcltCopyPixels ,
glcltReadPixels ,
glcltDrawPixels ,
glcltGetBooleanv ,
glcltGetClipPlane ,
glcltGetDoublev ,
glcltGetError ,
glcltGetFloatv ,
glcltGetIntegerv ,
glcltGetLightfv ,
glcltGetLightiv ,
glcltGetMapdv ,
glcltGetMapfv ,
glcltGetMapiv ,
glcltGetMaterialfv ,
glcltGetMaterialiv ,
glcltGetPixelMapfv ,
glcltGetPixelMapuiv ,
glcltGetPixelMapusv ,
glcltGetPolygonStipple ,
glcltGetString ,
glcltGetTexEnvfv ,
glcltGetTexEnviv ,
glcltGetTexGendv ,
glcltGetTexGenfv ,
glcltGetTexGeniv ,
glcltGetTexImage ,
glcltGetTexParameterfv ,
glcltGetTexParameteriv ,
glcltGetTexLevelParameterfv ,
glcltGetTexLevelParameteriv ,
glcltIsEnabled ,
glcltIsList ,
glcltDepthRange ,
glcltFrustum ,
glcltLoadIdentity ,
glcltLoadMatrixf ,
glcltLoadMatrixd ,
glcltMatrixMode ,
glcltMultMatrixf ,
glcltMultMatrixd ,
glcltOrtho ,
glcltPopMatrix ,
glcltPushMatrix ,
glcltRotated ,
glcltRotatef ,
glcltScaled ,
glcltScalef ,
glcltTranslated ,
glcltTranslatef ,
glcltViewport ,
glcltArrayElement ,
glcltBindTexture ,
glcltColorPointer ,
glcltDisableClientState ,
glcltDrawArrays ,
glcltDrawElements ,
glcltEdgeFlagPointer ,
glcltEnableClientState ,
glcltIndexPointer ,
glcltIndexub_InCI ,
glcltIndexubv_InCI ,
glcltInterleavedArrays ,
glcltNormalPointer ,
glcltPolygonOffset ,
glcltTexCoordPointer ,
glcltVertexPointer ,
glcltAreTexturesResident ,
glcltCopyTexImage1D ,
glcltCopyTexImage2D ,
glcltCopyTexSubImage1D ,
glcltCopyTexSubImage2D ,
glcltDeleteTextures ,
glcltGenTextures ,
glcltGetPointerv ,
glcltIsTexture ,
glcltPrioritizeTextures ,
glcltTexSubImage1D ,
glcltTexSubImage2D ,
glcltPopClientAttrib ,
glcltPushClientAttrib ,
}
};
GLEXTPROCTABLE glExtProcTable =
{
/* Number of function entries in the table */
sizeof(GLEXTDISPATCHTABLE) / sizeof(PROC),
/* gl EXT Entry points */
{
glcltDrawRangeElementsWIN,
glcltColorTableEXT,
glcltColorSubTableEXT,
glcltGetColorTableEXT,
glcltGetColorTableParameterivEXT,
glcltGetColorTableParameterfvEXT,
#ifdef GL_WIN_multiple_textures
glcltCurrentTextureIndexWIN,
glcltMultiTexCoord1dWIN,
glcltMultiTexCoord1dvWIN,
glcltMultiTexCoord1fWIN,
glcltMultiTexCoord1fvWIN,
glcltMultiTexCoord1iWIN,
glcltMultiTexCoord1ivWIN,
glcltMultiTexCoord1sWIN,
glcltMultiTexCoord1svWIN,
glcltMultiTexCoord2dWIN,
glcltMultiTexCoord2dvWIN,
glcltMultiTexCoord2fWIN,
glcltMultiTexCoord2fvWIN,
glcltMultiTexCoord2iWIN,
glcltMultiTexCoord2ivWIN,
glcltMultiTexCoord2sWIN,
glcltMultiTexCoord2svWIN,
glcltMultiTexCoord3dWIN,
glcltMultiTexCoord3dvWIN,
glcltMultiTexCoord3fWIN,
glcltMultiTexCoord3fvWIN,
glcltMultiTexCoord3iWIN,
glcltMultiTexCoord3ivWIN,
glcltMultiTexCoord3sWIN,
glcltMultiTexCoord3svWIN,
glcltMultiTexCoord4dWIN,
glcltMultiTexCoord4dvWIN,
glcltMultiTexCoord4fWIN,
glcltMultiTexCoord4fvWIN,
glcltMultiTexCoord4iWIN,
glcltMultiTexCoord4ivWIN,
glcltMultiTexCoord4sWIN,
glcltMultiTexCoord4svWIN,
glcltBindNthTextureWIN,
glcltNthTexCombineFuncWIN,
#endif // GL_WIN_multiple_textures
}
};
/******************************Public*Routine******************************\
* vInitTebCache
*
* Within the NT TEB, there is a table where OpenGL can cache OpenGL API
* function pointers. In this area we can cache frequently used portions
* of the dispatch table. Functions cached in this area can save a level
* of indirection by avoiding deferencing the dispatch table pointer.
*
* History:
* 06-Nov-1995 -by- Gilman Wong [gilmanw]
* Wrote it.
\**************************************************************************/
// The following table defines the ranges of the dispatch table that should
// be cached in the TEB. Each pair of indices defines the start and end of
// each range.
int static gaiCacheFuncs[] = {
INDEX_glCallList , INDEX_glCallLists ,
INDEX_glBegin , INDEX_glBegin ,
INDEX_glColor3b , INDEX_glNormal3sv ,
INDEX_glTexCoord1d , INDEX_glVertex4sv ,
INDEX_glMaterialf , INDEX_glMaterialiv ,
INDEX_glDisable , INDEX_glEnable ,
INDEX_glPopAttrib , INDEX_glPushAttrib ,
INDEX_glEvalCoord1d , INDEX_glEvalCoord2fv,
INDEX_glEvalPoint1 , INDEX_glEvalPoint1 ,
INDEX_glEvalPoint2 , INDEX_glEvalPoint2 ,
INDEX_glLoadIdentity, INDEX_glMultMatrixd ,
INDEX_glPopMatrix , INDEX_glTranslatef ,
INDEX_glArrayElement, INDEX_glVertexPointer,
INDEX_glGetPointerv, INDEX_glGetPointerv ,
INDEX_glPopClientAttrib, INDEX_glPushClientAttrib,
INDEX_glDrawRangeElementsWIN, INDEX_glColorSubTableEXT,
#ifdef GL_WIN_multiple_textures
INDEX_glCurrentTextureIndexWIN, INDEX_glCurrentTextureIndexWIN,
INDEX_glBindNthTextureWIN, INDEX_glNthTexCombineFuncWIN,
INDEX_glMultiTexCoord1fWIN, INDEX_glMultiTexCoord1ivWIN,
INDEX_glMultiTexCoord2fWIN, INDEX_glMultiTexCoord2ivWIN,
#endif // GL_WIN_multiple_textures
};
void vInitTebCache(PVOID glTable)
{
int iRange, iCache;
PROC *pfnCltDispatchTableFast;
pfnCltDispatchTableFast = (PROC *)GLTEB_CLTDISPATCHTABLE_FAST();
// Copy each range of FPs, defined by the table gaiCacheFuncs, from the
// dispatch table to the TEB FP cache.
for ( iRange = 0, iCache = 0;
iRange < (sizeof(gaiCacheFuncs) / sizeof(int));
iRange+=2 )
{
PVOID pvCache; // ptr into FP cache within TEB
PVOID pvDispatch; // ptr to current range within dispatch table
int iNum; // number of FPs in current range to cache
pvCache = (PVOID)&pfnCltDispatchTableFast[iCache];
pvDispatch = (PVOID)&((PROC *)glTable)[gaiCacheFuncs[iRange]];
iNum = gaiCacheFuncs[iRange+1] - gaiCacheFuncs[iRange] + 1;
ASSERTOPENGL((BYTE *)pvCache >= (BYTE *)pfnCltDispatchTableFast &&
(BYTE *)pvCache < (BYTE *)GLTEB_CLTPOLYARRAY() &&
((PROC *)pvCache)+iNum <= (PROC *)GLTEB_CLTPOLYARRAY(),
"Fast dispatch area overflow\n");
memcpy(pvCache, pvDispatch, iNum * sizeof(PROC));
iCache += iNum;
}
ASSERTOPENGL(iCache == sizeof(GLDISPATCHTABLE_FAST) / sizeof(PROC),
"fast dispatch table not initialized properly\n");
}
/******************************Public*Routine******************************\
*
* SetCltProcTable
*
* Sets the client-side dispatch table or update the metafiling
* dispatch table if capturing
*
* History:
* Fri Jan 05 16:37:40 1996 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
void SetCltProcTable(GLCLTPROCTABLE *pgcpt, GLEXTPROCTABLE *pgept,
BOOL fForce)
{
#ifdef GL_METAFILE
PLRC plrc;
plrc = GLTEB_CLTCURRENTRC();
if (!fForce && plrc != NULL && plrc->fCapturing)
{
MetaSetCltProcTable(pgcpt, pgept);
}
else
#endif
{
// Copy base proc table
memcpy((PVOID) CURRENT_GLTEBINFO()->glCltDispatchTable,
&pgcpt->glDispatchTable,
pgcpt->cEntries * sizeof(PROC));
// If the given proc table doesn't have a complete set of entries,
// pad it out with noops
if (pgcpt->cEntries < OPENGL_VERSION_110_ENTRIES)
{
memcpy(((PROC *)CURRENT_GLTEBINFO()->glCltDispatchTable)+
pgcpt->cEntries,
((PROC *)&glNullCltProcTable.glDispatchTable)+
pgcpt->cEntries,
(OPENGL_VERSION_110_ENTRIES-pgcpt->cEntries)*sizeof(PROC));
}
// Copy extension proc table
// This is a purely internal table so it should always have the
// right number of entries
ASSERTOPENGL(pgept->cEntries == glNullExtProcTable.cEntries,
"Bad extension proc table\n");
memcpy(CURRENT_GLTEBINFO()->glCltDispatchTable+
GL_EXT_PROC_TABLE_OFFSET,
&pgept->glDispatchTable,
pgept->cEntries * sizeof(PROC));
vInitTebCache(CURRENT_GLTEBINFO()->glCltDispatchTable);
}
}
/******************************Public*Routine******************************\
*
* GetCltProcTable
*
* Gets the client-side dispatch table or the metafile capture
* exec table depending on the metafile capture state
*
* History:
* Fri Jan 05 19:11:26 1996 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
void GetCltProcTable(GLCLTPROCTABLE *pgcpt, GLEXTPROCTABLE *pgept,
BOOL fForce)
{
#ifdef GL_METAFILE
PLRC plrc;
plrc = GLTEB_CLTCURRENTRC();
if (!fForce && plrc != NULL && plrc->fCapturing)
{
MetaGetCltProcTable(pgcpt, pgept);
}
else
#endif
{
memcpy(&pgcpt->glDispatchTable,
(PVOID) CURRENT_GLTEBINFO()->glCltDispatchTable,
pgcpt->cEntries * sizeof(PROC));
memcpy(&pgept->glDispatchTable,
CURRENT_GLTEBINFO()->glCltDispatchTable+GL_EXT_PROC_TABLE_OFFSET,
pgept->cEntries * sizeof(PROC));
}
}