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