rastpos.c revision a864432fb4333dfbbe669554de7485d8426e1c38
1a864432fb4333dfbbe669554de7485d8426e1c38Brian Paul/* $Id: rastpos.c,v 1.17 2000/11/27 18:22:13 brianp 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
77a864432fb4333dfbbe669554de7485d8426e1c38Brian Paul   for (p = 0; p < ctx->Const.MaxClipPlanes; 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