radeon_maos_vbtmp.h revision a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980
15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* 25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Mesa 3-D graphics library 35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Version: 4.1 45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * copy of this software and associated documentation files (the "Software"), 95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * to deal in the Software without restriction, including without limitation 105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Software is furnished to do so, subject to the following conditions: 135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * The above copyright notice and this permission notice shall be included 155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * in all copies or substantial portions of the Software. 165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors: 255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Keith Whitwell <keith@tungstengraphics.com> 265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#ifndef LOCALVARS 295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LOCALVARS 305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif 315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef TCL_DEBUG 335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#ifndef TCL_DEBUG 345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_DEBUG 0 355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif 365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic void TAG(emit)( GLcontext *ctx, 385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint start, GLuint end, 395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul void *dest ) 405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul LOCALVARS 4257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint (*tc0)[4], (*tc1)[4], (*tc2)[4]; 4457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell GLfloat (*col)[4], (*spec)[4]; 455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLfloat (*fog)[4]; 465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint (*norm)[4]; 475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint tc0_stride, tc1_stride, col_stride, spec_stride, fog_stride; 485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint tc2_stride, norm_stride; 4957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell GLuint fill_tex = 0; 50a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger GLuint rqcoordsnoswap = 0; 515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint (*coord)[4]; 525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint coord_stride; /* object coordinates */ 535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLubyte dummy[4]; 545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int i; 555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul union emit_union *v = (union emit_union *)dest; 575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (RADEON_DEBUG & DEBUG_VERTS) 595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fprintf(stderr, "%s\n", __FUNCTION__); 605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul coord = (GLuint (*)[4])VB->ObjPtr->data; 625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul coord_stride = VB->ObjPtr->stride; 635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2) { 6557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (VB->TexCoordPtr[2]) { 6657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell const GLuint t2 = GET_TEXSOURCE(2); 6757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2 = (GLuint (*)[4])VB->TexCoordPtr[t2]->data; 6857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2_stride = VB->TexCoordPtr[t2]->stride; 69a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger if (DO_PTEX && VB->TexCoordPtr[t2]->size < 3) { 70a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger /* since DO_PTEX is only true when we have 3 or more coords 71a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger in the first place we don't really need this right? */ 7257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fill_tex |= (1<<2); 735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 74a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (DO_PTEX && VB->TexCoordPtr[t2]->size < 4) { 75a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger rqcoordsnoswap |= (1<<2); 76a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 7757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } else { 7857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2 = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_TEX2]; 7957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2_stride = 0; 805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1) { 845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->TexCoordPtr[1]) { 855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul const GLuint t1 = GET_TEXSOURCE(1); 865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc1 = (GLuint (*)[4])VB->TexCoordPtr[t1]->data; 875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc1_stride = VB->TexCoordPtr[t1]->stride; 88a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger if (DO_PTEX && VB->TexCoordPtr[t1]->size < 3) { 8957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fill_tex |= (1<<1); 905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 91a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (DO_PTEX && VB->TexCoordPtr[t1]->size < 4) { 92a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger rqcoordsnoswap |= (1<<1); 93a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 9557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc1 = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_TEX1]; 965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc1_stride = 0; 975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0) { 1015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->TexCoordPtr[0]) { 1025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul const GLuint t0 = GET_TEXSOURCE(0); 1035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc0_stride = VB->TexCoordPtr[t0]->stride; 1045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc0 = (GLuint (*)[4])VB->TexCoordPtr[t0]->data; 105a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger if (DO_PTEX && VB->TexCoordPtr[t0]->size < 3) { 10657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fill_tex |= (1<<0); 1075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 108a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (DO_PTEX && VB->TexCoordPtr[t0]->size < 4) { 109a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger rqcoordsnoswap |= (1<<0); 110a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 1115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 11257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc0 = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_TEX0]; 1135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc0_stride = 0; 1145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_NORM) { 1195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->NormalPtr) { 1205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm_stride = VB->NormalPtr->stride; 1215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm = (GLuint (*)[4])VB->NormalPtr->data; 1225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 1235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm_stride = 0; 1245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_NORMAL]; 1255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_RGBA) { 1295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->ColorPtr[0]) { 13057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell col = VB->ColorPtr[0]->data; 13157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell col_stride = VB->ColorPtr[0]->stride; 1325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 13357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell col = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; 1345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul col_stride = 0; 1355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_SPEC) { 1395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->SecondaryColorPtr[0]) { 14057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell spec = VB->SecondaryColorPtr[0]->data; 14157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell spec_stride = VB->SecondaryColorPtr[0]->stride; 1425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 14357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell spec = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR1]; 1445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul spec_stride = 0; 1455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_FOG) { 1495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->FogCoordPtr) { 1505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fog = VB->FogCoordPtr->data; 1515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fog_stride = VB->FogCoordPtr->stride; 1525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 1535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fog = (GLfloat (*)[4])&dummy; fog[0][0] = 0.0F; 1545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fog_stride = 0; 1555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 15957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (start) { 16057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell coord = (GLuint (*)[4])((GLubyte *)coord + start * coord_stride); 16157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_TEX0) 16257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc0 = (GLuint (*)[4])((GLubyte *)tc0 + start * tc0_stride); 16357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_TEX1) 16457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc1 = (GLuint (*)[4])((GLubyte *)tc1 + start * tc1_stride); 16557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_TEX2) 16657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2 = (GLuint (*)[4])((GLubyte *)tc2 + start * tc2_stride); 16757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_NORM) 16857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell norm = (GLuint (*)[4])((GLubyte *)norm + start * norm_stride); 16957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_RGBA) 17057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(col, start * col_stride); 17157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_SPEC) 17257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(spec, start * spec_stride); 17357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_FOG) 17457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(fog, start * fog_stride); 17557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } 1765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 17757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 17857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell { 1795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul for (i=start; i < end; i++) { 18057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 1815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = coord[0][0]; 1825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = coord[0][1]; 1835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[2].ui = coord[0][2]; 1845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_W) { 1855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[3].ui = coord[0][3]; 1865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 4; 1875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 1895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 1905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul coord = (GLuint (*)[4])((GLubyte *)coord + coord_stride); 1915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_NORM) { 1935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = norm[0][0]; 1945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = norm[0][1]; 1955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[2].ui = norm[0][2]; 1965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 1975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm = (GLuint (*)[4])((GLubyte *)norm + norm_stride); 1985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_RGBA) { 20057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.red, col[0][0]); 20157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.green, col[0][1]); 20257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.blue, col[0][2]); 20357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.alpha, col[0][3]); 20457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(col, col_stride); 2055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v++; 2065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_SPEC || DO_FOG) { 2085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_SPEC) { 20957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.red, spec[0][0]); 21057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.green, spec[0][1]); 21157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.blue, spec[0][2]); 21257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(spec, spec_stride); 2135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_FOG) { 21557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.alpha, fog[0][0]); 21657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fog = (GLfloat (*)[4])((GLubyte *)fog + fog_stride); 2175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "%x ", v[0].ui); 2195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v++; 2205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0) { 2225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = tc0[0][0]; 2235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = tc0[0][1]; 2245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "t0: %.2f %.2f ", v[0].f, v[1].f); 2255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_PTEX) { 22657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (fill_tex & (1<<0)) 22757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].f = 1.0; 228a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (rqcoordsnoswap & (1<<0)) 229a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger v[2].ui = tc0[0][2]; 23057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell else 23157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].ui = tc0[0][3]; 2325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "%.2f ", v[2].f); 2335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 2345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 2365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 2; 2375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc0 = (GLuint (*)[4])((GLubyte *)tc0 + tc0_stride); 2385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1) { 2405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = tc1[0][0]; 2415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = tc1[0][1]; 2425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "t1: %.2f %.2f ", v[0].f, v[1].f); 2435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_PTEX) { 24457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (fill_tex & (1<<1)) 24557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].f = 1.0; 246a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (rqcoordsnoswap & (1<<1)) 247a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger v[2].ui = tc1[0][2]; 24857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell else 24957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].ui = tc1[0][3]; 2505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "%.2f ", v[2].f); 2515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 2525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 2545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 2; 2555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc1 = (GLuint (*)[4])((GLubyte *)tc1 + tc1_stride); 2565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2) { 2585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = tc2[0][0]; 2595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = tc2[0][1]; 2605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_PTEX) { 26157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (fill_tex & (1<<2)) 26257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].f = 1.0; 263a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (rqcoordsnoswap & (1<<2)) 264a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger v[2].ui = tc2[0][2]; 26557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell else 26657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].ui = tc2[0][3]; 2675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 2685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 2705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 2; 2715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc2 = (GLuint (*)[4])((GLubyte *)tc2 + tc2_stride); 2725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "\n"); 2745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 2775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic void TAG(init)( void ) 2815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 2825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int sz = 3; 2835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_W) sz++; 2845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_NORM) sz += 3; 2855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_RGBA) sz++; 2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_SPEC || DO_FOG) sz++; 2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0) sz += 2; 2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0 && DO_PTEX) sz++; 2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1) sz += 2; 2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1 && DO_PTEX) sz++; 2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2) sz += 2; 2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2 && DO_PTEX) sz++; 2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[IDX].emit = TAG(emit); 2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[IDX].vertex_format = IND; 2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[IDX].vertex_size = sz; 2975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef IND 3015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef TAG 3025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef IDX 303