rastpos.c revision ad2ac216fa0cbebc36530bf9e5256e902710b892
1ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell/* $Id: rastpos.c,v 1.16 2000/11/24 10:25:05 keithw Exp $ */ 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 5b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul * Version: 3.5 65e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 7ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * Copyright (C) 1999-2000 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 */ 5523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwellstatic GLuint gl_viewclip_point( const GLfloat v[] ) 5623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{ 5723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if ( v[0] > v[3] || v[0] < -v[3] 5823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell || v[1] > v[3] || v[1] < -v[3] 5923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell || v[2] > v[3] || v[2] < -v[3] ) { 6023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 0; 6123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 6223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 6323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 1; 6423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 6523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell} 6623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 6723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* 6823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Clip a point against the user clipping planes. 6923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Input: v - vertex-vector describing the point to clip. 7023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Return: 0 = point was clipped 7123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * 1 = point not clipped 7223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */ 7323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwellstatic GLuint gl_userclip_point( GLcontext* ctx, const GLfloat v[] ) 7423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{ 7523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLuint p; 7623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 7723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell for (p=0;p<MAX_CLIP_PLANES;p++) { 7823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Transform.ClipEnabled[p]) { 7923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat dot = v[0] * ctx->Transform._ClipUserPlane[p][0] 8023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + v[1] * ctx->Transform._ClipUserPlane[p][1] 8123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + v[2] * ctx->Transform._ClipUserPlane[p][2] 8223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + v[3] * ctx->Transform._ClipUserPlane[p][3]; 8323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (dot < 0.0F) { 8423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 0; 8523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 8623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 8723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 8823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 8923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell return 1; 9023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell} 9123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 9223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 9323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* This has been split off to allow the normal shade routines to 945e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * get a little closer to the vertex buffer, and to use the 9523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * GLvector objects directly. 9623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */ 9723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwellstatic void gl_shade_rastpos( GLcontext *ctx, 9823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat vertex[4], 9923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat normal[3], 10023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat Rcolor[4], 10123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLuint *index ) 10223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{ 10323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat (*base)[3] = ctx->Light._BaseColor; 10423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell const GLchan *sumA = ctx->Light._BaseAlpha; 10523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell struct gl_light *light; 10623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat color[4]; 10723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat diffuse = 0, specular = 0; 10823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 10923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(color, base[0]); 11023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell color[3] = CHAN_TO_FLOAT( sumA[0] ); 11123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 11223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell foreach (light, &ctx->Light.EnabledList) { 11323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat n_dot_h; 11423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat attenuation = 1.0; 1155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat VP[3]; 11623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat n_dot_VP; 11723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat *h; 11823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat contrib[3]; 11923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLboolean normalized; 12023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 12123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (!(light->_Flags & LIGHT_POSITIONAL)) { 12223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(VP, light->_VP_inf_norm); 12323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell attenuation = light->_VP_inf_spot_attenuation; 12423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 12523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 1265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GLfloat d; 1275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 12823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell SUB_3V(VP, light->_Position, vertex); 12923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell d = LEN_3FV( VP ); 1305e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 13123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if ( d > 1e-6) { 13223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat invd = 1.0F / d; 13323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell SELF_SCALE_SCALAR_3V(VP, invd); 13423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 1355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen attenuation = 1.0F / (light->ConstantAttenuation + d * 1365e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen (light->LinearAttenuation + d * 13723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell light->QuadraticAttenuation)); 1385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1395e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen if (light->_Flags & LIGHT_SPOT) 14023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell { 14123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat PV_dot_dir = - DOT3(VP, light->_NormDirection); 1425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 14323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (PV_dot_dir<light->_CosCutoff) { 1445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen continue; 14523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 1465e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen else 14723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell { 14823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell double x = PV_dot_dir * (EXP_TABLE_SIZE-1); 14923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell int k = (int) x; 15023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat spot = (GLfloat) (light->_SpotExpTable[k][0] 15123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + (x-k)*light->_SpotExpTable[k][1]); 15223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell attenuation *= spot; 15323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 15423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 15523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 15623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 1575e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen if (attenuation < 1e-3) 15823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell continue; 15923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 16023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_VP = DOT3( normal, VP ); 16123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 16223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (n_dot_VP < 0.0F) { 16323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V(color, attenuation, light->_MatAmbient[0]); 16423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell continue; 1655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen } 16623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 16723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(contrib, light->_MatAmbient[0]); 16823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V(contrib, n_dot_VP, light->_MatDiffuse[0]); 16923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell diffuse += n_dot_VP * light->_dli * attenuation; 17023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 171ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell { 17223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Light.Model.LocalViewer) { 17323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat v[3]; 17423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell COPY_3V(v, vertex); 17523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell NORMALIZE_3FV(v); 17623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell SUB_3V(VP, VP, v); 17723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell h = VP; 17823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell normalized = 0; 17923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 18023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else if (light->_Flags & LIGHT_POSITIONAL) { 18123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell h = VP; 18223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_3V(h, ctx->_EyeZDir); 18323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell normalized = 0; 18423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 18523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 18623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell h = light->_h_inf_norm; 18723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell normalized = 1; 18823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 1895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 19023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_h = DOT3(normal, h); 19123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 19223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (n_dot_h > 0.0F) { 19323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell struct gl_material *mat = &ctx->Light.Material[0]; 19423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat spec_coef; 19523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat shininess = mat->Shininess; 19623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 19723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (!normalized) { 19823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_h *= n_dot_h; 19923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell n_dot_h /= LEN_SQUARED_3FV( h ); 20023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell shininess *= .5; 20123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 2025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 20323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GET_SHINE_TAB_ENTRY( ctx->_ShineTable[0], n_dot_h, spec_coef ); 20423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 20523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (spec_coef > 1.0e-10) { 20623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V( contrib, spec_coef, 20723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell light->_MatSpecular[0]); 20823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell specular += spec_coef * light->_sli * attenuation; 20923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 21023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 21123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 21223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 21323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ACC_SCALE_SCALAR_3V( color, attenuation, contrib ); 2145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen } 21523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 21623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Visual.RGBAflag) { 21723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[0] = CLAMP(color[0], 0.0F, 1.0F); 21823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[1] = CLAMP(color[1], 0.0F, 1.0F); 21923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[2] = CLAMP(color[2], 0.0F, 1.0F); 22023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell Rcolor[3] = CLAMP(color[3], 0.0F, 1.0F); 22123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 22223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell else { 22323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell struct gl_material *mat = &ctx->Light.Material[0]; 22423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat d_a = mat->DiffuseIndex - mat->AmbientIndex; 22523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat s_a = mat->SpecularIndex - mat->AmbientIndex; 22623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell GLfloat ind = mat->AmbientIndex 22723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + diffuse * (1.0F-specular) * d_a 22823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell + specular * s_a; 22923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ind > mat->SpecularIndex) { 23023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ind = mat->SpecularIndex; 23123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 23223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell *index = (GLuint) (GLint) ind; 23323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell } 23423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 23523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell} 23623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 23723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* 238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Caller: context->API.RasterPos4f 239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 240fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulstatic void raster_pos4f( GLcontext *ctx, 241fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GLfloat x, GLfloat y, GLfloat z, GLfloat w ) 242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat v[4], eye[4], clip[4], ndc[3], d; 244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* KW: Added this test, which is in the spec. We can't do this 24623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * inside begin/end any more because the ctx->Current values 2475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * aren't uptodate during that period. 248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 24923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell FLUSH_TNL_RETURN(ctx, (FLUSH_INSIDE_BEGIN_END| 25023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell FLUSH_STORED_VERTICES| 25123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell FLUSH_UPDATE_CURRENT), "raster_pos4f"); 252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ctx->NewState) 254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_update_state( ctx ); 255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ASSIGN_4V( v, x, y, z, w ); 257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg TRANSFORM_POINT( eye, ctx->ModelView.m, v ); 258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* raster color */ 2605e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen if (ctx->Light.Enabled) 261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat *norm, eyenorm[3]; 263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat *objnorm = ctx->Current.Normal; 264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 2651e1aac034c986a08248861363c0baa27dc2ae2d5Keith Whitwell if (ctx->_NeedEyeCoords) { 266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLfloat *inv = ctx->ModelView.inv; 267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg TRANSFORM_NORMAL( eyenorm, objnorm, inv ); 268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg norm = eyenorm; 269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg norm = objnorm; 271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 2735e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen gl_shade_rastpos( ctx, v, norm, 274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterColor, 275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg &ctx->Current.RasterIndex ); 276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* use current color or index */ 280b1394fa92aaaf859ce9efc8b5fc194397921320cBrian Paul if (ctx->Visual.RGBAflag) { 281193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[0] = CHAN_TO_FLOAT(ctx->Current.Color[0]); 282193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[1] = CHAN_TO_FLOAT(ctx->Current.Color[1]); 283193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[2] = CHAN_TO_FLOAT(ctx->Current.Color[2]); 284193005393d6b1422ad9084f8e71004f4f055b88fBrian Paul ctx->Current.RasterColor[3] = CHAN_TO_FLOAT(ctx->Current.Color[3]); 285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterIndex = ctx->Current.Index; 288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* compute raster distance */ 29299f16d01dd508ccac9d37488bf83a7aed5c05832Brian Paul ctx->Current.RasterDistance = (GLfloat) 293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GL_SQRT( eye[0]*eye[0] + eye[1]*eye[1] + eye[2]*eye[2] ); 294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* apply projection matrix: clip = Proj * eye */ 296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg TRANSFORM_POINT( clip, ctx->ProjectionMatrix.m, eye ); 297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* clip to view volume */ 299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_viewclip_point( clip )==0) { 300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPosValid = GL_FALSE; 301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* clip to user clipping planes */ 30514940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell if ( ctx->Transform._AnyClip && 3065e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen gl_userclip_point(ctx, clip) == 0) 307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPosValid = GL_FALSE; 309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* ndc = clip / W */ 313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ASSERT( clip[3]!=0.0 ); 314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg d = 1.0F / clip[3]; 315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ndc[0] = clip[0] * d; 316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ndc[1] = clip[1] * d; 317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ndc[2] = clip[2] * d; 318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ctx->Current.RasterPos[0] = (ndc[0] * ctx->Viewport._WindowMap.m[MAT_SX] + 32014940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell ctx->Viewport._WindowMap.m[MAT_TX]); 3215e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ctx->Current.RasterPos[1] = (ndc[1] * ctx->Viewport._WindowMap.m[MAT_SY] + 32214940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell ctx->Viewport._WindowMap.m[MAT_TY]); 3235e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ctx->Current.RasterPos[2] = (ndc[2] * ctx->Viewport._WindowMap.m[MAT_SZ] + 32414940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell ctx->Viewport._WindowMap.m[MAT_TZ]) / ctx->Visual.DepthMaxF; 325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPos[3] = clip[3]; 326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.RasterPosValid = GL_TRUE; 327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* FOG??? */ 329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLuint texSet; 3329c05c0494d06dcf429d8489107be49e339305690Brian Paul for (texSet = 0; texSet < ctx->Const.MaxTextureUnits; texSet++) { 333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg COPY_4FV( ctx->Current.RasterMultiTexCoord[texSet], 334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Current.Texcoord[texSet] ); 335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ctx->RenderMode==GL_SELECT) { 339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_update_hitflag( ctx, ctx->Current.RasterPos[2] ); 340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 346fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 347fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2d(GLdouble x, GLdouble y) 348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 349fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 350fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 352fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 353fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2f(GLfloat x, GLfloat y) 354fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 355fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 356fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 358fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 359fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2i(GLint x, GLint y) 360fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 361fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 362fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 364fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 365fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2s(GLshort x, GLshort y) 366fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 367fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, 0.0F, 1.0F); 368fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 370fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 371fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z) 372fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 373fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 374fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 376fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 377fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z) 378fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 379fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 380fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 382fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 383fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3i(GLint x, GLint y, GLint z) 384fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 385fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 386fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 387fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 388fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 389fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3s(GLshort x, GLshort y, GLshort z) 390fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 391fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, 1.0F); 392fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 393fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 394fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 395fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) 396fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 397fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, w); 398fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 399fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 400fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 401fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) 402fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 403fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 404fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul raster_pos4f(ctx, x, y, z, w); 405fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 406fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 407fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 408fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w) 409fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 410fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, w); 411fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 412fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 413fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 414fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) 415fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 416fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(x, y, z, w); 417fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 418fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 419fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 420fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2dv(const GLdouble *v) 421fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 422fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 423fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 424fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 425fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 426fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2fv(const GLfloat *v) 427fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 428fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 429fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 430fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 431fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 432fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2iv(const GLint *v) 433fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 434fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 435fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 436fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 437fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 438fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2sv(const GLshort *v) 439fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 440fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F); 441fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 442fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 443fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 444fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3dv(const GLdouble *v) 445fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 446fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 447fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 448fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 449fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 450fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3fv(const GLfloat *v) 451fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 452fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 453fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 454fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 455fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 456fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3iv(const GLint *v) 457fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 458fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 459fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 460fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 461fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 462fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3sv(const GLshort *v) 463fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 464fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F); 465fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 466fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 467fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 468fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4dv(const GLdouble *v) 469fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 470fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 471fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 472fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 473fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 474fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4fv(const GLfloat *v) 475fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 476fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 477fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 478fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 479fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 480fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4iv(const GLint *v) 481fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 482fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 483fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 484fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 485fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 486fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4sv(const GLshort *v) 487fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{ 488fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_RasterPos4f(v[0], v[1], v[2], v[3]); 489afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 490