xref: /aosp_15_r20/external/mesa3d/src/mesa/main/rastpos.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Mesa 3-D graphics library
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker  *
6*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
7*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
8*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
9*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
11*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
12*61046927SAndroid Build Coastguard Worker  *
13*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included
14*61046927SAndroid Build Coastguard Worker  * in all copies or substantial portions of the Software.
15*61046927SAndroid Build Coastguard Worker  *
16*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17*61046927SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20*61046927SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21*61046927SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22*61046927SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
23*61046927SAndroid Build Coastguard Worker  */
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker /**
27*61046927SAndroid Build Coastguard Worker  * \file rastpos.c
28*61046927SAndroid Build Coastguard Worker  * Raster position operations.
29*61046927SAndroid Build Coastguard Worker  */
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker #include "util/glheader.h"
32*61046927SAndroid Build Coastguard Worker #include "context.h"
33*61046927SAndroid Build Coastguard Worker #include "feedback.h"
34*61046927SAndroid Build Coastguard Worker #include "macros.h"
35*61046927SAndroid Build Coastguard Worker #include "mtypes.h"
36*61046927SAndroid Build Coastguard Worker #include "rastpos.h"
37*61046927SAndroid Build Coastguard Worker #include "state.h"
38*61046927SAndroid Build Coastguard Worker #include "main/light.h"
39*61046927SAndroid Build Coastguard Worker #include "main/viewport.h"
40*61046927SAndroid Build Coastguard Worker #include "util/bitscan.h"
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker #include "state_tracker/st_cb_rasterpos.h"
43*61046927SAndroid Build Coastguard Worker #include "api_exec_decl.h"
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker /**
47*61046927SAndroid Build Coastguard Worker  * Clip a point against the view volume.
48*61046927SAndroid Build Coastguard Worker  *
49*61046927SAndroid Build Coastguard Worker  * \param v vertex vector describing the point to clip.
50*61046927SAndroid Build Coastguard Worker  *
51*61046927SAndroid Build Coastguard Worker  * \return zero if outside view volume, or one if inside.
52*61046927SAndroid Build Coastguard Worker  */
53*61046927SAndroid Build Coastguard Worker static GLuint
viewclip_point_xy(const GLfloat v[])54*61046927SAndroid Build Coastguard Worker viewclip_point_xy( const GLfloat v[] )
55*61046927SAndroid Build Coastguard Worker {
56*61046927SAndroid Build Coastguard Worker    if (   v[0] > v[3] || v[0] < -v[3]
57*61046927SAndroid Build Coastguard Worker        || v[1] > v[3] || v[1] < -v[3] ) {
58*61046927SAndroid Build Coastguard Worker       return 0;
59*61046927SAndroid Build Coastguard Worker    }
60*61046927SAndroid Build Coastguard Worker    else {
61*61046927SAndroid Build Coastguard Worker       return 1;
62*61046927SAndroid Build Coastguard Worker    }
63*61046927SAndroid Build Coastguard Worker }
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker /**
67*61046927SAndroid Build Coastguard Worker  * Clip a point against the near Z clipping planes.
68*61046927SAndroid Build Coastguard Worker  *
69*61046927SAndroid Build Coastguard Worker  * \param v vertex vector describing the point to clip.
70*61046927SAndroid Build Coastguard Worker  *
71*61046927SAndroid Build Coastguard Worker  * \return zero if outside view volume, or one if inside.
72*61046927SAndroid Build Coastguard Worker  */
73*61046927SAndroid Build Coastguard Worker static GLuint
viewclip_point_near_z(const GLfloat v[])74*61046927SAndroid Build Coastguard Worker viewclip_point_near_z( const GLfloat v[] )
75*61046927SAndroid Build Coastguard Worker {
76*61046927SAndroid Build Coastguard Worker    if (v[2] < -v[3]) {
77*61046927SAndroid Build Coastguard Worker       return 0;
78*61046927SAndroid Build Coastguard Worker    }
79*61046927SAndroid Build Coastguard Worker    else {
80*61046927SAndroid Build Coastguard Worker       return 1;
81*61046927SAndroid Build Coastguard Worker    }
82*61046927SAndroid Build Coastguard Worker }
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker 
85*61046927SAndroid Build Coastguard Worker /**
86*61046927SAndroid Build Coastguard Worker  * Clip a point against the far Z clipping planes.
87*61046927SAndroid Build Coastguard Worker  *
88*61046927SAndroid Build Coastguard Worker  * \param v vertex vector describing the point to clip.
89*61046927SAndroid Build Coastguard Worker  *
90*61046927SAndroid Build Coastguard Worker  * \return zero if outside view volume, or one if inside.
91*61046927SAndroid Build Coastguard Worker  */
92*61046927SAndroid Build Coastguard Worker static GLuint
viewclip_point_far_z(const GLfloat v[])93*61046927SAndroid Build Coastguard Worker viewclip_point_far_z( const GLfloat v[] )
94*61046927SAndroid Build Coastguard Worker {
95*61046927SAndroid Build Coastguard Worker    if (v[2] > v[3]) {
96*61046927SAndroid Build Coastguard Worker       return 0;
97*61046927SAndroid Build Coastguard Worker    }
98*61046927SAndroid Build Coastguard Worker    else {
99*61046927SAndroid Build Coastguard Worker       return 1;
100*61046927SAndroid Build Coastguard Worker    }
101*61046927SAndroid Build Coastguard Worker }
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker /**
105*61046927SAndroid Build Coastguard Worker  * Clip a point against the user clipping planes.
106*61046927SAndroid Build Coastguard Worker  *
107*61046927SAndroid Build Coastguard Worker  * \param ctx GL context.
108*61046927SAndroid Build Coastguard Worker  * \param v vertex vector describing the point to clip.
109*61046927SAndroid Build Coastguard Worker  *
110*61046927SAndroid Build Coastguard Worker  * \return zero if the point was clipped, or one otherwise.
111*61046927SAndroid Build Coastguard Worker  */
112*61046927SAndroid Build Coastguard Worker static GLuint
userclip_point(struct gl_context * ctx,const GLfloat v[])113*61046927SAndroid Build Coastguard Worker userclip_point( struct gl_context *ctx, const GLfloat v[] )
114*61046927SAndroid Build Coastguard Worker {
115*61046927SAndroid Build Coastguard Worker    GLbitfield mask = ctx->Transform.ClipPlanesEnabled;
116*61046927SAndroid Build Coastguard Worker    while (mask) {
117*61046927SAndroid Build Coastguard Worker       const int p = u_bit_scan(&mask);
118*61046927SAndroid Build Coastguard Worker       GLfloat dot = v[0] * ctx->Transform._ClipUserPlane[p][0]
119*61046927SAndroid Build Coastguard Worker          + v[1] * ctx->Transform._ClipUserPlane[p][1]
120*61046927SAndroid Build Coastguard Worker          + v[2] * ctx->Transform._ClipUserPlane[p][2]
121*61046927SAndroid Build Coastguard Worker          + v[3] * ctx->Transform._ClipUserPlane[p][3];
122*61046927SAndroid Build Coastguard Worker 
123*61046927SAndroid Build Coastguard Worker       if (dot < 0.0F) {
124*61046927SAndroid Build Coastguard Worker          return 0;
125*61046927SAndroid Build Coastguard Worker       }
126*61046927SAndroid Build Coastguard Worker    }
127*61046927SAndroid Build Coastguard Worker 
128*61046927SAndroid Build Coastguard Worker    return 1;
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker 
132*61046927SAndroid Build Coastguard Worker /**
133*61046927SAndroid Build Coastguard Worker  * Compute lighting for the raster position.  RGB modes computed.
134*61046927SAndroid Build Coastguard Worker  * \param ctx the context
135*61046927SAndroid Build Coastguard Worker  * \param vertex vertex location
136*61046927SAndroid Build Coastguard Worker  * \param normal normal vector
137*61046927SAndroid Build Coastguard Worker  * \param Rcolor returned color
138*61046927SAndroid Build Coastguard Worker  * \param Rspec returned specular color (if separate specular enabled)
139*61046927SAndroid Build Coastguard Worker  */
140*61046927SAndroid Build Coastguard Worker static void
shade_rastpos(struct gl_context * ctx,const GLfloat vertex[4],const GLfloat normal[3],GLfloat Rcolor[4],GLfloat Rspec[4])141*61046927SAndroid Build Coastguard Worker shade_rastpos(struct gl_context *ctx,
142*61046927SAndroid Build Coastguard Worker               const GLfloat vertex[4],
143*61046927SAndroid Build Coastguard Worker               const GLfloat normal[3],
144*61046927SAndroid Build Coastguard Worker               GLfloat Rcolor[4],
145*61046927SAndroid Build Coastguard Worker               GLfloat Rspec[4])
146*61046927SAndroid Build Coastguard Worker {
147*61046927SAndroid Build Coastguard Worker    /*const*/ GLfloat (*base)[3] = ctx->Light._BaseColor;
148*61046927SAndroid Build Coastguard Worker    GLbitfield mask;
149*61046927SAndroid Build Coastguard Worker    GLfloat diffuseColor[4], specularColor[4];  /* for RGB mode only */
150*61046927SAndroid Build Coastguard Worker 
151*61046927SAndroid Build Coastguard Worker    _mesa_update_light_materials(ctx);
152*61046927SAndroid Build Coastguard Worker 
153*61046927SAndroid Build Coastguard Worker    COPY_3V(diffuseColor, base[0]);
154*61046927SAndroid Build Coastguard Worker    diffuseColor[3] = CLAMP(
155*61046927SAndroid Build Coastguard Worker       ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3], 0.0F, 1.0F );
156*61046927SAndroid Build Coastguard Worker    ASSIGN_4V(specularColor, 0.0, 0.0, 0.0, 1.0);
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker    mask = ctx->Light._EnabledLights;
159*61046927SAndroid Build Coastguard Worker    while (mask) {
160*61046927SAndroid Build Coastguard Worker       const int i = u_bit_scan(&mask);
161*61046927SAndroid Build Coastguard Worker       struct gl_light *light = &ctx->Light.Light[i];
162*61046927SAndroid Build Coastguard Worker       struct gl_light_uniforms *lu = &ctx->Light.LightSource[i];
163*61046927SAndroid Build Coastguard Worker       GLfloat attenuation = 1.0;
164*61046927SAndroid Build Coastguard Worker       GLfloat VP[3]; /* vector from vertex to light pos */
165*61046927SAndroid Build Coastguard Worker       GLfloat n_dot_VP;
166*61046927SAndroid Build Coastguard Worker       GLfloat diffuseContrib[3], specularContrib[3];
167*61046927SAndroid Build Coastguard Worker 
168*61046927SAndroid Build Coastguard Worker       if (!(light->_Flags & LIGHT_POSITIONAL)) {
169*61046927SAndroid Build Coastguard Worker          /* light at infinity */
170*61046927SAndroid Build Coastguard Worker 	 COPY_3V(VP, light->_VP_inf_norm);
171*61046927SAndroid Build Coastguard Worker 	 attenuation = light->_VP_inf_spot_attenuation;
172*61046927SAndroid Build Coastguard Worker       }
173*61046927SAndroid Build Coastguard Worker       else {
174*61046927SAndroid Build Coastguard Worker          /* local/positional light */
175*61046927SAndroid Build Coastguard Worker 	 GLfloat d;
176*61046927SAndroid Build Coastguard Worker 
177*61046927SAndroid Build Coastguard Worker          /* VP = vector from vertex pos to light[i].pos */
178*61046927SAndroid Build Coastguard Worker 	 SUB_3V(VP, light->_Position, vertex);
179*61046927SAndroid Build Coastguard Worker          /* d = length(VP) */
180*61046927SAndroid Build Coastguard Worker 	 d = (GLfloat) LEN_3FV( VP );
181*61046927SAndroid Build Coastguard Worker 	 if (d > 1.0e-6F) {
182*61046927SAndroid Build Coastguard Worker             /* normalize VP */
183*61046927SAndroid Build Coastguard Worker 	    GLfloat invd = 1.0F / d;
184*61046927SAndroid Build Coastguard Worker 	    SELF_SCALE_SCALAR_3V(VP, invd);
185*61046927SAndroid Build Coastguard Worker 	 }
186*61046927SAndroid Build Coastguard Worker 
187*61046927SAndroid Build Coastguard Worker          /* atti */
188*61046927SAndroid Build Coastguard Worker 	 attenuation = 1.0F / (lu->ConstantAttenuation + d *
189*61046927SAndroid Build Coastguard Worker 			       (lu->LinearAttenuation + d *
190*61046927SAndroid Build Coastguard Worker 				lu->QuadraticAttenuation));
191*61046927SAndroid Build Coastguard Worker 
192*61046927SAndroid Build Coastguard Worker 	 if (light->_Flags & LIGHT_SPOT) {
193*61046927SAndroid Build Coastguard Worker 	    GLfloat PV_dot_dir = - DOT3(VP, light->_NormSpotDirection);
194*61046927SAndroid Build Coastguard Worker 
195*61046927SAndroid Build Coastguard Worker 	    if (PV_dot_dir<lu->_CosCutoff) {
196*61046927SAndroid Build Coastguard Worker 	       continue;
197*61046927SAndroid Build Coastguard Worker 	    }
198*61046927SAndroid Build Coastguard Worker 	    else {
199*61046927SAndroid Build Coastguard Worker                GLfloat spot = powf(PV_dot_dir, lu->SpotExponent);
200*61046927SAndroid Build Coastguard Worker 	       attenuation *= spot;
201*61046927SAndroid Build Coastguard Worker 	    }
202*61046927SAndroid Build Coastguard Worker 	 }
203*61046927SAndroid Build Coastguard Worker       }
204*61046927SAndroid Build Coastguard Worker 
205*61046927SAndroid Build Coastguard Worker       if (attenuation < 1e-3F)
206*61046927SAndroid Build Coastguard Worker 	 continue;
207*61046927SAndroid Build Coastguard Worker 
208*61046927SAndroid Build Coastguard Worker       n_dot_VP = DOT3( normal, VP );
209*61046927SAndroid Build Coastguard Worker 
210*61046927SAndroid Build Coastguard Worker       if (n_dot_VP < 0.0F) {
211*61046927SAndroid Build Coastguard Worker 	 ACC_SCALE_SCALAR_3V(diffuseColor, attenuation, light->_MatAmbient[0]);
212*61046927SAndroid Build Coastguard Worker 	 continue;
213*61046927SAndroid Build Coastguard Worker       }
214*61046927SAndroid Build Coastguard Worker 
215*61046927SAndroid Build Coastguard Worker       /* Ambient + diffuse */
216*61046927SAndroid Build Coastguard Worker       COPY_3V(diffuseContrib, light->_MatAmbient[0]);
217*61046927SAndroid Build Coastguard Worker       ACC_SCALE_SCALAR_3V(diffuseContrib, n_dot_VP, light->_MatDiffuse[0]);
218*61046927SAndroid Build Coastguard Worker 
219*61046927SAndroid Build Coastguard Worker       /* Specular */
220*61046927SAndroid Build Coastguard Worker       {
221*61046927SAndroid Build Coastguard Worker          const GLfloat *h;
222*61046927SAndroid Build Coastguard Worker          GLfloat n_dot_h;
223*61046927SAndroid Build Coastguard Worker 
224*61046927SAndroid Build Coastguard Worker          ASSIGN_3V(specularContrib, 0.0, 0.0, 0.0);
225*61046927SAndroid Build Coastguard Worker 
226*61046927SAndroid Build Coastguard Worker 	 if (ctx->Light.Model.LocalViewer) {
227*61046927SAndroid Build Coastguard Worker 	    GLfloat v[3];
228*61046927SAndroid Build Coastguard Worker 	    COPY_3V(v, vertex);
229*61046927SAndroid Build Coastguard Worker 	    NORMALIZE_3FV(v);
230*61046927SAndroid Build Coastguard Worker 	    SUB_3V(VP, VP, v);
231*61046927SAndroid Build Coastguard Worker             NORMALIZE_3FV(VP);
232*61046927SAndroid Build Coastguard Worker 	    h = VP;
233*61046927SAndroid Build Coastguard Worker 	 }
234*61046927SAndroid Build Coastguard Worker 	 else if (light->_Flags & LIGHT_POSITIONAL) {
235*61046927SAndroid Build Coastguard Worker 	    ACC_3V(VP, ctx->_EyeZDir);
236*61046927SAndroid Build Coastguard Worker             NORMALIZE_3FV(VP);
237*61046927SAndroid Build Coastguard Worker 	    h = VP;
238*61046927SAndroid Build Coastguard Worker 	 }
239*61046927SAndroid Build Coastguard Worker          else {
240*61046927SAndroid Build Coastguard Worker 	    h = light->_h_inf_norm;
241*61046927SAndroid Build Coastguard Worker 	 }
242*61046927SAndroid Build Coastguard Worker 
243*61046927SAndroid Build Coastguard Worker 	 n_dot_h = DOT3(normal, h);
244*61046927SAndroid Build Coastguard Worker 
245*61046927SAndroid Build Coastguard Worker 	 if (n_dot_h > 0.0F) {
246*61046927SAndroid Build Coastguard Worker 	    GLfloat shine;
247*61046927SAndroid Build Coastguard Worker 	    GLfloat spec_coef;
248*61046927SAndroid Build Coastguard Worker 
249*61046927SAndroid Build Coastguard Worker 	    shine = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_SHININESS][0];
250*61046927SAndroid Build Coastguard Worker 	    spec_coef = powf(n_dot_h, shine);
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker 	    if (spec_coef > 1.0e-10F) {
253*61046927SAndroid Build Coastguard Worker                if (ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) {
254*61046927SAndroid Build Coastguard Worker                   ACC_SCALE_SCALAR_3V( specularContrib, spec_coef,
255*61046927SAndroid Build Coastguard Worker                                        light->_MatSpecular[0]);
256*61046927SAndroid Build Coastguard Worker                }
257*61046927SAndroid Build Coastguard Worker                else {
258*61046927SAndroid Build Coastguard Worker                   ACC_SCALE_SCALAR_3V( diffuseContrib, spec_coef,
259*61046927SAndroid Build Coastguard Worker                                        light->_MatSpecular[0]);
260*61046927SAndroid Build Coastguard Worker                }
261*61046927SAndroid Build Coastguard Worker 	    }
262*61046927SAndroid Build Coastguard Worker 	 }
263*61046927SAndroid Build Coastguard Worker       }
264*61046927SAndroid Build Coastguard Worker 
265*61046927SAndroid Build Coastguard Worker       ACC_SCALE_SCALAR_3V( diffuseColor, attenuation, diffuseContrib );
266*61046927SAndroid Build Coastguard Worker       ACC_SCALE_SCALAR_3V( specularColor, attenuation, specularContrib );
267*61046927SAndroid Build Coastguard Worker    }
268*61046927SAndroid Build Coastguard Worker 
269*61046927SAndroid Build Coastguard Worker    Rcolor[0] = CLAMP(diffuseColor[0], 0.0F, 1.0F);
270*61046927SAndroid Build Coastguard Worker    Rcolor[1] = CLAMP(diffuseColor[1], 0.0F, 1.0F);
271*61046927SAndroid Build Coastguard Worker    Rcolor[2] = CLAMP(diffuseColor[2], 0.0F, 1.0F);
272*61046927SAndroid Build Coastguard Worker    Rcolor[3] = CLAMP(diffuseColor[3], 0.0F, 1.0F);
273*61046927SAndroid Build Coastguard Worker    Rspec[0] = CLAMP(specularColor[0], 0.0F, 1.0F);
274*61046927SAndroid Build Coastguard Worker    Rspec[1] = CLAMP(specularColor[1], 0.0F, 1.0F);
275*61046927SAndroid Build Coastguard Worker    Rspec[2] = CLAMP(specularColor[2], 0.0F, 1.0F);
276*61046927SAndroid Build Coastguard Worker    Rspec[3] = CLAMP(specularColor[3], 0.0F, 1.0F);
277*61046927SAndroid Build Coastguard Worker }
278*61046927SAndroid Build Coastguard Worker 
279*61046927SAndroid Build Coastguard Worker 
280*61046927SAndroid Build Coastguard Worker /**
281*61046927SAndroid Build Coastguard Worker  * Do texgen needed for glRasterPos.
282*61046927SAndroid Build Coastguard Worker  * \param ctx  rendering context
283*61046927SAndroid Build Coastguard Worker  * \param vObj  object-space vertex coordinate
284*61046927SAndroid Build Coastguard Worker  * \param vEye  eye-space vertex coordinate
285*61046927SAndroid Build Coastguard Worker  * \param normal  vertex normal
286*61046927SAndroid Build Coastguard Worker  * \param unit  texture unit number
287*61046927SAndroid Build Coastguard Worker  * \param texcoord  incoming texcoord and resulting texcoord
288*61046927SAndroid Build Coastguard Worker  */
289*61046927SAndroid Build Coastguard Worker static void
compute_texgen(struct gl_context * ctx,const GLfloat vObj[4],const GLfloat vEye[4],const GLfloat normal[3],GLuint unit,GLfloat texcoord[4])290*61046927SAndroid Build Coastguard Worker compute_texgen(struct gl_context *ctx, const GLfloat vObj[4], const GLfloat vEye[4],
291*61046927SAndroid Build Coastguard Worker                const GLfloat normal[3], GLuint unit, GLfloat texcoord[4])
292*61046927SAndroid Build Coastguard Worker {
293*61046927SAndroid Build Coastguard Worker    const struct gl_fixedfunc_texture_unit *texUnit =
294*61046927SAndroid Build Coastguard Worker       &ctx->Texture.FixedFuncUnit[unit];
295*61046927SAndroid Build Coastguard Worker 
296*61046927SAndroid Build Coastguard Worker    /* always compute sphere map terms, just in case */
297*61046927SAndroid Build Coastguard Worker    GLfloat u[3], two_nu, rx, ry, rz, m, mInv;
298*61046927SAndroid Build Coastguard Worker    COPY_3V(u, vEye);
299*61046927SAndroid Build Coastguard Worker    NORMALIZE_3FV(u);
300*61046927SAndroid Build Coastguard Worker    two_nu = 2.0F * DOT3(normal, u);
301*61046927SAndroid Build Coastguard Worker    rx = u[0] - normal[0] * two_nu;
302*61046927SAndroid Build Coastguard Worker    ry = u[1] - normal[1] * two_nu;
303*61046927SAndroid Build Coastguard Worker    rz = u[2] - normal[2] * two_nu;
304*61046927SAndroid Build Coastguard Worker    m = rx * rx + ry * ry + (rz + 1.0F) * (rz + 1.0F);
305*61046927SAndroid Build Coastguard Worker    if (m > 0.0F)
306*61046927SAndroid Build Coastguard Worker       mInv = 0.5F * (1.0f / sqrtf(m));
307*61046927SAndroid Build Coastguard Worker    else
308*61046927SAndroid Build Coastguard Worker       mInv = 0.0F;
309*61046927SAndroid Build Coastguard Worker 
310*61046927SAndroid Build Coastguard Worker    if (texUnit->TexGenEnabled & S_BIT) {
311*61046927SAndroid Build Coastguard Worker       switch (texUnit->GenS.Mode) {
312*61046927SAndroid Build Coastguard Worker          case GL_OBJECT_LINEAR:
313*61046927SAndroid Build Coastguard Worker             texcoord[0] = DOT4(vObj, texUnit->ObjectPlane[GEN_S]);
314*61046927SAndroid Build Coastguard Worker             break;
315*61046927SAndroid Build Coastguard Worker          case GL_EYE_LINEAR:
316*61046927SAndroid Build Coastguard Worker             texcoord[0] = DOT4(vEye, texUnit->EyePlane[GEN_S]);
317*61046927SAndroid Build Coastguard Worker             break;
318*61046927SAndroid Build Coastguard Worker          case GL_SPHERE_MAP:
319*61046927SAndroid Build Coastguard Worker             texcoord[0] = rx * mInv + 0.5F;
320*61046927SAndroid Build Coastguard Worker             break;
321*61046927SAndroid Build Coastguard Worker          case GL_REFLECTION_MAP:
322*61046927SAndroid Build Coastguard Worker             texcoord[0] = rx;
323*61046927SAndroid Build Coastguard Worker             break;
324*61046927SAndroid Build Coastguard Worker          case GL_NORMAL_MAP:
325*61046927SAndroid Build Coastguard Worker             texcoord[0] = normal[0];
326*61046927SAndroid Build Coastguard Worker             break;
327*61046927SAndroid Build Coastguard Worker          default:
328*61046927SAndroid Build Coastguard Worker             _mesa_problem(ctx, "Bad S texgen in compute_texgen()");
329*61046927SAndroid Build Coastguard Worker             return;
330*61046927SAndroid Build Coastguard Worker       }
331*61046927SAndroid Build Coastguard Worker    }
332*61046927SAndroid Build Coastguard Worker 
333*61046927SAndroid Build Coastguard Worker    if (texUnit->TexGenEnabled & T_BIT) {
334*61046927SAndroid Build Coastguard Worker       switch (texUnit->GenT.Mode) {
335*61046927SAndroid Build Coastguard Worker          case GL_OBJECT_LINEAR:
336*61046927SAndroid Build Coastguard Worker             texcoord[1] = DOT4(vObj, texUnit->ObjectPlane[GEN_T]);
337*61046927SAndroid Build Coastguard Worker             break;
338*61046927SAndroid Build Coastguard Worker          case GL_EYE_LINEAR:
339*61046927SAndroid Build Coastguard Worker             texcoord[1] = DOT4(vEye, texUnit->EyePlane[GEN_T]);
340*61046927SAndroid Build Coastguard Worker             break;
341*61046927SAndroid Build Coastguard Worker          case GL_SPHERE_MAP:
342*61046927SAndroid Build Coastguard Worker             texcoord[1] = ry * mInv + 0.5F;
343*61046927SAndroid Build Coastguard Worker             break;
344*61046927SAndroid Build Coastguard Worker          case GL_REFLECTION_MAP:
345*61046927SAndroid Build Coastguard Worker             texcoord[1] = ry;
346*61046927SAndroid Build Coastguard Worker             break;
347*61046927SAndroid Build Coastguard Worker          case GL_NORMAL_MAP:
348*61046927SAndroid Build Coastguard Worker             texcoord[1] = normal[1];
349*61046927SAndroid Build Coastguard Worker             break;
350*61046927SAndroid Build Coastguard Worker          default:
351*61046927SAndroid Build Coastguard Worker             _mesa_problem(ctx, "Bad T texgen in compute_texgen()");
352*61046927SAndroid Build Coastguard Worker             return;
353*61046927SAndroid Build Coastguard Worker       }
354*61046927SAndroid Build Coastguard Worker    }
355*61046927SAndroid Build Coastguard Worker 
356*61046927SAndroid Build Coastguard Worker    if (texUnit->TexGenEnabled & R_BIT) {
357*61046927SAndroid Build Coastguard Worker       switch (texUnit->GenR.Mode) {
358*61046927SAndroid Build Coastguard Worker          case GL_OBJECT_LINEAR:
359*61046927SAndroid Build Coastguard Worker             texcoord[2] = DOT4(vObj, texUnit->ObjectPlane[GEN_R]);
360*61046927SAndroid Build Coastguard Worker             break;
361*61046927SAndroid Build Coastguard Worker          case GL_EYE_LINEAR:
362*61046927SAndroid Build Coastguard Worker             texcoord[2] = DOT4(vEye, texUnit->EyePlane[GEN_R]);
363*61046927SAndroid Build Coastguard Worker             break;
364*61046927SAndroid Build Coastguard Worker          case GL_REFLECTION_MAP:
365*61046927SAndroid Build Coastguard Worker             texcoord[2] = rz;
366*61046927SAndroid Build Coastguard Worker             break;
367*61046927SAndroid Build Coastguard Worker          case GL_NORMAL_MAP:
368*61046927SAndroid Build Coastguard Worker             texcoord[2] = normal[2];
369*61046927SAndroid Build Coastguard Worker             break;
370*61046927SAndroid Build Coastguard Worker          default:
371*61046927SAndroid Build Coastguard Worker             _mesa_problem(ctx, "Bad R texgen in compute_texgen()");
372*61046927SAndroid Build Coastguard Worker             return;
373*61046927SAndroid Build Coastguard Worker       }
374*61046927SAndroid Build Coastguard Worker    }
375*61046927SAndroid Build Coastguard Worker 
376*61046927SAndroid Build Coastguard Worker    if (texUnit->TexGenEnabled & Q_BIT) {
377*61046927SAndroid Build Coastguard Worker       switch (texUnit->GenQ.Mode) {
378*61046927SAndroid Build Coastguard Worker          case GL_OBJECT_LINEAR:
379*61046927SAndroid Build Coastguard Worker             texcoord[3] = DOT4(vObj, texUnit->ObjectPlane[GEN_Q]);
380*61046927SAndroid Build Coastguard Worker             break;
381*61046927SAndroid Build Coastguard Worker          case GL_EYE_LINEAR:
382*61046927SAndroid Build Coastguard Worker             texcoord[3] = DOT4(vEye, texUnit->EyePlane[GEN_Q]);
383*61046927SAndroid Build Coastguard Worker             break;
384*61046927SAndroid Build Coastguard Worker          default:
385*61046927SAndroid Build Coastguard Worker             _mesa_problem(ctx, "Bad Q texgen in compute_texgen()");
386*61046927SAndroid Build Coastguard Worker             return;
387*61046927SAndroid Build Coastguard Worker       }
388*61046927SAndroid Build Coastguard Worker    }
389*61046927SAndroid Build Coastguard Worker }
390*61046927SAndroid Build Coastguard Worker 
391*61046927SAndroid Build Coastguard Worker 
392*61046927SAndroid Build Coastguard Worker /**
393*61046927SAndroid Build Coastguard Worker  * glRasterPos transformation.
394*61046927SAndroid Build Coastguard Worker  *
395*61046927SAndroid Build Coastguard Worker  * \param vObj  vertex position in object space
396*61046927SAndroid Build Coastguard Worker  */
397*61046927SAndroid Build Coastguard Worker void
_mesa_RasterPos(struct gl_context * ctx,const GLfloat vObj[4])398*61046927SAndroid Build Coastguard Worker _mesa_RasterPos(struct gl_context *ctx, const GLfloat vObj[4])
399*61046927SAndroid Build Coastguard Worker {
400*61046927SAndroid Build Coastguard Worker    ctx->PopAttribState |= GL_CURRENT_BIT;
401*61046927SAndroid Build Coastguard Worker 
402*61046927SAndroid Build Coastguard Worker    if (_mesa_arb_vertex_program_enabled(ctx)) {
403*61046927SAndroid Build Coastguard Worker       /* XXX implement this */
404*61046927SAndroid Build Coastguard Worker       _mesa_problem(ctx, "Vertex programs not implemented for glRasterPos");
405*61046927SAndroid Build Coastguard Worker       return;
406*61046927SAndroid Build Coastguard Worker    }
407*61046927SAndroid Build Coastguard Worker    else {
408*61046927SAndroid Build Coastguard Worker       GLfloat eye[4], clip[4], ndc[3], d;
409*61046927SAndroid Build Coastguard Worker       GLfloat *norm, eyenorm[3];
410*61046927SAndroid Build Coastguard Worker       GLfloat *objnorm = ctx->Current.Attrib[VERT_ATTRIB_NORMAL];
411*61046927SAndroid Build Coastguard Worker       float scale[3], translate[3];
412*61046927SAndroid Build Coastguard Worker 
413*61046927SAndroid Build Coastguard Worker       /* apply modelview matrix:  eye = MV * obj */
414*61046927SAndroid Build Coastguard Worker       TRANSFORM_POINT( eye, ctx->ModelviewMatrixStack.Top->m, vObj );
415*61046927SAndroid Build Coastguard Worker       /* apply projection matrix:  clip = Proj * eye */
416*61046927SAndroid Build Coastguard Worker       TRANSFORM_POINT( clip, ctx->ProjectionMatrixStack.Top->m, eye );
417*61046927SAndroid Build Coastguard Worker 
418*61046927SAndroid Build Coastguard Worker       /* clip to view volume. */
419*61046927SAndroid Build Coastguard Worker       if (!ctx->Transform.DepthClampNear) {
420*61046927SAndroid Build Coastguard Worker          if (viewclip_point_near_z(clip) == 0) {
421*61046927SAndroid Build Coastguard Worker             ctx->Current.RasterPosValid = GL_FALSE;
422*61046927SAndroid Build Coastguard Worker             return;
423*61046927SAndroid Build Coastguard Worker          }
424*61046927SAndroid Build Coastguard Worker       }
425*61046927SAndroid Build Coastguard Worker       if (!ctx->Transform.DepthClampFar) {
426*61046927SAndroid Build Coastguard Worker          if (viewclip_point_far_z(clip) == 0) {
427*61046927SAndroid Build Coastguard Worker             ctx->Current.RasterPosValid = GL_FALSE;
428*61046927SAndroid Build Coastguard Worker             return;
429*61046927SAndroid Build Coastguard Worker          }
430*61046927SAndroid Build Coastguard Worker       }
431*61046927SAndroid Build Coastguard Worker       if (!ctx->Transform.RasterPositionUnclipped) {
432*61046927SAndroid Build Coastguard Worker          if (viewclip_point_xy(clip) == 0) {
433*61046927SAndroid Build Coastguard Worker             ctx->Current.RasterPosValid = GL_FALSE;
434*61046927SAndroid Build Coastguard Worker             return;
435*61046927SAndroid Build Coastguard Worker          }
436*61046927SAndroid Build Coastguard Worker       }
437*61046927SAndroid Build Coastguard Worker 
438*61046927SAndroid Build Coastguard Worker       /* clip to user clipping planes */
439*61046927SAndroid Build Coastguard Worker       if (ctx->Transform.ClipPlanesEnabled && !userclip_point(ctx, clip)) {
440*61046927SAndroid Build Coastguard Worker          ctx->Current.RasterPosValid = GL_FALSE;
441*61046927SAndroid Build Coastguard Worker          return;
442*61046927SAndroid Build Coastguard Worker       }
443*61046927SAndroid Build Coastguard Worker 
444*61046927SAndroid Build Coastguard Worker       /* ndc = clip / W */
445*61046927SAndroid Build Coastguard Worker       d = (clip[3] == 0.0F) ? 1.0F : 1.0F / clip[3];
446*61046927SAndroid Build Coastguard Worker       ndc[0] = clip[0] * d;
447*61046927SAndroid Build Coastguard Worker       ndc[1] = clip[1] * d;
448*61046927SAndroid Build Coastguard Worker       ndc[2] = clip[2] * d;
449*61046927SAndroid Build Coastguard Worker       /* wincoord = viewport_mapping(ndc) */
450*61046927SAndroid Build Coastguard Worker       _mesa_get_viewport_xform(ctx, 0, scale, translate);
451*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterPos[0] = ndc[0] * scale[0] + translate[0];
452*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterPos[1] = ndc[1] * scale[1] + translate[1];
453*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterPos[2] = ndc[2] * scale[2] + translate[2];
454*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterPos[3] = clip[3];
455*61046927SAndroid Build Coastguard Worker 
456*61046927SAndroid Build Coastguard Worker       if (ctx->Transform.DepthClampNear &&
457*61046927SAndroid Build Coastguard Worker           ctx->Transform.DepthClampFar) {
458*61046927SAndroid Build Coastguard Worker          ctx->Current.RasterPos[3] = CLAMP(ctx->Current.RasterPos[3],
459*61046927SAndroid Build Coastguard Worker                                            ctx->ViewportArray[0].Near,
460*61046927SAndroid Build Coastguard Worker                                            ctx->ViewportArray[0].Far);
461*61046927SAndroid Build Coastguard Worker       } else {
462*61046927SAndroid Build Coastguard Worker          /* Clamp against near and far plane separately */
463*61046927SAndroid Build Coastguard Worker          if (ctx->Transform.DepthClampNear) {
464*61046927SAndroid Build Coastguard Worker             ctx->Current.RasterPos[3] = MAX2(ctx->Current.RasterPos[3],
465*61046927SAndroid Build Coastguard Worker                                              ctx->ViewportArray[0].Near);
466*61046927SAndroid Build Coastguard Worker          }
467*61046927SAndroid Build Coastguard Worker 
468*61046927SAndroid Build Coastguard Worker          if (ctx->Transform.DepthClampFar) {
469*61046927SAndroid Build Coastguard Worker             ctx->Current.RasterPos[3] = MIN2(ctx->Current.RasterPos[3],
470*61046927SAndroid Build Coastguard Worker                                              ctx->ViewportArray[0].Far);
471*61046927SAndroid Build Coastguard Worker          }
472*61046927SAndroid Build Coastguard Worker       }
473*61046927SAndroid Build Coastguard Worker 
474*61046927SAndroid Build Coastguard Worker       /* compute raster distance */
475*61046927SAndroid Build Coastguard Worker       if (ctx->Fog.FogCoordinateSource == GL_FOG_COORDINATE_EXT)
476*61046927SAndroid Build Coastguard Worker          ctx->Current.RasterDistance = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
477*61046927SAndroid Build Coastguard Worker       else
478*61046927SAndroid Build Coastguard Worker          ctx->Current.RasterDistance =
479*61046927SAndroid Build Coastguard Worker                         sqrtf( eye[0]*eye[0] + eye[1]*eye[1] + eye[2]*eye[2] );
480*61046927SAndroid Build Coastguard Worker 
481*61046927SAndroid Build Coastguard Worker       /* compute transformed normal vector (for lighting or texgen) */
482*61046927SAndroid Build Coastguard Worker       if (ctx->_NeedEyeCoords) {
483*61046927SAndroid Build Coastguard Worker          const GLfloat *inv = ctx->ModelviewMatrixStack.Top->inv;
484*61046927SAndroid Build Coastguard Worker          TRANSFORM_NORMAL( eyenorm, objnorm, inv );
485*61046927SAndroid Build Coastguard Worker          norm = eyenorm;
486*61046927SAndroid Build Coastguard Worker       }
487*61046927SAndroid Build Coastguard Worker       else {
488*61046927SAndroid Build Coastguard Worker          norm = objnorm;
489*61046927SAndroid Build Coastguard Worker       }
490*61046927SAndroid Build Coastguard Worker 
491*61046927SAndroid Build Coastguard Worker       /* update raster color */
492*61046927SAndroid Build Coastguard Worker       if (ctx->Light.Enabled) {
493*61046927SAndroid Build Coastguard Worker          /* lighting */
494*61046927SAndroid Build Coastguard Worker          shade_rastpos( ctx, vObj, norm,
495*61046927SAndroid Build Coastguard Worker                         ctx->Current.RasterColor,
496*61046927SAndroid Build Coastguard Worker                         ctx->Current.RasterSecondaryColor );
497*61046927SAndroid Build Coastguard Worker       }
498*61046927SAndroid Build Coastguard Worker       else {
499*61046927SAndroid Build Coastguard Worker          /* use current color */
500*61046927SAndroid Build Coastguard Worker 	 COPY_4FV(ctx->Current.RasterColor,
501*61046927SAndroid Build Coastguard Worker 		  ctx->Current.Attrib[VERT_ATTRIB_COLOR0]);
502*61046927SAndroid Build Coastguard Worker 	 COPY_4FV(ctx->Current.RasterSecondaryColor,
503*61046927SAndroid Build Coastguard Worker 		  ctx->Current.Attrib[VERT_ATTRIB_COLOR1]);
504*61046927SAndroid Build Coastguard Worker       }
505*61046927SAndroid Build Coastguard Worker 
506*61046927SAndroid Build Coastguard Worker       /* texture coords */
507*61046927SAndroid Build Coastguard Worker       {
508*61046927SAndroid Build Coastguard Worker          GLuint u;
509*61046927SAndroid Build Coastguard Worker          for (u = 0; u < ctx->Const.MaxTextureCoordUnits; u++) {
510*61046927SAndroid Build Coastguard Worker             GLfloat tc[4];
511*61046927SAndroid Build Coastguard Worker             COPY_4V(tc, ctx->Current.Attrib[VERT_ATTRIB_TEX0 + u]);
512*61046927SAndroid Build Coastguard Worker             if (ctx->Texture.FixedFuncUnit[u].TexGenEnabled) {
513*61046927SAndroid Build Coastguard Worker                compute_texgen(ctx, vObj, eye, norm, u, tc);
514*61046927SAndroid Build Coastguard Worker             }
515*61046927SAndroid Build Coastguard Worker             TRANSFORM_POINT(ctx->Current.RasterTexCoords[u],
516*61046927SAndroid Build Coastguard Worker                             ctx->TextureMatrixStack[u].Top->m, tc);
517*61046927SAndroid Build Coastguard Worker          }
518*61046927SAndroid Build Coastguard Worker       }
519*61046927SAndroid Build Coastguard Worker 
520*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterPosValid = GL_TRUE;
521*61046927SAndroid Build Coastguard Worker    }
522*61046927SAndroid Build Coastguard Worker 
523*61046927SAndroid Build Coastguard Worker    if (ctx->RenderMode == GL_SELECT) {
524*61046927SAndroid Build Coastguard Worker       _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
525*61046927SAndroid Build Coastguard Worker    }
526*61046927SAndroid Build Coastguard Worker }
527*61046927SAndroid Build Coastguard Worker 
528*61046927SAndroid Build Coastguard Worker 
529*61046927SAndroid Build Coastguard Worker /**
530*61046927SAndroid Build Coastguard Worker  * Helper function for all the RasterPos functions.
531*61046927SAndroid Build Coastguard Worker  */
532*61046927SAndroid Build Coastguard Worker static void
rasterpos(GLfloat x,GLfloat y,GLfloat z,GLfloat w)533*61046927SAndroid Build Coastguard Worker rasterpos(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
534*61046927SAndroid Build Coastguard Worker {
535*61046927SAndroid Build Coastguard Worker    GET_CURRENT_CONTEXT(ctx);
536*61046927SAndroid Build Coastguard Worker    GLfloat p[4];
537*61046927SAndroid Build Coastguard Worker 
538*61046927SAndroid Build Coastguard Worker    p[0] = x;
539*61046927SAndroid Build Coastguard Worker    p[1] = y;
540*61046927SAndroid Build Coastguard Worker    p[2] = z;
541*61046927SAndroid Build Coastguard Worker    p[3] = w;
542*61046927SAndroid Build Coastguard Worker 
543*61046927SAndroid Build Coastguard Worker    FLUSH_VERTICES(ctx, 0, 0);
544*61046927SAndroid Build Coastguard Worker    FLUSH_CURRENT(ctx, 0);
545*61046927SAndroid Build Coastguard Worker 
546*61046927SAndroid Build Coastguard Worker    if (ctx->NewState)
547*61046927SAndroid Build Coastguard Worker       _mesa_update_state( ctx );
548*61046927SAndroid Build Coastguard Worker 
549*61046927SAndroid Build Coastguard Worker    st_RasterPos(ctx, p);
550*61046927SAndroid Build Coastguard Worker }
551*61046927SAndroid Build Coastguard Worker 
552*61046927SAndroid Build Coastguard Worker 
553*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2d(GLdouble x,GLdouble y)554*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2d(GLdouble x, GLdouble y)
555*61046927SAndroid Build Coastguard Worker {
556*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat)x, (GLfloat)y, (GLfloat)0.0, (GLfloat)1.0);
557*61046927SAndroid Build Coastguard Worker }
558*61046927SAndroid Build Coastguard Worker 
559*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2f(GLfloat x,GLfloat y)560*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2f(GLfloat x, GLfloat y)
561*61046927SAndroid Build Coastguard Worker {
562*61046927SAndroid Build Coastguard Worker    rasterpos(x, y, 0.0F, 1.0F);
563*61046927SAndroid Build Coastguard Worker }
564*61046927SAndroid Build Coastguard Worker 
565*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2i(GLint x,GLint y)566*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2i(GLint x, GLint y)
567*61046927SAndroid Build Coastguard Worker {
568*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
569*61046927SAndroid Build Coastguard Worker }
570*61046927SAndroid Build Coastguard Worker 
571*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2s(GLshort x,GLshort y)572*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2s(GLshort x, GLshort y)
573*61046927SAndroid Build Coastguard Worker {
574*61046927SAndroid Build Coastguard Worker    rasterpos(x, y, 0.0F, 1.0F);
575*61046927SAndroid Build Coastguard Worker }
576*61046927SAndroid Build Coastguard Worker 
577*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3d(GLdouble x,GLdouble y,GLdouble z)578*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
579*61046927SAndroid Build Coastguard Worker {
580*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
581*61046927SAndroid Build Coastguard Worker }
582*61046927SAndroid Build Coastguard Worker 
583*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3f(GLfloat x,GLfloat y,GLfloat z)584*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
585*61046927SAndroid Build Coastguard Worker {
586*61046927SAndroid Build Coastguard Worker    rasterpos(x, y, z, 1.0F);
587*61046927SAndroid Build Coastguard Worker }
588*61046927SAndroid Build Coastguard Worker 
589*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3i(GLint x,GLint y,GLint z)590*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3i(GLint x, GLint y, GLint z)
591*61046927SAndroid Build Coastguard Worker {
592*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
593*61046927SAndroid Build Coastguard Worker }
594*61046927SAndroid Build Coastguard Worker 
595*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3s(GLshort x,GLshort y,GLshort z)596*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3s(GLshort x, GLshort y, GLshort z)
597*61046927SAndroid Build Coastguard Worker {
598*61046927SAndroid Build Coastguard Worker    rasterpos(x, y, z, 1.0F);
599*61046927SAndroid Build Coastguard Worker }
600*61046927SAndroid Build Coastguard Worker 
601*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)602*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
603*61046927SAndroid Build Coastguard Worker {
604*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
605*61046927SAndroid Build Coastguard Worker }
606*61046927SAndroid Build Coastguard Worker 
607*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)608*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
609*61046927SAndroid Build Coastguard Worker {
610*61046927SAndroid Build Coastguard Worker    rasterpos(x, y, z, w);
611*61046927SAndroid Build Coastguard Worker }
612*61046927SAndroid Build Coastguard Worker 
613*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4i(GLint x,GLint y,GLint z,GLint w)614*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
615*61046927SAndroid Build Coastguard Worker {
616*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
617*61046927SAndroid Build Coastguard Worker }
618*61046927SAndroid Build Coastguard Worker 
619*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)620*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
621*61046927SAndroid Build Coastguard Worker {
622*61046927SAndroid Build Coastguard Worker    rasterpos(x, y, z, w);
623*61046927SAndroid Build Coastguard Worker }
624*61046927SAndroid Build Coastguard Worker 
625*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2dv(const GLdouble * v)626*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2dv(const GLdouble *v)
627*61046927SAndroid Build Coastguard Worker {
628*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
629*61046927SAndroid Build Coastguard Worker }
630*61046927SAndroid Build Coastguard Worker 
631*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2fv(const GLfloat * v)632*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2fv(const GLfloat *v)
633*61046927SAndroid Build Coastguard Worker {
634*61046927SAndroid Build Coastguard Worker    rasterpos(v[0], v[1], 0.0F, 1.0F);
635*61046927SAndroid Build Coastguard Worker }
636*61046927SAndroid Build Coastguard Worker 
637*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2iv(const GLint * v)638*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2iv(const GLint *v)
639*61046927SAndroid Build Coastguard Worker {
640*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
641*61046927SAndroid Build Coastguard Worker }
642*61046927SAndroid Build Coastguard Worker 
643*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos2sv(const GLshort * v)644*61046927SAndroid Build Coastguard Worker _mesa_RasterPos2sv(const GLshort *v)
645*61046927SAndroid Build Coastguard Worker {
646*61046927SAndroid Build Coastguard Worker    rasterpos(v[0], v[1], 0.0F, 1.0F);
647*61046927SAndroid Build Coastguard Worker }
648*61046927SAndroid Build Coastguard Worker 
649*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3dv(const GLdouble * v)650*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3dv(const GLdouble *v)
651*61046927SAndroid Build Coastguard Worker {
652*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
653*61046927SAndroid Build Coastguard Worker }
654*61046927SAndroid Build Coastguard Worker 
655*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3fv(const GLfloat * v)656*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3fv(const GLfloat *v)
657*61046927SAndroid Build Coastguard Worker {
658*61046927SAndroid Build Coastguard Worker    rasterpos(v[0], v[1], v[2], 1.0F);
659*61046927SAndroid Build Coastguard Worker }
660*61046927SAndroid Build Coastguard Worker 
661*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3iv(const GLint * v)662*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3iv(const GLint *v)
663*61046927SAndroid Build Coastguard Worker {
664*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
665*61046927SAndroid Build Coastguard Worker }
666*61046927SAndroid Build Coastguard Worker 
667*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos3sv(const GLshort * v)668*61046927SAndroid Build Coastguard Worker _mesa_RasterPos3sv(const GLshort *v)
669*61046927SAndroid Build Coastguard Worker {
670*61046927SAndroid Build Coastguard Worker    rasterpos(v[0], v[1], v[2], 1.0F);
671*61046927SAndroid Build Coastguard Worker }
672*61046927SAndroid Build Coastguard Worker 
673*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4dv(const GLdouble * v)674*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4dv(const GLdouble *v)
675*61046927SAndroid Build Coastguard Worker {
676*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) v[0], (GLfloat) v[1],
677*61046927SAndroid Build Coastguard Worker 		     (GLfloat) v[2], (GLfloat) v[3]);
678*61046927SAndroid Build Coastguard Worker }
679*61046927SAndroid Build Coastguard Worker 
680*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4fv(const GLfloat * v)681*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4fv(const GLfloat *v)
682*61046927SAndroid Build Coastguard Worker {
683*61046927SAndroid Build Coastguard Worker    rasterpos(v[0], v[1], v[2], v[3]);
684*61046927SAndroid Build Coastguard Worker }
685*61046927SAndroid Build Coastguard Worker 
686*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4iv(const GLint * v)687*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4iv(const GLint *v)
688*61046927SAndroid Build Coastguard Worker {
689*61046927SAndroid Build Coastguard Worker    rasterpos((GLfloat) v[0], (GLfloat) v[1],
690*61046927SAndroid Build Coastguard Worker 		     (GLfloat) v[2], (GLfloat) v[3]);
691*61046927SAndroid Build Coastguard Worker }
692*61046927SAndroid Build Coastguard Worker 
693*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_RasterPos4sv(const GLshort * v)694*61046927SAndroid Build Coastguard Worker _mesa_RasterPos4sv(const GLshort *v)
695*61046927SAndroid Build Coastguard Worker {
696*61046927SAndroid Build Coastguard Worker    rasterpos(v[0], v[1], v[2], v[3]);
697*61046927SAndroid Build Coastguard Worker }
698*61046927SAndroid Build Coastguard Worker 
699*61046927SAndroid Build Coastguard Worker 
700*61046927SAndroid Build Coastguard Worker /**********************************************************************/
701*61046927SAndroid Build Coastguard Worker /***           GL_ARB_window_pos / GL_MESA_window_pos               ***/
702*61046927SAndroid Build Coastguard Worker /**********************************************************************/
703*61046927SAndroid Build Coastguard Worker 
704*61046927SAndroid Build Coastguard Worker 
705*61046927SAndroid Build Coastguard Worker /**
706*61046927SAndroid Build Coastguard Worker  * All glWindowPosMESA and glWindowPosARB commands call this function to
707*61046927SAndroid Build Coastguard Worker  * update the current raster position.
708*61046927SAndroid Build Coastguard Worker  */
709*61046927SAndroid Build Coastguard Worker static void
window_pos3f(GLfloat x,GLfloat y,GLfloat z)710*61046927SAndroid Build Coastguard Worker window_pos3f(GLfloat x, GLfloat y, GLfloat z)
711*61046927SAndroid Build Coastguard Worker {
712*61046927SAndroid Build Coastguard Worker    GET_CURRENT_CONTEXT(ctx);
713*61046927SAndroid Build Coastguard Worker    GLfloat z2;
714*61046927SAndroid Build Coastguard Worker 
715*61046927SAndroid Build Coastguard Worker    FLUSH_VERTICES(ctx, 0, GL_CURRENT_BIT);
716*61046927SAndroid Build Coastguard Worker    FLUSH_CURRENT(ctx, 0);
717*61046927SAndroid Build Coastguard Worker 
718*61046927SAndroid Build Coastguard Worker    z2 = CLAMP(z, 0.0F, 1.0F)
719*61046927SAndroid Build Coastguard Worker       * (ctx->ViewportArray[0].Far - ctx->ViewportArray[0].Near)
720*61046927SAndroid Build Coastguard Worker       + ctx->ViewportArray[0].Near;
721*61046927SAndroid Build Coastguard Worker 
722*61046927SAndroid Build Coastguard Worker    /* set raster position */
723*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPos[0] = x;
724*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPos[1] = y;
725*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPos[2] = z2;
726*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPos[3] = 1.0F;
727*61046927SAndroid Build Coastguard Worker 
728*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPosValid = GL_TRUE;
729*61046927SAndroid Build Coastguard Worker 
730*61046927SAndroid Build Coastguard Worker    if (ctx->Fog.FogCoordinateSource == GL_FOG_COORDINATE_EXT)
731*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterDistance = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
732*61046927SAndroid Build Coastguard Worker    else
733*61046927SAndroid Build Coastguard Worker       ctx->Current.RasterDistance = 0.0;
734*61046927SAndroid Build Coastguard Worker 
735*61046927SAndroid Build Coastguard Worker    /* raster color = current color or index */
736*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterColor[0]
737*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0], 0.0F, 1.0F);
738*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterColor[1]
739*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1], 0.0F, 1.0F);
740*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterColor[2]
741*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2], 0.0F, 1.0F);
742*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterColor[3]
743*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3], 0.0F, 1.0F);
744*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterSecondaryColor[0]
745*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0], 0.0F, 1.0F);
746*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterSecondaryColor[1]
747*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1], 0.0F, 1.0F);
748*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterSecondaryColor[2]
749*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2], 0.0F, 1.0F);
750*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterSecondaryColor[3]
751*61046927SAndroid Build Coastguard Worker       = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F);
752*61046927SAndroid Build Coastguard Worker 
753*61046927SAndroid Build Coastguard Worker    /* raster texcoord = current texcoord */
754*61046927SAndroid Build Coastguard Worker    {
755*61046927SAndroid Build Coastguard Worker       GLuint texSet;
756*61046927SAndroid Build Coastguard Worker       for (texSet = 0; texSet < ctx->Const.MaxTextureCoordUnits; texSet++) {
757*61046927SAndroid Build Coastguard Worker          assert(texSet < ARRAY_SIZE(ctx->Current.RasterTexCoords));
758*61046927SAndroid Build Coastguard Worker          COPY_4FV( ctx->Current.RasterTexCoords[texSet],
759*61046927SAndroid Build Coastguard Worker                   ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texSet] );
760*61046927SAndroid Build Coastguard Worker       }
761*61046927SAndroid Build Coastguard Worker    }
762*61046927SAndroid Build Coastguard Worker 
763*61046927SAndroid Build Coastguard Worker    if (ctx->RenderMode==GL_SELECT) {
764*61046927SAndroid Build Coastguard Worker       _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
765*61046927SAndroid Build Coastguard Worker    }
766*61046927SAndroid Build Coastguard Worker }
767*61046927SAndroid Build Coastguard Worker 
768*61046927SAndroid Build Coastguard Worker 
769*61046927SAndroid Build Coastguard Worker /* This is just to support the GL_MESA_window_pos version */
770*61046927SAndroid Build Coastguard Worker static void
window_pos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)771*61046927SAndroid Build Coastguard Worker window_pos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
772*61046927SAndroid Build Coastguard Worker {
773*61046927SAndroid Build Coastguard Worker    GET_CURRENT_CONTEXT(ctx);
774*61046927SAndroid Build Coastguard Worker    window_pos3f(x, y, z);
775*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPos[3] = w;
776*61046927SAndroid Build Coastguard Worker }
777*61046927SAndroid Build Coastguard Worker 
778*61046927SAndroid Build Coastguard Worker 
779*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2d(GLdouble x,GLdouble y)780*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2d(GLdouble x, GLdouble y)
781*61046927SAndroid Build Coastguard Worker {
782*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
783*61046927SAndroid Build Coastguard Worker }
784*61046927SAndroid Build Coastguard Worker 
785*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2f(GLfloat x,GLfloat y)786*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2f(GLfloat x, GLfloat y)
787*61046927SAndroid Build Coastguard Worker {
788*61046927SAndroid Build Coastguard Worker    window_pos4f(x, y, 0.0F, 1.0F);
789*61046927SAndroid Build Coastguard Worker }
790*61046927SAndroid Build Coastguard Worker 
791*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2i(GLint x,GLint y)792*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2i(GLint x, GLint y)
793*61046927SAndroid Build Coastguard Worker {
794*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
795*61046927SAndroid Build Coastguard Worker }
796*61046927SAndroid Build Coastguard Worker 
797*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2s(GLshort x,GLshort y)798*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2s(GLshort x, GLshort y)
799*61046927SAndroid Build Coastguard Worker {
800*61046927SAndroid Build Coastguard Worker    window_pos4f(x, y, 0.0F, 1.0F);
801*61046927SAndroid Build Coastguard Worker }
802*61046927SAndroid Build Coastguard Worker 
803*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3d(GLdouble x,GLdouble y,GLdouble z)804*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3d(GLdouble x, GLdouble y, GLdouble z)
805*61046927SAndroid Build Coastguard Worker {
806*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
807*61046927SAndroid Build Coastguard Worker }
808*61046927SAndroid Build Coastguard Worker 
809*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3f(GLfloat x,GLfloat y,GLfloat z)810*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3f(GLfloat x, GLfloat y, GLfloat z)
811*61046927SAndroid Build Coastguard Worker {
812*61046927SAndroid Build Coastguard Worker    window_pos4f(x, y, z, 1.0F);
813*61046927SAndroid Build Coastguard Worker }
814*61046927SAndroid Build Coastguard Worker 
815*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3i(GLint x,GLint y,GLint z)816*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3i(GLint x, GLint y, GLint z)
817*61046927SAndroid Build Coastguard Worker {
818*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
819*61046927SAndroid Build Coastguard Worker }
820*61046927SAndroid Build Coastguard Worker 
821*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3s(GLshort x,GLshort y,GLshort z)822*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3s(GLshort x, GLshort y, GLshort z)
823*61046927SAndroid Build Coastguard Worker {
824*61046927SAndroid Build Coastguard Worker    window_pos4f(x, y, z, 1.0F);
825*61046927SAndroid Build Coastguard Worker }
826*61046927SAndroid Build Coastguard Worker 
827*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4dMESA(GLdouble x,GLdouble y,GLdouble z,GLdouble w)828*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
829*61046927SAndroid Build Coastguard Worker {
830*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
831*61046927SAndroid Build Coastguard Worker }
832*61046927SAndroid Build Coastguard Worker 
833*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4fMESA(GLfloat x,GLfloat y,GLfloat z,GLfloat w)834*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
835*61046927SAndroid Build Coastguard Worker {
836*61046927SAndroid Build Coastguard Worker    window_pos4f(x, y, z, w);
837*61046927SAndroid Build Coastguard Worker }
838*61046927SAndroid Build Coastguard Worker 
839*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4iMESA(GLint x,GLint y,GLint z,GLint w)840*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
841*61046927SAndroid Build Coastguard Worker {
842*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
843*61046927SAndroid Build Coastguard Worker }
844*61046927SAndroid Build Coastguard Worker 
845*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4sMESA(GLshort x,GLshort y,GLshort z,GLshort w)846*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
847*61046927SAndroid Build Coastguard Worker {
848*61046927SAndroid Build Coastguard Worker    window_pos4f(x, y, z, w);
849*61046927SAndroid Build Coastguard Worker }
850*61046927SAndroid Build Coastguard Worker 
851*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2dv(const GLdouble * v)852*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2dv(const GLdouble *v)
853*61046927SAndroid Build Coastguard Worker {
854*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
855*61046927SAndroid Build Coastguard Worker }
856*61046927SAndroid Build Coastguard Worker 
857*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2fv(const GLfloat * v)858*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2fv(const GLfloat *v)
859*61046927SAndroid Build Coastguard Worker {
860*61046927SAndroid Build Coastguard Worker    window_pos4f(v[0], v[1], 0.0F, 1.0F);
861*61046927SAndroid Build Coastguard Worker }
862*61046927SAndroid Build Coastguard Worker 
863*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2iv(const GLint * v)864*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2iv(const GLint *v)
865*61046927SAndroid Build Coastguard Worker {
866*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
867*61046927SAndroid Build Coastguard Worker }
868*61046927SAndroid Build Coastguard Worker 
869*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos2sv(const GLshort * v)870*61046927SAndroid Build Coastguard Worker _mesa_WindowPos2sv(const GLshort *v)
871*61046927SAndroid Build Coastguard Worker {
872*61046927SAndroid Build Coastguard Worker    window_pos4f(v[0], v[1], 0.0F, 1.0F);
873*61046927SAndroid Build Coastguard Worker }
874*61046927SAndroid Build Coastguard Worker 
875*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3dv(const GLdouble * v)876*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3dv(const GLdouble *v)
877*61046927SAndroid Build Coastguard Worker {
878*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
879*61046927SAndroid Build Coastguard Worker }
880*61046927SAndroid Build Coastguard Worker 
881*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3fv(const GLfloat * v)882*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3fv(const GLfloat *v)
883*61046927SAndroid Build Coastguard Worker {
884*61046927SAndroid Build Coastguard Worker    window_pos4f(v[0], v[1], v[2], 1.0);
885*61046927SAndroid Build Coastguard Worker }
886*61046927SAndroid Build Coastguard Worker 
887*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3iv(const GLint * v)888*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3iv(const GLint *v)
889*61046927SAndroid Build Coastguard Worker {
890*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
891*61046927SAndroid Build Coastguard Worker }
892*61046927SAndroid Build Coastguard Worker 
893*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos3sv(const GLshort * v)894*61046927SAndroid Build Coastguard Worker _mesa_WindowPos3sv(const GLshort *v)
895*61046927SAndroid Build Coastguard Worker {
896*61046927SAndroid Build Coastguard Worker    window_pos4f(v[0], v[1], v[2], 1.0F);
897*61046927SAndroid Build Coastguard Worker }
898*61046927SAndroid Build Coastguard Worker 
899*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4dvMESA(const GLdouble * v)900*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4dvMESA(const GLdouble *v)
901*61046927SAndroid Build Coastguard Worker {
902*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) v[0], (GLfloat) v[1],
903*61046927SAndroid Build Coastguard Worker 			 (GLfloat) v[2], (GLfloat) v[3]);
904*61046927SAndroid Build Coastguard Worker }
905*61046927SAndroid Build Coastguard Worker 
906*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4fvMESA(const GLfloat * v)907*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4fvMESA(const GLfloat *v)
908*61046927SAndroid Build Coastguard Worker {
909*61046927SAndroid Build Coastguard Worker    window_pos4f(v[0], v[1], v[2], v[3]);
910*61046927SAndroid Build Coastguard Worker }
911*61046927SAndroid Build Coastguard Worker 
912*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4ivMESA(const GLint * v)913*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4ivMESA(const GLint *v)
914*61046927SAndroid Build Coastguard Worker {
915*61046927SAndroid Build Coastguard Worker    window_pos4f((GLfloat) v[0], (GLfloat) v[1],
916*61046927SAndroid Build Coastguard Worker 			 (GLfloat) v[2], (GLfloat) v[3]);
917*61046927SAndroid Build Coastguard Worker }
918*61046927SAndroid Build Coastguard Worker 
919*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_WindowPos4svMESA(const GLshort * v)920*61046927SAndroid Build Coastguard Worker _mesa_WindowPos4svMESA(const GLshort *v)
921*61046927SAndroid Build Coastguard Worker {
922*61046927SAndroid Build Coastguard Worker    window_pos4f(v[0], v[1], v[2], v[3]);
923*61046927SAndroid Build Coastguard Worker }
924*61046927SAndroid Build Coastguard Worker 
925*61046927SAndroid Build Coastguard Worker 
926*61046927SAndroid Build Coastguard Worker #if 0
927*61046927SAndroid Build Coastguard Worker 
928*61046927SAndroid Build Coastguard Worker /*
929*61046927SAndroid Build Coastguard Worker  * OpenGL implementation of glWindowPos*MESA()
930*61046927SAndroid Build Coastguard Worker  */
931*61046927SAndroid Build Coastguard Worker void glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
932*61046927SAndroid Build Coastguard Worker {
933*61046927SAndroid Build Coastguard Worker    GLfloat fx, fy;
934*61046927SAndroid Build Coastguard Worker 
935*61046927SAndroid Build Coastguard Worker    /* Push current matrix mode and viewport attributes */
936*61046927SAndroid Build Coastguard Worker    glPushAttrib( GL_TRANSFORM_BIT | GL_VIEWPORT_BIT );
937*61046927SAndroid Build Coastguard Worker 
938*61046927SAndroid Build Coastguard Worker    /* Setup projection parameters */
939*61046927SAndroid Build Coastguard Worker    glMatrixMode( GL_PROJECTION );
940*61046927SAndroid Build Coastguard Worker    glPushMatrix();
941*61046927SAndroid Build Coastguard Worker    glLoadIdentity();
942*61046927SAndroid Build Coastguard Worker    glMatrixMode( GL_MODELVIEW );
943*61046927SAndroid Build Coastguard Worker    glPushMatrix();
944*61046927SAndroid Build Coastguard Worker    glLoadIdentity();
945*61046927SAndroid Build Coastguard Worker 
946*61046927SAndroid Build Coastguard Worker    glDepthRange( z, z );
947*61046927SAndroid Build Coastguard Worker    glViewport( (int) x - 1, (int) y - 1, 2, 2 );
948*61046927SAndroid Build Coastguard Worker 
949*61046927SAndroid Build Coastguard Worker    /* set the raster (window) position */
950*61046927SAndroid Build Coastguard Worker    fx = x - (int) x;
951*61046927SAndroid Build Coastguard Worker    fy = y - (int) y;
952*61046927SAndroid Build Coastguard Worker    glRasterPos4f( fx, fy, 0.0, w );
953*61046927SAndroid Build Coastguard Worker 
954*61046927SAndroid Build Coastguard Worker    /* restore matrices, viewport and matrix mode */
955*61046927SAndroid Build Coastguard Worker    glPopMatrix();
956*61046927SAndroid Build Coastguard Worker    glMatrixMode( GL_PROJECTION );
957*61046927SAndroid Build Coastguard Worker    glPopMatrix();
958*61046927SAndroid Build Coastguard Worker 
959*61046927SAndroid Build Coastguard Worker    glPopAttrib();
960*61046927SAndroid Build Coastguard Worker }
961*61046927SAndroid Build Coastguard Worker 
962*61046927SAndroid Build Coastguard Worker #endif
963*61046927SAndroid Build Coastguard Worker 
964*61046927SAndroid Build Coastguard Worker 
965*61046927SAndroid Build Coastguard Worker /**********************************************************************/
966*61046927SAndroid Build Coastguard Worker /** \name Initialization                                              */
967*61046927SAndroid Build Coastguard Worker /**********************************************************************/
968*61046927SAndroid Build Coastguard Worker /*@{*/
969*61046927SAndroid Build Coastguard Worker 
970*61046927SAndroid Build Coastguard Worker /**
971*61046927SAndroid Build Coastguard Worker  * Initialize the context current raster position information.
972*61046927SAndroid Build Coastguard Worker  *
973*61046927SAndroid Build Coastguard Worker  * \param ctx GL context.
974*61046927SAndroid Build Coastguard Worker  *
975*61046927SAndroid Build Coastguard Worker  * Initialize the current raster position information in
976*61046927SAndroid Build Coastguard Worker  * __struct gl_contextRec::Current, and adds the extension entry points to the
977*61046927SAndroid Build Coastguard Worker  * dispatcher.
978*61046927SAndroid Build Coastguard Worker  */
_mesa_init_rastpos(struct gl_context * ctx)979*61046927SAndroid Build Coastguard Worker void _mesa_init_rastpos( struct gl_context * ctx )
980*61046927SAndroid Build Coastguard Worker {
981*61046927SAndroid Build Coastguard Worker    unsigned i;
982*61046927SAndroid Build Coastguard Worker 
983*61046927SAndroid Build Coastguard Worker    ASSIGN_4V( ctx->Current.RasterPos, 0.0, 0.0, 0.0, 1.0 );
984*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterDistance = 0.0;
985*61046927SAndroid Build Coastguard Worker    ASSIGN_4V( ctx->Current.RasterColor, 1.0, 1.0, 1.0, 1.0 );
986*61046927SAndroid Build Coastguard Worker    ASSIGN_4V( ctx->Current.RasterSecondaryColor, 0.0, 0.0, 0.0, 1.0 );
987*61046927SAndroid Build Coastguard Worker    for (i = 0; i < ARRAY_SIZE(ctx->Current.RasterTexCoords); i++)
988*61046927SAndroid Build Coastguard Worker       ASSIGN_4V( ctx->Current.RasterTexCoords[i], 0.0, 0.0, 0.0, 1.0 );
989*61046927SAndroid Build Coastguard Worker    ctx->Current.RasterPosValid = GL_TRUE;
990*61046927SAndroid Build Coastguard Worker }
991*61046927SAndroid Build Coastguard Worker 
992*61046927SAndroid Build Coastguard Worker /*@}*/
993