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 + -
显示快捷键?