rastpos.c revision 86b842790b720cd6b1499ce8edca8a4e9c8dc029
186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul/* $Id: rastpos.c,v 1.33 2001/12/14 02:50:02 brianp 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
698c2f6c5059a60d845716277973c826f4069926e6Brian Paul/* As above, but only clip test against far/near Z planes */
708c2f6c5059a60d845716277973c826f4069926e6Brian Paulstatic GLuint
718c2f6c5059a60d845716277973c826f4069926e6Brian Paulviewclip_point_z( const GLfloat v[] )
728c2f6c5059a60d845716277973c826f4069926e6Brian Paul{
738c2f6c5059a60d845716277973c826f4069926e6Brian Paul   if (v[2] > v[3] || v[2] < -v[3] ) {
748c2f6c5059a60d845716277973c826f4069926e6Brian Paul      return 0;
758c2f6c5059a60d845716277973c826f4069926e6Brian Paul   }
768c2f6c5059a60d845716277973c826f4069926e6Brian Paul   else {
778c2f6c5059a60d845716277973c826f4069926e6Brian Paul      return 1;
788c2f6c5059a60d845716277973c826f4069926e6Brian Paul   }
798c2f6c5059a60d845716277973c826f4069926e6Brian Paul}
808c2f6c5059a60d845716277973c826f4069926e6Brian Paul
818c2f6c5059a60d845716277973c826f4069926e6Brian Paul
828c2f6c5059a60d845716277973c826f4069926e6Brian Paul
8323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/*
8423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Clip a point against the user clipping planes.
8523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Input:  v - vertex-vector describing the point to clip.
8623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * Return:  0 = point was clipped
8723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell *          1 = point not clipped
8823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */
893b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic GLuint
903b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Pauluserclip_point( GLcontext* ctx, const GLfloat v[] )
9123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{
9223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   GLuint p;
9323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
94a864432fb4333dfbbe669554de7485d8426e1c38Brian Paul   for (p = 0; p < ctx->Const.MaxClipPlanes; p++) {
9523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      if (ctx->Transform.ClipEnabled[p]) {
9623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 GLfloat dot = v[0] * ctx->Transform._ClipUserPlane[p][0]
9723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell		     + v[1] * ctx->Transform._ClipUserPlane[p][1]
9823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell		     + v[2] * ctx->Transform._ClipUserPlane[p][2]
9923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell		     + v[3] * ctx->Transform._ClipUserPlane[p][3];
10023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell         if (dot < 0.0F) {
10123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell            return 0;
10223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell         }
10323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      }
10423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   }
10523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
10623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   return 1;
10723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell}
10823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
10923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
11023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/* This has been split off to allow the normal shade routines to
1115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * get a little closer to the vertex buffer, and to use the
11223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell * GLvector objects directly.
113acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul * Input: ctx - the context
114acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul *        vertex - vertex location
115acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul *        normal - normal vector
116acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul * Output: Rcolor - returned color
117acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul *         Rspec  - returned specular color (if separate specular enabled)
118acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul *         Rindex - returned color index
11923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell */
1203b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic void
1213b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulshade_rastpos(GLcontext *ctx,
1223b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul              const GLfloat vertex[4],
1233b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul              const GLfloat normal[3],
1243b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul              GLfloat Rcolor[4],
125acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul              GLfloat Rspec[4],
126acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul              GLuint *Rindex)
12723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell{
12823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   GLfloat (*base)[3] = ctx->Light._BaseColor;
12923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   struct gl_light *light;
130acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul   GLfloat diffuseColor[4], specularColor[4];
13123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   GLfloat diffuse = 0, specular = 0;
13223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
133ac541734146071e279a8c379bce98f40195069e5Brian Paul   if (!ctx->_ShineTable[0] || !ctx->_ShineTable[1])
134ac541734146071e279a8c379bce98f40195069e5Brian Paul      _mesa_validate_all_lighting_tables( ctx );
135ac541734146071e279a8c379bce98f40195069e5Brian Paul
136acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul   COPY_3V(diffuseColor, base[0]);
1377b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   diffuseColor[3] = CLAMP( ctx->Light.Material[0].Diffuse[3], 0.0F, 1.0F );
138acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul   ASSIGN_4V(specularColor, 0.0, 0.0, 0.0, 0.0);
13923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
14023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   foreach (light, &ctx->Light.EnabledList) {
14123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat n_dot_h;
14223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat attenuation = 1.0;
1435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen      GLfloat VP[3];
14423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat n_dot_VP;
14523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat *h;
146acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      GLfloat diffuseContrib[3], specularContrib[3];
14723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLboolean normalized;
14823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
14923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      if (!(light->_Flags & LIGHT_POSITIONAL)) {
15023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 COPY_3V(VP, light->_VP_inf_norm);
15123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 attenuation = light->_VP_inf_spot_attenuation;
15223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      }
15323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      else {
1545e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen	 GLfloat d;
15522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
15623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 SUB_3V(VP, light->_Position, vertex);
1577b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz	 d = (GLfloat) LEN_3FV( VP );
15822144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
15923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 if ( d > 1e-6) {
16023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    GLfloat invd = 1.0F / d;
16123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    SELF_SCALE_SCALAR_3V(VP, invd);
16223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 }
1635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen	 attenuation = 1.0F / (light->ConstantAttenuation + d *
1645e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen			       (light->LinearAttenuation + d *
16523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell				light->QuadraticAttenuation));
16622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
1673b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul	 if (light->_Flags & LIGHT_SPOT) {
16823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    GLfloat PV_dot_dir = - DOT3(VP, light->_NormDirection);
16922144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
17023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    if (PV_dot_dir<light->_CosCutoff) {
1715e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen	       continue;
17223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    }
1733b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul	    else {
17423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       double x = PV_dot_dir * (EXP_TABLE_SIZE-1);
17523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       int k = (int) x;
17623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       GLfloat spot = (GLfloat) (light->_SpotExpTable[k][0]
17723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell			       + (x-k)*light->_SpotExpTable[k][1]);
17823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       attenuation *= spot;
17923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    }
18023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 }
18123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      }
18223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
1835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen      if (attenuation < 1e-3)
18423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 continue;
18523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
18623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      n_dot_VP = DOT3( normal, VP );
18723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
18823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      if (n_dot_VP < 0.0F) {
189acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul	 ACC_SCALE_SCALAR_3V(diffuseColor, attenuation, light->_MatAmbient[0]);
19023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 continue;
1915e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen      }
19223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
193acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      COPY_3V(diffuseContrib, light->_MatAmbient[0]);
194acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      ACC_SCALE_SCALAR_3V(diffuseContrib, n_dot_VP, light->_MatDiffuse[0]);
19523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      diffuse += n_dot_VP * light->_dli * attenuation;
196acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      ASSIGN_3V(specularContrib, 0.0, 0.0, 0.0);
19723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
198ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      {
19923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 if (ctx->Light.Model.LocalViewer) {
20023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    GLfloat v[3];
20123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    COPY_3V(v, vertex);
20223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    NORMALIZE_3FV(v);
20323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    SUB_3V(VP, VP, v);
20423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    h = VP;
20523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    normalized = 0;
20623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 }
20723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 else if (light->_Flags & LIGHT_POSITIONAL) {
20823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    h = VP;
20923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    ACC_3V(h, ctx->_EyeZDir);
21023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    normalized = 0;
21123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 }
21223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell         else {
21323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    h = light->_h_inf_norm;
21423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    normalized = 1;
21523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 }
21622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
21723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 n_dot_h = DOT3(normal, h);
21823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
21923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 if (n_dot_h > 0.0F) {
220acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul	    const struct gl_material *mat = &ctx->Light.Material[0];
22123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    GLfloat spec_coef;
22223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    GLfloat shininess = mat->Shininess;
22323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
22423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    if (!normalized) {
22523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       n_dot_h *= n_dot_h;
22623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       n_dot_h /= LEN_SQUARED_3FV( h );
22723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       shininess *= .5;
22823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    }
22922144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes
23023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    GET_SHINE_TAB_ENTRY( ctx->_ShineTable[0], n_dot_h, spec_coef );
23123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
23223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    if (spec_coef > 1.0e-10) {
233acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul               if (ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) {
234acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul                  ACC_SCALE_SCALAR_3V( specularContrib, spec_coef,
235acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul                                       light->_MatSpecular[0]);
236acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul               }
237acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul               else {
238acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul                  ACC_SCALE_SCALAR_3V( diffuseContrib, spec_coef,
239acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul                                       light->_MatSpecular[0]);
240acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul               }
24123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	       specular += spec_coef * light->_sli * attenuation;
24223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	    }
24323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 }
24423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      }
24523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
246acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      ACC_SCALE_SCALAR_3V( diffuseColor, attenuation, diffuseContrib );
247acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      ACC_SCALE_SCALAR_3V( specularColor, attenuation, specularContrib );
2485e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   }
24923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
250b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul   if (ctx->Visual.rgbMode) {
251acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rcolor[0] = CLAMP(diffuseColor[0], 0.0F, 1.0F);
252acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rcolor[1] = CLAMP(diffuseColor[1], 0.0F, 1.0F);
253acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rcolor[2] = CLAMP(diffuseColor[2], 0.0F, 1.0F);
254acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rcolor[3] = CLAMP(diffuseColor[3], 0.0F, 1.0F);
255acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rspec[0] = CLAMP(specularColor[0], 0.0F, 1.0F);
256acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rspec[1] = CLAMP(specularColor[1], 0.0F, 1.0F);
257acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rspec[2] = CLAMP(specularColor[2], 0.0F, 1.0F);
258acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      Rspec[3] = CLAMP(specularColor[3], 0.0F, 1.0F);
25923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   }
26023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   else {
26123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      struct gl_material *mat = &ctx->Light.Material[0];
26223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat d_a = mat->DiffuseIndex - mat->AmbientIndex;
26323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat s_a = mat->SpecularIndex - mat->AmbientIndex;
26423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      GLfloat ind = mat->AmbientIndex
26523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell                  + diffuse * (1.0F-specular) * d_a
26623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell                  + specular * s_a;
26723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      if (ind > mat->SpecularIndex) {
26823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell	 ind = mat->SpecularIndex;
26923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      }
270acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul      *Rindex = (GLuint) (GLint) ind;
27123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   }
27223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
27323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell}
27423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
27523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell/*
276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Caller:  context->API.RasterPos4f
277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
2783b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulstatic void
2793b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paulraster_pos4f(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLfloat v[4], eye[4], clip[4], ndc[3], d;
282cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
283cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_CURRENT(ctx, 0);
284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (ctx->NewState)
28608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_update_state( ctx );
287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ASSIGN_4V( v, x, y, z, w );
289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   TRANSFORM_POINT( eye, ctx->ModelView.m, v );
290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* raster color */
2923b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul   if (ctx->Light.Enabled) {
293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      GLfloat *norm, eyenorm[3];
29486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      GLfloat *objnorm = ctx->Current.Attrib[VERT_ATTRIB_NORMAL];
295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
2961e1aac034c986a08248861363c0baa27dc2ae2d5Keith Whitwell      if (ctx->_NeedEyeCoords) {
297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 GLfloat *inv = ctx->ModelView.inv;
298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 TRANSFORM_NORMAL( eyenorm, objnorm, inv );
299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 norm = eyenorm;
3003b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul      }
3013b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul      else {
302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 norm = objnorm;
303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
3053b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul      shade_rastpos( ctx, v, norm,
3063b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul                     ctx->Current.RasterColor,
307acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul                     ctx->Current.RasterSecondaryColor,
3083b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul                     &ctx->Current.RasterIndex );
309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   else {
312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      /* use current color or index */
313b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul      if (ctx->Visual.rgbMode) {
31486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         COPY_4FV(ctx->Current.RasterColor,
31586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                  ctx->Current.Attrib[VERT_ATTRIB_COLOR0]);
316acc722d4b890da7ed0ede24751e2bcaf28cc1468Brian Paul         COPY_4FV(ctx->Current.RasterSecondaryColor,
31786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                  ctx->Current.Attrib[VERT_ATTRIB_COLOR1]);
318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      else {
320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 ctx->Current.RasterIndex = ctx->Current.Index;
321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* compute raster distance */
32599f16d01dd508ccac9d37488bf83a7aed5c05832Brian Paul   ctx->Current.RasterDistance = (GLfloat)
326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg                      GL_SQRT( eye[0]*eye[0] + eye[1]*eye[1] + eye[2]*eye[2] );
327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* apply projection matrix:  clip = Proj * eye */
329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   TRANSFORM_POINT( clip, ctx->ProjectionMatrix.m, eye );
330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* clip to view volume */
3328c2f6c5059a60d845716277973c826f4069926e6Brian Paul   if (ctx->Transform.RasterPositionUnclipped) {
3338c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip: only clip against Z */
3348c2f6c5059a60d845716277973c826f4069926e6Brian Paul      if (viewclip_point_z(clip) == 0)
3358c2f6c5059a60d845716277973c826f4069926e6Brian Paul         ctx->Current.RasterPosValid = GL_FALSE;
3368c2f6c5059a60d845716277973c826f4069926e6Brian Paul   }
3378c2f6c5059a60d845716277973c826f4069926e6Brian Paul   else if (viewclip_point(clip) == 0) {
3388c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* Normal OpenGL behaviour */
339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      ctx->Current.RasterPosValid = GL_FALSE;
340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* clip to user clipping planes */
3443b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul   if (ctx->Transform._AnyClip &&
3453b399df6382d3cfb3cf9bfde4888878bebd2903fBrian Paul       userclip_point(ctx, clip) == 0) {
346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      ctx->Current.RasterPosValid = GL_FALSE;
347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* ndc = clip / W */
351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ASSERT( clip[3]!=0.0 );
352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   d = 1.0F / clip[3];
353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ndc[0] = clip[0] * d;
354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ndc[1] = clip[1] * d;
355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ndc[2] = clip[2] * d;
356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
3575e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   ctx->Current.RasterPos[0] = (ndc[0] * ctx->Viewport._WindowMap.m[MAT_SX] +
35814940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell				ctx->Viewport._WindowMap.m[MAT_TX]);
3595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   ctx->Current.RasterPos[1] = (ndc[1] * ctx->Viewport._WindowMap.m[MAT_SY] +
36014940c4ffe066a8b85bc14274c19ad3d8e334d61Keith Whitwell				ctx->Viewport._WindowMap.m[MAT_TY]);
3615e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   ctx->Current.RasterPos[2] = (ndc[2] * ctx->Viewport._WindowMap.m[MAT_SZ] +
362b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul				ctx->Viewport._WindowMap.m[MAT_TZ]) / ctx->DepthMaxF;
363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Current.RasterPos[3] = clip[3];
364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Current.RasterPosValid = GL_TRUE;
365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
36686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   ctx->Current.RasterFogCoord = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
367afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   {
369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      GLuint texSet;
3709c05c0494d06dcf429d8489107be49e339305690Brian Paul      for (texSet = 0; texSet < ctx->Const.MaxTextureUnits; texSet++) {
371afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         COPY_4FV( ctx->Current.RasterMultiTexCoord[texSet],
37286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                  ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texSet] );
373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (ctx->RenderMode==GL_SELECT) {
37708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
384fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
385fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2d(GLdouble x, GLdouble y)
386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
3877b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
388fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
390fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
391fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2f(GLfloat x, GLfloat y)
392fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
393fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(x, y, 0.0F, 1.0F);
394fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
396fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
397fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2i(GLint x, GLint y)
398fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
3997b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
400fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
402fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
403fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2s(GLshort x, GLshort y)
404fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
405fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(x, y, 0.0F, 1.0F);
406fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
408fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
409fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
410fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4117b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
412fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
414fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
415fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
416fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
417fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(x, y, z, 1.0F);
418fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
420fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
421fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3i(GLint x, GLint y, GLint z)
422fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4237b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
424fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
425fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
426fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
427fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3s(GLshort x, GLshort y, GLshort z)
428fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
429fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(x, y, z, 1.0F);
430fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
431fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
432fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
433fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
434fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4357b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
436fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
437fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
438fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
439fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
440fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
441fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
442fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   raster_pos4f(ctx, x, y, z, w);
443fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
444fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
445fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
446fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
447fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4487b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
449fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
450fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
451fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
452fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
453fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
454fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(x, y, z, w);
455fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
456fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
457fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
458fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2dv(const GLdouble *v)
459fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4607b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
461fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
462fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
463fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
464fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2fv(const GLfloat *v)
465fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
466fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F);
467fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
468fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
469fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
470fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2iv(const GLint *v)
471fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4727b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
473fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
474fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
475fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
476fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos2sv(const GLshort *v)
477fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
478fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F);
479fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
480fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
481fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
482fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3dv(const GLdouble *v)
483fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4847b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
485fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
486fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
487fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
488fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3fv(const GLfloat *v)
489fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
490fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F);
491fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
492fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
493fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
494fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3iv(const GLint *v)
495fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
4967b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
497fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
498fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
499fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
500fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos3sv(const GLshort *v)
501fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
502fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F);
503fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
504fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
505fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
506fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4dv(const GLdouble *v)
507fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
5087b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1],
5097b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz		     (GLfloat) v[2], (GLfloat) v[3]);
510fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
511fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
512fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
513fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4fv(const GLfloat *v)
514fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
515fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(v[0], v[1], v[2], v[3]);
516fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
517fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
518fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
519fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4iv(const GLint *v)
520fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
5217b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1],
5227b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz		     (GLfloat) v[2], (GLfloat) v[3]);
523fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul}
524fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
525fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
526fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_RasterPos4sv(const GLshort *v)
527fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul{
528fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_RasterPos4f(v[0], v[1], v[2], v[3]);
529afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
5301b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5311b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5321b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5331b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul/**********************************************************************/
5341b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul/***                     GL_MESA_window_pos                         ***/
5351b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul/**********************************************************************/
5361b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5371b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5381b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul/*
5391b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul * This is a MESA extension function.  Pretty much just like glRasterPos
5401b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul * except we don't apply the modelview or projection matrices; specify a
5411b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul * window coordinate directly.
5421b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul * Caller:  context->API.WindowPos4fMESA pointer.
5431b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul */
5441b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
5451b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
5461b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
5471b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   GET_CURRENT_CONTEXT(ctx);
5481b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
5491b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   FLUSH_CURRENT(ctx, 0);
5501b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5511b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* set raster position */
5521b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterPos[0] = x;
5531b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterPos[1] = y;
5541b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterPos[2] = CLAMP( z, 0.0F, 1.0F );
5551b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterPos[3] = w;
5561b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5571b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterPosValid = GL_TRUE;
5581b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterDistance = 0.0F;
5591b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   ctx->Current.RasterFogCoord = 0.0F;
5601b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5611b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* raster color = current color or index */
5621b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   if (ctx->Visual.rgbMode) {
56386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      COPY_4FV(ctx->Current.RasterColor,
56486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul               ctx->Current.Attrib[VERT_ATTRIB_COLOR0]);
5651b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   }
5661b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   else {
5671b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul      ctx->Current.RasterIndex = ctx->Current.Index;
5681b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   }
5691b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5701b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* raster texcoord = current texcoord */
5711b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   {
5721b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul      GLuint texSet;
5731b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul      for (texSet = 0; texSet < ctx->Const.MaxTextureUnits; texSet++) {
5741b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul         COPY_4FV( ctx->Current.RasterMultiTexCoord[texSet],
57586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                  ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texSet] );
5761b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul      }
5771b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   }
5781b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5791b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   if (ctx->RenderMode==GL_SELECT) {
5801b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul      _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
5811b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   }
5821b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
5831b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5841b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5851b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5861b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5871b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
5881b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2dMESA(GLdouble x, GLdouble y)
5891b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
5907b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
5911b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
5921b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5931b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
5941b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2fMESA(GLfloat x, GLfloat y)
5951b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
5961b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(x, y, 0.0F, 1.0F);
5971b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
5981b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
5991b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6001b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2iMESA(GLint x, GLint y)
6011b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6027b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
6031b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6041b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6051b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6061b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2sMESA(GLshort x, GLshort y)
6071b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6081b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(x, y, 0.0F, 1.0F);
6091b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6101b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6111b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6121b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z)
6131b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6147b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
6151b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6161b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6171b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6181b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z)
6191b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6201b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(x, y, z, 1.0F);
6211b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6221b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6231b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6241b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3iMESA(GLint x, GLint y, GLint z)
6251b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6267b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
6271b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6281b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6291b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6301b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3sMESA(GLshort x, GLshort y, GLshort z)
6311b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6321b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(x, y, z, 1.0F);
6331b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6341b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6351b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6361b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
6371b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6387b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
6391b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6401b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6411b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6421b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
6431b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6447b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
6451b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6461b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6471b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6481b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
6491b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6501b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(x, y, z, w);
6511b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6521b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6531b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6541b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2dvMESA(const GLdouble *v)
6551b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6567b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
6571b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6581b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6591b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6601b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2fvMESA(const GLfloat *v)
6611b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6621b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(v[0], v[1], 0.0F, 1.0F);
6631b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6641b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6651b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6661b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2ivMESA(const GLint *v)
6671b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6687b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
6691b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6701b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6711b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6721b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos2svMESA(const GLshort *v)
6731b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6741b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(v[0], v[1], 0.0F, 1.0F);
6751b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6761b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6771b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6781b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3dvMESA(const GLdouble *v)
6791b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6807b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
6811b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6821b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6831b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6841b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3fvMESA(const GLfloat *v)
6851b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6861b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(v[0], v[1], v[2], 1.0F);
6871b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6881b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6891b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6901b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3ivMESA(const GLint *v)
6911b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6927b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
6931b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
6941b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
6951b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
6961b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos3svMESA(const GLshort *v)
6971b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
6981b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(v[0], v[1], v[2], 1.0F);
6991b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
7001b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7011b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
7021b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4dvMESA(const GLdouble *v)
7031b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
7047b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1],
7057b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz			 (GLfloat) v[2], (GLfloat) v[3]);
7061b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
7071b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7081b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
7091b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4fvMESA(const GLfloat *v)
7101b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
7111b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(v[0], v[1], v[2], v[3]);
7121b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
7131b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7141b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
7151b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4ivMESA(const GLint *v)
7161b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
7177b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz   _mesa_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1],
7187b9fe820a3fba3849864682fbb1cb512362934abKarl Schultz			 (GLfloat) v[2], (GLfloat) v[3]);
7191b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
7201b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7211b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid
7221b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul_mesa_WindowPos4svMESA(const GLshort *v)
7231b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
7241b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   _mesa_WindowPos4fMESA(v[0], v[1], v[2], v[3]);
7251b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
7261b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7271b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7281b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7291b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul#if 0
7301b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7311b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul/*
7321b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul * OpenGL implementation of glWindowPos*MESA()
7331b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul */
7341b258989462e907e45abbdf8743b0a75f22c02b3Brian Paulvoid glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
7351b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul{
7361b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   GLfloat fx, fy;
7371b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7381b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* Push current matrix mode and viewport attributes */
7391b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glPushAttrib( GL_TRANSFORM_BIT | GL_VIEWPORT_BIT );
7401b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7411b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* Setup projection parameters */
7421b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glMatrixMode( GL_PROJECTION );
7431b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glPushMatrix();
7441b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glLoadIdentity();
7451b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glMatrixMode( GL_MODELVIEW );
7461b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glPushMatrix();
7471b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glLoadIdentity();
7481b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7491b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glDepthRange( z, z );
7501b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glViewport( (int) x - 1, (int) y - 1, 2, 2 );
7511b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7521b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* set the raster (window) position */
7531b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   fx = x - (int) x;
7541b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   fy = y - (int) y;
7551b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glRasterPos4f( fx, fy, 0.0, w );
7561b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7571b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   /* restore matrices, viewport and matrix mode */
7581b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glPopMatrix();
7591b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glMatrixMode( GL_PROJECTION );
7601b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glPopMatrix();
7611b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7621b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul   glPopAttrib();
7631b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul}
7641b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul
7651b258989462e907e45abbdf8743b0a75f22c02b3Brian Paul#endif
7665b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7675b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7685b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul/**********************************************************************/
7695b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul/***                     GL_ARB_window_pos                          ***/
7705b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul/**********************************************************************/
7715b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7725b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2dARB(GLdouble x, GLdouble y)
7735b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
7745b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) x, (GLfloat) y, 0.0F);
7755b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
7765b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7775b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2fARB(GLfloat x, GLfloat y)
7785b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
7795b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB(x, y, 0.0F);
7805b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
7815b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7825b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2iARB(GLint x, GLint y)
7835b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
7845b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) x, (GLfloat) y, 0.0F);
7855b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
7865b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7875b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2sARB(GLshort x, GLshort y)
7885b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
7895b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) x, (GLfloat) y, 0.0F);
7905b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
7915b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7925b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2dvARB(const GLdouble *p)
7935b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
7945b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], 0.0F);
7955b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
7965b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
7975b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2fvARB(const GLfloat *p)
7985b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
7995b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], 0.0F);
8005b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8015b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8025b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2ivARB(const GLint *p)
8035b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8045b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], 0.0F);
8055b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8065b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8075b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos2svARB(const GLshort *p)
8085b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8095b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], 0.0F);
8105b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8115b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8125b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3dARB(GLdouble x, GLdouble y, GLdouble z)
8135b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8145b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) x, (GLfloat) y, (GLfloat) z);
8155b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8165b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8175b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3fARB(GLfloat x, GLfloat y, GLfloat z)
8185b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8195b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   GET_CURRENT_CONTEXT(ctx);
8205b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   GLfloat z2;
8215b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8225b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
8235b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   FLUSH_CURRENT(ctx, 0);
8245b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8255b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   z2 = CLAMP(z, 0.0F, 1.0F) * (ctx->Viewport.Far - ctx->Viewport.Near)
8265b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      + ctx->Viewport.Near;
8275b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8285b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   /* set raster position */
8295b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   ctx->Current.RasterPos[0] = x;
8305b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   ctx->Current.RasterPos[1] = y;
8315b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   ctx->Current.RasterPos[2] = z2;
8325b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   ctx->Current.RasterPos[3] = 0.0F;
8335b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8345b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   ctx->Current.RasterPosValid = GL_TRUE;
8355b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   /* XXX might have to change this */
83686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   ctx->Current.RasterDistance = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
83786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   ctx->Current.RasterFogCoord = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
8385b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8395b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   /* raster color = current color or index */
8405b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   if (ctx->Visual.rgbMode) {
84186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      ctx->Current.RasterColor[0]
84286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0], 0.0F, 1.0F);
84386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      ctx->Current.RasterColor[1]
84486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1], 0.0F, 1.0F);
84586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      ctx->Current.RasterColor[2]
84686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2], 0.0F, 1.0F);
84786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      ctx->Current.RasterColor[3]
84886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3], 0.0F, 1.0F);
8495b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      ctx->Current.RasterSecondaryColor[0]
85086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0], 0.0F, 1.0F);
8515b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      ctx->Current.RasterSecondaryColor[1]
85286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1], 0.0F, 1.0F);
8535b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      ctx->Current.RasterSecondaryColor[2]
85486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2], 0.0F, 1.0F);
8555b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      ctx->Current.RasterSecondaryColor[3]
85686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F);
8575b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   }
8585b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   else {
8595b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      ctx->Current.RasterIndex = ctx->Current.Index;
8605b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   }
8615b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8625b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   /* raster texcoord = current texcoord */
8635b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   {
8645b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      GLuint texSet;
8655b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      for (texSet = 0; texSet < ctx->Const.MaxTextureUnits; texSet++) {
8665b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul         COPY_4FV( ctx->Current.RasterMultiTexCoord[texSet],
86786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                  ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texSet] );
8685b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      }
8695b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   }
8705b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8715b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   if (ctx->RenderMode==GL_SELECT) {
8725b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul      _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
8735b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   }
8745b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8755b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8765b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3iARB(GLint x, GLint y, GLint z)
8775b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8785b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) x, (GLfloat) y, (GLfloat) z);
8795b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8805b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8815b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3sARB(GLshort x, GLshort y, GLshort z)
8825b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8835b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) x, (GLfloat) y, (GLfloat) z);
8845b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8855b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8865b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3dvARB(const GLdouble *p)
8875b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8885b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2]);
8895b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8905b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8915b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3fvARB(const GLfloat *p)
8925b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8935b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB(p[0], p[1], p[2]);
8945b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
8955b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
8965b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3ivARB(const GLint *p)
8975b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
8985b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2]);
8995b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
9005b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
9015b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paulvoid _mesa_WindowPos3svARB(const GLshort *p)
9025b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul{
9035b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul   _mesa_WindowPos3fARB((GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2]);
9045b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul}
9055b7dab2e4c7df1fde0a7fcf28b8b54745b9fcd2eBrian Paul
906