rastpos.c revision 22144ab7552f0799bcfca506bf4ffa7f70a06649
122144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes/* $Id: rastpos.c,v 1.22 2001/03/12 00:48:38 gareth Exp $ */ 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 5b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul * Version: 3.5 65e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 7b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"), 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions: 155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software. 185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef PC_HEADER 29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "all.h" 30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#else 31fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h" 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "clip.h" 33c893a015d8a50a38cd3f727d99835e7e7e2ccea9Brian Paul#include "colormac.h" 34485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell#include "context.h" 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "feedback.h" 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "light.h" 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "macros.h" 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "mmath.h" 39485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell#include "rastpos.h" 40ea39f042c378c234b573ceead4c5194020d949c4Brian Paul#include "state.h" 4123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#include "simple_list.h" 425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h" 4323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 4423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#include "math/m_matrix.h" 4523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#include "math/m_xform.h" 46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 47afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 48afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 5023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Clip a point against the view volume. 5123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Input: v - vertex-vector describing the point to clip 5223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Return: 0 = outside view volume 5323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * 1 = inside view volume 5423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */ 553b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic GLuint 563b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulviewclip_point( const GLfloat v[] ) 5723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{ 5823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if ( v[0] > v[3] || v[0] < -v[3] 5923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell || v[1] > v[3] || v[1] < -v[3] 6023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell || v[2] > v[3] || v[2] < -v[3] ) { 6123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 0; 6223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 6323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 6423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 1; 6523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 6623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell} 6723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 683b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul 6923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* 7023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Clip a point against the user clipping planes. 7123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Input: v - vertex-vector describing the point to clip. 7223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Return: 0 = point was clipped 7323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * 1 = point not clipped 7423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */ 753b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic GLuint 763b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Pauluserclip_point( GLcontext* ctx, const GLfloat v[] ) 7723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{ 7823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLuint p; 7923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 80a864432fb4333dfbbe669554de7485d8426e1c38Brian Paul for (p = 0; p < ctx->Const.MaxClipPlanes; p++) { 8123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Transform.ClipEnabled[p]) { 8223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat dot = v[0] * ctx->Transform._ClipUserPlane[p][0] 8323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + v[1] * ctx->Transform._ClipUserPlane[p][1] 8423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + v[2] * ctx->Transform._ClipUserPlane[p][2] 8523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + v[3] * ctx->Transform._ClipUserPlane[p][3]; 8623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (dot < 0.0F) { 8723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 0; 8823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 8923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 9023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 9123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 9223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 1; 9323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell} 9423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 9523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 9623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* This has been split off to allow the normal shade routines to 975e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * get a little closer to the vertex buffer, and to use the 9823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * GLvector objects directly. 9923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */ 1003b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic void 1013b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulshade_rastpos(GLcontext *ctx, 1023b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul const GLfloat vertex[4], 1033b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul const GLfloat normal[3], 1043b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul GLfloat Rcolor[4], 1053b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul GLuint *index) 10623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{ 10723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat (*base)[3] = ctx->Light._BaseColor; 10823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell const GLchan *sumA = ctx->Light._BaseAlpha; 10923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell struct gl_light *light; 11023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat color[4]; 11123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat diffuse = 0, specular = 0; 11223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 11323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(color, base[0]); 11423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell color[3] = CHAN_TO_FLOAT( sumA[0] ); 11523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 11623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell foreach (light, &ctx->Light.EnabledList) { 11723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat n_dot_h; 11823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat attenuation = 1.0; 1195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat VP[3]; 12023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat n_dot_VP; 12123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat *h; 12223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat contrib[3]; 12323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLboolean normalized; 12423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 12523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (!(light->_Flags & LIGHT_POSITIONAL)) { 12623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(VP, light->_VP_inf_norm); 12723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell attenuation = light->_VP_inf_spot_attenuation; 12823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 12923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 1305e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat d; 13122144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 13223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell SUB_3V(VP, light->_Position, vertex); 13323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell d = LEN_3FV( VP ); 13422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 13523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if ( d > 1e-6) { 13623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat invd = 1.0F / d; 13723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell SELF_SCALE_SCALAR_3V(VP, invd); 13823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 1395e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen attenuation = 1.0F / (light->ConstantAttenuation + d * 1405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen (light->LinearAttenuation + d * 14123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell light->QuadraticAttenuation)); 14222144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 1433b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul if (light->_Flags & LIGHT_SPOT) { 14423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat PV_dot_dir = - DOT3(VP, light->_NormDirection); 14522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 14623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (PV_dot_dir<light->_CosCutoff) { 1475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen continue; 14823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 1493b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul else { 15023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell double x = PV_dot_dir * (EXP_TABLE_SIZE-1); 15123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell int k = (int) x; 15223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat spot = (GLfloat) (light->_SpotExpTable[k][0] 15323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + (x-k)*light->_SpotExpTable[k][1]); 15423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell attenuation *= spot; 15523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 15623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 15723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 15823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 1595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen if (attenuation < 1e-3) 16023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell continue; 16123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 16223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_VP = DOT3( normal, VP ); 16323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 16423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (n_dot_VP < 0.0F) { 16523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V(color, attenuation, light->_MatAmbient[0]); 16623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell continue; 1675e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen } 16823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 16923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(contrib, light->_MatAmbient[0]); 17023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V(contrib, n_dot_VP, light->_MatDiffuse[0]); 17123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell diffuse += n_dot_VP * light->_dli * attenuation; 17223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 173ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell { 17423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Light.Model.LocalViewer) { 17523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat v[3]; 17623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(v, vertex); 17723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell NORMALIZE_3FV(v); 17823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell SUB_3V(VP, VP, v); 17923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell h = VP; 18023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell normalized = 0; 18123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 18223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else if (light->_Flags & LIGHT_POSITIONAL) { 18323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell h = VP; 18423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_3V(h, ctx->_EyeZDir); 18523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell normalized = 0; 18623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 18723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 18823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell h = light->_h_inf_norm; 18923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell normalized = 1; 19023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 19122144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 19223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_h = DOT3(normal, h); 19323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 19423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (n_dot_h > 0.0F) { 19523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell struct gl_material *mat = &ctx->Light.Material[0]; 19623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat spec_coef; 19723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat shininess = mat->Shininess; 19823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 19923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (!normalized) { 20023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_h *= n_dot_h; 20123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_h /= LEN_SQUARED_3FV( h ); 20223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell shininess *= .5; 20323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 20422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 20523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GET_SHINE_TAB_ENTRY( ctx->_ShineTable[0], n_dot_h, spec_coef ); 20623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 20723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (spec_coef > 1.0e-10) { 20823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V( contrib, spec_coef, 20923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell light->_MatSpecular[0]); 21023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell specular += spec_coef * light->_sli * attenuation; 21123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 21223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 21323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 21423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 21523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V( color, attenuation, contrib ); 2165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen } 21723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 218b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul if (ctx->Visual.rgbMode) { 21923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[0] = CLAMP(color[0], 0.0F, 1.0F); 22023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[1] = CLAMP(color[1], 0.0F, 1.0F); 22123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[2] = CLAMP(color[2], 0.0F, 1.0F); 22223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[3] = CLAMP(color[3], 0.0F, 1.0F); 22323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 22423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 22523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell struct gl_material *mat = &ctx->Light.Material[0]; 22623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat d_a = mat->DiffuseIndex - mat->AmbientIndex; 22723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat s_a = mat->SpecularIndex - mat->AmbientIndex; 22823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat ind = mat->AmbientIndex 22923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + diffuse * (1.0F-specular) * d_a 23023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + specular * s_a; 23123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ind > mat->SpecularIndex) { 23223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ind = mat->SpecularIndex; 23323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 23423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell *index = (GLuint) (GLint) ind; 23523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 23623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 23723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell} 23823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 23923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* 240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Caller: context->API.RasterPos4f 241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 2423b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic void 2433b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulraster_pos4f(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat v[4], eye[4], clip[4], ndc[3], d; 246cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 247cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_CURRENT(ctx, 0); 248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ctx->NewState) 25008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_update_state( ctx ); 251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ASSIGN_4V( v, x, y, z, w ); 253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg TRANSFORM_POINT( eye, ctx->ModelView.m, v ); 254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* raster color */ 2563b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul if (ctx->Light.Enabled) { 257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat *norm, eyenorm[3]; 258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat *objnorm = ctx->Current.Normal; 259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 2601e1aac034c986a08248861363c0baa27dc2ae2d5Keith Whitwell if (ctx->_NeedEyeCoords) { 261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat *inv = ctx->ModelView.inv; 262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg TRANSFORM_NORMAL( eyenorm, objnorm, inv ); 263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg norm = eyenorm; 2643b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul } 2653b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul else { 266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg norm = objnorm; 267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 2693b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul shade_rastpos( ctx, v, norm, 2703b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul ctx->Current.RasterColor, 2713b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul &ctx->Current.RasterIndex ); 272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* use current color or index */ 276b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul if (ctx->Visual.rgbMode) { 277193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[0] = CHAN_TO_FLOAT(ctx->Current.Color[0]); 278193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[1] = CHAN_TO_FLOAT(ctx->Current.Color[1]); 279193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[2] = CHAN_TO_FLOAT(ctx->Current.Color[2]); 280193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[3] = CHAN_TO_FLOAT(ctx->Current.Color[3]); 281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterIndex = ctx->Current.Index; 284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* compute raster distance */ 28899f16d01dd508ccac9d37488bf83a7aed5c05832Brian Paul ctx->Current.RasterDistance = (GLfloat) 289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GL_SQRT( eye[0]*eye[0] + eye[1]*eye[1] + eye[2]*eye[2] ); 290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* apply projection matrix: clip = Proj * eye */ 292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg TRANSFORM_POINT( clip, ctx->ProjectionMatrix.m, eye ); 293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* clip to view volume */ 2953b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul if (viewclip_point( clip )==0) { 296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPosValid = GL_FALSE; 297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* clip to user clipping planes */ 3013b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul if (ctx->Transform._AnyClip && 3023b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul userclip_point(ctx, clip) == 0) { 303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPosValid = GL_FALSE; 304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* ndc = clip / W */ 308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ASSERT( clip[3]!=0.0 ); 309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg d = 1.0F / clip[3]; 310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ndc[0] = clip[0] * d; 311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ndc[1] = clip[1] * d; 312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ndc[2] = clip[2] * d; 313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ctx->Current.RasterPos[0] = (ndc[0] * ctx->Viewport._WindowMap.m[MAT_SX] + 31514940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell ctx->Viewport._WindowMap.m[MAT_TX]); 3165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ctx->Current.RasterPos[1] = (ndc[1] * ctx->Viewport._WindowMap.m[MAT_SY] + 31714940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell ctx->Viewport._WindowMap.m[MAT_TY]); 3185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ctx->Current.RasterPos[2] = (ndc[2] * ctx->Viewport._WindowMap.m[MAT_SZ] + 319b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul ctx->Viewport._WindowMap.m[MAT_TZ]) / ctx->DepthMaxF; 320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPos[3] = clip[3]; 321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPosValid = GL_TRUE; 322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* FOG??? */ 324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLuint texSet; 3279c05c0494d06dcf429d8489107be49e339305690Brian Paul for (texSet = 0; texSet < ctx->Const.MaxTextureUnits; texSet++) { 328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg COPY_4FV( ctx->Current.RasterMultiTexCoord[texSet], 329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.Texcoord[texSet] ); 330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ctx->RenderMode==GL_SELECT) { 33408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] ); 335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 341fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 342fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2d(GLdouble x, GLdouble y) 343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 344fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 345fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 347fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 348fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2f(GLfloat x, GLfloat y) 349fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 350fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 351fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 353fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 354fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2i(GLint x, GLint y) 355fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 356fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 357fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 359fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 360fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2s(GLshort x, GLshort y) 361fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 362fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 363fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 365fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 366fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z) 367fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 368fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 369fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 370afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 371fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 372fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z) 373fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 374fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 375fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 377fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 378fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3i(GLint x, GLint y, GLint z) 379fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 380fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 381fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 382fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 383fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 384fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3s(GLshort x, GLshort y, GLshort z) 385fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 386fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 387fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 388fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 389fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 390fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) 391fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 392fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, w); 393fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 394fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 395fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 396fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 397fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 398fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 399fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul raster_pos4f(ctx, x, y, z, w); 400fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 401fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 402fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 403fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w) 404fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 405fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, w); 406fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 407fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 408fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 409fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) 410fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 411fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, w); 412fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 413fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 414fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 415fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2dv(const GLdouble *v) 416fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 417fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 418fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 419fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 420fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 421fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2fv(const GLfloat *v) 422fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 423fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 424fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 425fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 426fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 427fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2iv(const GLint *v) 428fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 429fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 430fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 431fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 432fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 433fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2sv(const GLshort *v) 434fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 435fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 436fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 437fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 438fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 439fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3dv(const GLdouble *v) 440fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 441fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 442fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 443fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 444fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 445fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3fv(const GLfloat *v) 446fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 447fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 448fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 449fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 450fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 451fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3iv(const GLint *v) 452fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 453fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 454fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 455fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 456fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 457fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3sv(const GLshort *v) 458fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 459fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 460fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 461fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 462fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 463fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4dv(const GLdouble *v) 464fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 465fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 466fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 467fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 468fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 469fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4fv(const GLfloat *v) 470fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 471fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 472fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 473fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 474fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 475fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4iv(const GLint *v) 476fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 477fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 478fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 479fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 480fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 481fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4sv(const GLshort *v) 482fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 483fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 485