vtxfmt.c revision 3464ebd5
1/* 2 * Mesa 3-D graphics library 3 * Version: 6.3 4 * 5 * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included 15 * in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: 25 * Keith Whitwell <keith@tungstengraphics.com> 26 * Gareth Hughes 27 */ 28 29#include "glheader.h" 30#include "api_arrayelt.h" 31#include "context.h" 32#include "imports.h" 33#include "mfeatures.h" 34#include "mtypes.h" 35#include "vtxfmt.h" 36#include "eval.h" 37#include "dlist.h" 38#include "main/dispatch.h" 39 40 41#if FEATURE_beginend 42 43/** 44 * Use the per-vertex functions found in <vfmt> to initialoze the given 45 * API dispatch table. 46 */ 47static void 48install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt ) 49{ 50 _mesa_install_arrayelt_vtxfmt(tab, vfmt); 51 52 SET_Color3f(tab, vfmt->Color3f); 53 SET_Color3fv(tab, vfmt->Color3fv); 54 SET_Color4f(tab, vfmt->Color4f); 55 SET_Color4fv(tab, vfmt->Color4fv); 56 SET_EdgeFlag(tab, vfmt->EdgeFlag); 57 58 _mesa_install_eval_vtxfmt(tab, vfmt); 59 60 SET_FogCoordfEXT(tab, vfmt->FogCoordfEXT); 61 SET_FogCoordfvEXT(tab, vfmt->FogCoordfvEXT); 62 SET_Indexf(tab, vfmt->Indexf); 63 SET_Indexfv(tab, vfmt->Indexfv); 64 SET_Materialfv(tab, vfmt->Materialfv); 65 SET_MultiTexCoord1fARB(tab, vfmt->MultiTexCoord1fARB); 66 SET_MultiTexCoord1fvARB(tab, vfmt->MultiTexCoord1fvARB); 67 SET_MultiTexCoord2fARB(tab, vfmt->MultiTexCoord2fARB); 68 SET_MultiTexCoord2fvARB(tab, vfmt->MultiTexCoord2fvARB); 69 SET_MultiTexCoord3fARB(tab, vfmt->MultiTexCoord3fARB); 70 SET_MultiTexCoord3fvARB(tab, vfmt->MultiTexCoord3fvARB); 71 SET_MultiTexCoord4fARB(tab, vfmt->MultiTexCoord4fARB); 72 SET_MultiTexCoord4fvARB(tab, vfmt->MultiTexCoord4fvARB); 73 SET_Normal3f(tab, vfmt->Normal3f); 74 SET_Normal3fv(tab, vfmt->Normal3fv); 75 SET_SecondaryColor3fEXT(tab, vfmt->SecondaryColor3fEXT); 76 SET_SecondaryColor3fvEXT(tab, vfmt->SecondaryColor3fvEXT); 77 SET_TexCoord1f(tab, vfmt->TexCoord1f); 78 SET_TexCoord1fv(tab, vfmt->TexCoord1fv); 79 SET_TexCoord2f(tab, vfmt->TexCoord2f); 80 SET_TexCoord2fv(tab, vfmt->TexCoord2fv); 81 SET_TexCoord3f(tab, vfmt->TexCoord3f); 82 SET_TexCoord3fv(tab, vfmt->TexCoord3fv); 83 SET_TexCoord4f(tab, vfmt->TexCoord4f); 84 SET_TexCoord4fv(tab, vfmt->TexCoord4fv); 85 SET_Vertex2f(tab, vfmt->Vertex2f); 86 SET_Vertex2fv(tab, vfmt->Vertex2fv); 87 SET_Vertex3f(tab, vfmt->Vertex3f); 88 SET_Vertex3fv(tab, vfmt->Vertex3fv); 89 SET_Vertex4f(tab, vfmt->Vertex4f); 90 SET_Vertex4fv(tab, vfmt->Vertex4fv); 91 92 _mesa_install_dlist_vtxfmt(tab, vfmt); /* glCallList / glCallLists */ 93 94 SET_Begin(tab, vfmt->Begin); 95 SET_End(tab, vfmt->End); 96 SET_PrimitiveRestartNV(tab, vfmt->PrimitiveRestartNV); 97 98 SET_Rectf(tab, vfmt->Rectf); 99 100 SET_DrawArrays(tab, vfmt->DrawArrays); 101 SET_DrawElements(tab, vfmt->DrawElements); 102 SET_DrawRangeElements(tab, vfmt->DrawRangeElements); 103 SET_MultiDrawElementsEXT(tab, vfmt->MultiDrawElementsEXT); 104 SET_DrawElementsBaseVertex(tab, vfmt->DrawElementsBaseVertex); 105 SET_DrawRangeElementsBaseVertex(tab, vfmt->DrawRangeElementsBaseVertex); 106 SET_MultiDrawElementsBaseVertex(tab, vfmt->MultiDrawElementsBaseVertex); 107 SET_DrawArraysInstancedARB(tab, vfmt->DrawArraysInstanced); 108 SET_DrawElementsInstancedARB(tab, vfmt->DrawElementsInstanced); 109 SET_DrawElementsInstancedBaseVertex(tab, vfmt->DrawElementsInstancedBaseVertex); 110 111 /* GL_NV_vertex_program */ 112 SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV); 113 SET_VertexAttrib1fvNV(tab, vfmt->VertexAttrib1fvNV); 114 SET_VertexAttrib2fNV(tab, vfmt->VertexAttrib2fNV); 115 SET_VertexAttrib2fvNV(tab, vfmt->VertexAttrib2fvNV); 116 SET_VertexAttrib3fNV(tab, vfmt->VertexAttrib3fNV); 117 SET_VertexAttrib3fvNV(tab, vfmt->VertexAttrib3fvNV); 118 SET_VertexAttrib4fNV(tab, vfmt->VertexAttrib4fNV); 119 SET_VertexAttrib4fvNV(tab, vfmt->VertexAttrib4fvNV); 120#if FEATURE_ARB_vertex_program 121 SET_VertexAttrib1fARB(tab, vfmt->VertexAttrib1fARB); 122 SET_VertexAttrib1fvARB(tab, vfmt->VertexAttrib1fvARB); 123 SET_VertexAttrib2fARB(tab, vfmt->VertexAttrib2fARB); 124 SET_VertexAttrib2fvARB(tab, vfmt->VertexAttrib2fvARB); 125 SET_VertexAttrib3fARB(tab, vfmt->VertexAttrib3fARB); 126 SET_VertexAttrib3fvARB(tab, vfmt->VertexAttrib3fvARB); 127 SET_VertexAttrib4fARB(tab, vfmt->VertexAttrib4fARB); 128 SET_VertexAttrib4fvARB(tab, vfmt->VertexAttrib4fvARB); 129#endif 130 131 /* GL_EXT_gpu_shader4 / OpenGL 3.0 */ 132 SET_VertexAttribI1iEXT(tab, vfmt->VertexAttribI1i); 133 SET_VertexAttribI2iEXT(tab, vfmt->VertexAttribI2i); 134 SET_VertexAttribI3iEXT(tab, vfmt->VertexAttribI3i); 135 SET_VertexAttribI4iEXT(tab, vfmt->VertexAttribI4i); 136 SET_VertexAttribI2ivEXT(tab, vfmt->VertexAttribI2iv); 137 SET_VertexAttribI3ivEXT(tab, vfmt->VertexAttribI3iv); 138 SET_VertexAttribI4ivEXT(tab, vfmt->VertexAttribI4iv); 139 140 SET_VertexAttribI1uiEXT(tab, vfmt->VertexAttribI1ui); 141 SET_VertexAttribI2uiEXT(tab, vfmt->VertexAttribI2ui); 142 SET_VertexAttribI3uiEXT(tab, vfmt->VertexAttribI3ui); 143 SET_VertexAttribI4uiEXT(tab, vfmt->VertexAttribI4ui); 144 SET_VertexAttribI2uivEXT(tab, vfmt->VertexAttribI2uiv); 145 SET_VertexAttribI3uivEXT(tab, vfmt->VertexAttribI3uiv); 146 SET_VertexAttribI4uivEXT(tab, vfmt->VertexAttribI4uiv); 147} 148 149 150/** 151 * Install per-vertex functions into the API dispatch table for execution. 152 */ 153void 154_mesa_install_exec_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt) 155{ 156 if (ctx->API == API_OPENGL) 157 install_vtxfmt( ctx->Exec, vfmt ); 158} 159 160 161/** 162 * Install per-vertex functions into the API dispatch table for display 163 * list compilation. 164 */ 165void 166_mesa_install_save_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt) 167{ 168 if (ctx->API == API_OPENGL) 169 install_vtxfmt( ctx->Save, vfmt ); 170} 171 172 173#endif /* FEATURE_beginend */ 174