t_save_api.c

来自「mesa-6.5-minigui源码」· C语言 代码 · 共 1,725 行 · 第 1/4 页

C
1,725
字号
}static void GLAPIENTRY _save_Color4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ){   DISPATCH_ATTR4F( _TNL_ATTRIB_COLOR0, x, y, z, w );}static void GLAPIENTRY _save_Color4fv( const GLfloat *v ){   DISPATCH_ATTR4FV( _TNL_ATTRIB_COLOR0, v );}static void GLAPIENTRY _save_SecondaryColor3fEXT( GLfloat x, GLfloat y, GLfloat z ){   DISPATCH_ATTR3F( _TNL_ATTRIB_COLOR1, x, y, z );}static void GLAPIENTRY _save_SecondaryColor3fvEXT( const GLfloat *v ){   DISPATCH_ATTR3FV( _TNL_ATTRIB_COLOR1, v );}static void GLAPIENTRY _save_MultiTexCoord1f( GLenum target, GLfloat x  ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR1F( attr, x );}static void GLAPIENTRY _save_MultiTexCoord1fv( GLenum target, const GLfloat *v ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR1FV( attr, v );}static void GLAPIENTRY _save_MultiTexCoord2f( GLenum target, GLfloat x, GLfloat y ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR2F( attr, x, y );}static void GLAPIENTRY _save_MultiTexCoord2fv( GLenum target, const GLfloat *v ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR2FV( attr, v );}static void GLAPIENTRY _save_MultiTexCoord3f( GLenum target, GLfloat x, GLfloat y,				    GLfloat z){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR3F( attr, x, y, z );}static void GLAPIENTRY _save_MultiTexCoord3fv( GLenum target, const GLfloat *v ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR3FV( attr, v );}static void GLAPIENTRY _save_MultiTexCoord4f( GLenum target, GLfloat x, GLfloat y,				    GLfloat z, GLfloat w ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR4F( attr, x, y, z, w );}static void GLAPIENTRY _save_MultiTexCoord4fv( GLenum target, const GLfloat *v ){   GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;   DISPATCH_ATTR4FV( attr, v );}static void GLAPIENTRY _save_VertexAttrib1fNV( GLuint index, GLfloat x ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR1F( index, x );   else      enum_error(); }static void GLAPIENTRY _save_VertexAttrib1fvNV( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR1FV( index, v );   else      enum_error();}static void GLAPIENTRY _save_VertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR2F( index, x, y );   else      enum_error();}static void GLAPIENTRY _save_VertexAttrib2fvNV( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR2FV( index, v );   else      enum_error();}static void GLAPIENTRY _save_VertexAttrib3fNV( GLuint index, GLfloat x, GLfloat y, 				  GLfloat z ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR3F( index, x, y, z );   else      enum_error();}static void GLAPIENTRY _save_VertexAttrib3fvNV( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR3FV( index, v );   else      enum_error();}static void GLAPIENTRY _save_VertexAttrib4fNV( GLuint index, GLfloat x, GLfloat y,				  GLfloat z, GLfloat w ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR4F( index, x, y, z, w );   else      enum_error();}static void GLAPIENTRY _save_VertexAttrib4fvNV( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR4FV( index, v );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib1fARB( GLuint index, GLfloat x ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR1F( index, x );   else      enum_error(); }static void GLAPIENTRY_save_VertexAttrib1fvARB( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR1FV( index, v );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib2fARB( GLuint index, GLfloat x, GLfloat y ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR2F( index, x, y );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib2fvARB( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR2FV( index, v );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib3fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR3F( index, x, y, z );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib3fvARB( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR3FV( index, v );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib4fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR4F( index, x, y, z, w );   else      enum_error();}static void GLAPIENTRY_save_VertexAttrib4fvARB( GLuint index, const GLfloat *v ){   if (index < VERT_ATTRIB_MAX)      DISPATCH_ATTR4FV( index, v );   else      enum_error();}/* Materials:   *  * These are treated as per-vertex attributes, at indices above where * the NV_vertex_program leaves off.  There are a lot of good things * about treating materials this way.   * * However: I don't want to double the number of generated functions * just to cope with this, so I unroll the 'C' varients of CHOOSE and * ATTRF into this function, and dispense with codegen and * second-level dispatch. * * There is no aliasing of material attributes with other entrypoints. */#define MAT_ATTR( A, N, params )			\do {							\   if (tnl->save.attrsz[A] < N) {			\      _save_upgrade_vertex( ctx, A, N );		\      tnl->save.have_materials = GL_TRUE;               \   }							\							\   {							\      GLfloat *dest = tnl->save.attrptr[A];	      	\      if (N>0) dest[0] = params[0];			\      if (N>1) dest[1] = params[1];			\      if (N>2) dest[2] = params[2];			\      if (N>3) dest[3] = params[3];			\   }							\} while (0)#define MAT( ATTR, N, face, params )			\do {							\   if (face != GL_BACK)					\      MAT_ATTR( ATTR, N, params ); /* front */		\   if (face != GL_FRONT)				\      MAT_ATTR( ATTR + 1, N, params ); /* back */	\} while (0)/* NOTE: Have to remove/deal-with colormaterial crossovers, probably * later on - in the meantime just store everything.   */static void GLAPIENTRY _save_Materialfv( GLenum face, GLenum pname, 			       const GLfloat *params ){   GET_CURRENT_CONTEXT( ctx );    TNLcontext *tnl = TNL_CONTEXT(ctx);   switch (pname) {   case GL_EMISSION:      MAT( _TNL_ATTRIB_MAT_FRONT_EMISSION, 4, face, params );      break;   case GL_AMBIENT:      MAT( _TNL_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params );      break;   case GL_DIFFUSE:      MAT( _TNL_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params );      break;   case GL_SPECULAR:      MAT( _TNL_ATTRIB_MAT_FRONT_SPECULAR, 4, face, params );      break;   case GL_SHININESS:      MAT( _TNL_ATTRIB_MAT_FRONT_SHININESS, 1, face, params );      break;   case GL_COLOR_INDEXES:      MAT( _TNL_ATTRIB_MAT_FRONT_INDEXES, 3, face, params );      break;   case GL_AMBIENT_AND_DIFFUSE:      MAT( _TNL_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params );      MAT( _TNL_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params );      break;   default:      _mesa_compile_error( ctx, GL_INVALID_ENUM, "glMaterialfv" );      return;   }}#define IDX_ATTR( A, IDX )				\do {							\   GET_CURRENT_CONTEXT( ctx );				\   TNLcontext *tnl = TNL_CONTEXT(ctx);			\							\   if (tnl->save.attrsz[A] < 1) {			\      _save_upgrade_vertex( ctx, A, 1 );		\   }							\							\   {							\      GLfloat *dest = tnl->save.attrptr[A];		\      dest[0] = IDX;				\   }							\} while (0)static void GLAPIENTRY _save_EdgeFlag( GLboolean b ){   IDX_ATTR( _TNL_ATTRIB_EDGEFLAG, (GLfloat)b );}static void GLAPIENTRY _save_EdgeFlagv( const GLboolean *v ){   IDX_ATTR( _TNL_ATTRIB_EDGEFLAG, (GLfloat)(v[0]) );}static void GLAPIENTRY _save_Indexf( GLfloat f ){   IDX_ATTR( _TNL_ATTRIB_INDEX, f );}static void GLAPIENTRY _save_Indexfv( const GLfloat *f ){   IDX_ATTR( _TNL_ATTRIB_INDEX, f[0] );}/* Cope with EvalCoord/CallList called within a begin/end object: *     -- Flush current buffer *     -- Fallback to opcodes for the rest of the begin/end object. */#define FALLBACK(ctx) 							\do {									\   TNLcontext *tnl = TNL_CONTEXT(ctx);					\									\   if (tnl->save.initial_counter != tnl->save.counter ||		\       tnl->save.prim_count) 						\      _save_compile_vertex_list( ctx );					\									\   _save_copy_to_current( ctx );					\   _save_reset_vertex( ctx );						\   _mesa_install_save_vtxfmt( ctx, &ctx->ListState.ListVtxfmt );	\   ctx->Driver.SaveNeedFlush = 0;					\} while (0)static void GLAPIENTRY _save_EvalCoord1f( GLfloat u ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_EvalCoord1f(ctx->Save, ( u ));}static void GLAPIENTRY _save_EvalCoord1fv( const GLfloat *v ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_EvalCoord1fv(ctx->Save, ( v ));}static void GLAPIENTRY _save_EvalCoord2f( GLfloat u, GLfloat v ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_EvalCoord2f(ctx->Save, ( u, v ));}static void GLAPIENTRY _save_EvalCoord2fv( const GLfloat *v ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_EvalCoord2fv(ctx->Save, ( v ));}static void GLAPIENTRY _save_EvalPoint1( GLint i ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_EvalPoint1(ctx->Save, ( i ));}static void GLAPIENTRY _save_EvalPoint2( GLint i, GLint j ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_EvalPoint2(ctx->Save, ( i, j ));}static void GLAPIENTRY _save_CallList( GLuint l ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_CallList(ctx->Save, ( l ));}static void GLAPIENTRY _save_CallLists( GLsizei n, GLenum type, const GLvoid *v ){   GET_CURRENT_CONTEXT(ctx);   FALLBACK(ctx);   CALL_CallLists(ctx->Save, ( n, type, v ));}/* This begin is hooked into ...  Updating of * ctx->Driver.CurrentSavePrimitive is already taken care of. */static GLboolean _save_NotifyBegin( GLcontext *ctx, GLenum mode ){   TNLcontext *tnl = TNL_CONTEXT(ctx);    if (1) {      GLuint i = tnl->save.prim_count++;      assert(i < tnl->save.prim_max);      tnl->save.prim[i].mode = mode | PRIM_BEGIN;      tnl->save.prim[i].start = tnl->save.initial_counter - tnl->save.counter;      tnl->save.prim[i].count = 0;         _mesa_install_save_vtxfmt( ctx, &tnl->save_vtxfmt );            ctx->Driver.SaveNeedFlush = 1;      return GL_TRUE;   }   else       return GL_FALSE;}static void GLAPIENTRY _save_End( void )

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?