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-2008 Brian Paul All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
6*61046927SAndroid Build Coastguard Worker *
7*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
8*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
9*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
10*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
12*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
13*61046927SAndroid Build Coastguard Worker *
14*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
15*61046927SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
16*61046927SAndroid Build Coastguard Worker *
17*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18*61046927SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21*61046927SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22*61046927SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23*61046927SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
24*61046927SAndroid Build Coastguard Worker */
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker /**
27*61046927SAndroid Build Coastguard Worker * \file texgen.c
28*61046927SAndroid Build Coastguard Worker *
29*61046927SAndroid Build Coastguard Worker * glTexGen-related functions
30*61046927SAndroid Build Coastguard Worker */
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker #include "util/glheader.h"
34*61046927SAndroid Build Coastguard Worker #include "main/context.h"
35*61046927SAndroid Build Coastguard Worker #include "main/enums.h"
36*61046927SAndroid Build Coastguard Worker #include "main/macros.h"
37*61046927SAndroid Build Coastguard Worker #include "main/texparam.h"
38*61046927SAndroid Build Coastguard Worker #include "main/texstate.h"
39*61046927SAndroid Build Coastguard Worker #include "math/m_matrix.h"
40*61046927SAndroid Build Coastguard Worker #include "main/texobj.h"
41*61046927SAndroid Build Coastguard Worker #include "api_exec_decl.h"
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard Worker /**
45*61046927SAndroid Build Coastguard Worker * Return texgen state for given coordinate
46*61046927SAndroid Build Coastguard Worker */
47*61046927SAndroid Build Coastguard Worker static struct gl_texgen *
get_texgen(struct gl_context * ctx,GLuint texunitIndex,GLenum coord,const char * caller)48*61046927SAndroid Build Coastguard Worker get_texgen(struct gl_context *ctx, GLuint texunitIndex, GLenum coord, const char* caller)
49*61046927SAndroid Build Coastguard Worker {
50*61046927SAndroid Build Coastguard Worker struct gl_fixedfunc_texture_unit* texUnit;
51*61046927SAndroid Build Coastguard Worker if (texunitIndex >= ctx->Const.MaxTextureCoordUnits) {
52*61046927SAndroid Build Coastguard Worker _mesa_error(ctx, GL_INVALID_OPERATION, "%s(unit=%d)", caller, texunitIndex);
53*61046927SAndroid Build Coastguard Worker return NULL;
54*61046927SAndroid Build Coastguard Worker }
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker texUnit = _mesa_get_fixedfunc_tex_unit(ctx, texunitIndex);
57*61046927SAndroid Build Coastguard Worker
58*61046927SAndroid Build Coastguard Worker if (_mesa_is_gles1(ctx)) {
59*61046927SAndroid Build Coastguard Worker return (coord == GL_TEXTURE_GEN_STR_OES)
60*61046927SAndroid Build Coastguard Worker ? &texUnit->GenS : NULL;
61*61046927SAndroid Build Coastguard Worker }
62*61046927SAndroid Build Coastguard Worker
63*61046927SAndroid Build Coastguard Worker switch (coord) {
64*61046927SAndroid Build Coastguard Worker case GL_S:
65*61046927SAndroid Build Coastguard Worker return &texUnit->GenS;
66*61046927SAndroid Build Coastguard Worker case GL_T:
67*61046927SAndroid Build Coastguard Worker return &texUnit->GenT;
68*61046927SAndroid Build Coastguard Worker case GL_R:
69*61046927SAndroid Build Coastguard Worker return &texUnit->GenR;
70*61046927SAndroid Build Coastguard Worker case GL_Q:
71*61046927SAndroid Build Coastguard Worker return &texUnit->GenQ;
72*61046927SAndroid Build Coastguard Worker default:
73*61046927SAndroid Build Coastguard Worker return NULL;
74*61046927SAndroid Build Coastguard Worker }
75*61046927SAndroid Build Coastguard Worker }
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard Worker /* Helper for glTexGenfv and glMultiTexGenfvEXT functions */
79*61046927SAndroid Build Coastguard Worker static void
texgenfv(GLuint texunitIndex,GLenum coord,GLenum pname,const GLfloat * params,const char * caller)80*61046927SAndroid Build Coastguard Worker texgenfv( GLuint texunitIndex, GLenum coord, GLenum pname,
81*61046927SAndroid Build Coastguard Worker const GLfloat *params, const char* caller )
82*61046927SAndroid Build Coastguard Worker {
83*61046927SAndroid Build Coastguard Worker struct gl_texgen *texgen;
84*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker texgen = get_texgen(ctx, texunitIndex, coord, caller);
87*61046927SAndroid Build Coastguard Worker if (!texgen) {
88*61046927SAndroid Build Coastguard Worker _mesa_error(ctx, GL_INVALID_ENUM, "%s(coord)", caller);
89*61046927SAndroid Build Coastguard Worker return;
90*61046927SAndroid Build Coastguard Worker }
91*61046927SAndroid Build Coastguard Worker
92*61046927SAndroid Build Coastguard Worker struct gl_fixedfunc_texture_unit *unit = &ctx->Texture.FixedFuncUnit[texunitIndex];
93*61046927SAndroid Build Coastguard Worker int index = coord == GL_TEXTURE_GEN_STR_OES ? 0 : (coord - GL_S);
94*61046927SAndroid Build Coastguard Worker
95*61046927SAndroid Build Coastguard Worker switch (pname) {
96*61046927SAndroid Build Coastguard Worker case GL_TEXTURE_GEN_MODE:
97*61046927SAndroid Build Coastguard Worker {
98*61046927SAndroid Build Coastguard Worker GLenum mode = (GLenum) (GLint) params[0];
99*61046927SAndroid Build Coastguard Worker GLbitfield bit = 0x0;
100*61046927SAndroid Build Coastguard Worker if (texgen->Mode == mode)
101*61046927SAndroid Build Coastguard Worker return;
102*61046927SAndroid Build Coastguard Worker switch (mode) {
103*61046927SAndroid Build Coastguard Worker case GL_OBJECT_LINEAR:
104*61046927SAndroid Build Coastguard Worker bit = TEXGEN_OBJ_LINEAR;
105*61046927SAndroid Build Coastguard Worker break;
106*61046927SAndroid Build Coastguard Worker case GL_EYE_LINEAR:
107*61046927SAndroid Build Coastguard Worker bit = TEXGEN_EYE_LINEAR;
108*61046927SAndroid Build Coastguard Worker break;
109*61046927SAndroid Build Coastguard Worker case GL_SPHERE_MAP:
110*61046927SAndroid Build Coastguard Worker if (coord == GL_S || coord == GL_T)
111*61046927SAndroid Build Coastguard Worker bit = TEXGEN_SPHERE_MAP;
112*61046927SAndroid Build Coastguard Worker break;
113*61046927SAndroid Build Coastguard Worker case GL_REFLECTION_MAP_NV:
114*61046927SAndroid Build Coastguard Worker if (coord != GL_Q)
115*61046927SAndroid Build Coastguard Worker bit = TEXGEN_REFLECTION_MAP_NV;
116*61046927SAndroid Build Coastguard Worker break;
117*61046927SAndroid Build Coastguard Worker case GL_NORMAL_MAP_NV:
118*61046927SAndroid Build Coastguard Worker if (coord != GL_Q)
119*61046927SAndroid Build Coastguard Worker bit = TEXGEN_NORMAL_MAP_NV;
120*61046927SAndroid Build Coastguard Worker break;
121*61046927SAndroid Build Coastguard Worker default:
122*61046927SAndroid Build Coastguard Worker ; /* nop */
123*61046927SAndroid Build Coastguard Worker }
124*61046927SAndroid Build Coastguard Worker if (!bit) {
125*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
126*61046927SAndroid Build Coastguard Worker return;
127*61046927SAndroid Build Coastguard Worker }
128*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT
129*61046927SAndroid Build Coastguard Worker && (bit & (TEXGEN_REFLECTION_MAP_NV | TEXGEN_NORMAL_MAP_NV)) == 0) {
130*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
131*61046927SAndroid Build Coastguard Worker return;
132*61046927SAndroid Build Coastguard Worker }
133*61046927SAndroid Build Coastguard Worker
134*61046927SAndroid Build Coastguard Worker FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE | _NEW_FF_VERT_PROGRAM,
135*61046927SAndroid Build Coastguard Worker GL_TEXTURE_BIT);
136*61046927SAndroid Build Coastguard Worker texgen->Mode = mode;
137*61046927SAndroid Build Coastguard Worker texgen->_ModeBit = bit;
138*61046927SAndroid Build Coastguard Worker }
139*61046927SAndroid Build Coastguard Worker break;
140*61046927SAndroid Build Coastguard Worker
141*61046927SAndroid Build Coastguard Worker case GL_OBJECT_PLANE:
142*61046927SAndroid Build Coastguard Worker {
143*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT) {
144*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
145*61046927SAndroid Build Coastguard Worker return;
146*61046927SAndroid Build Coastguard Worker }
147*61046927SAndroid Build Coastguard Worker if (TEST_EQ_4V(unit->ObjectPlane[index], params))
148*61046927SAndroid Build Coastguard Worker return;
149*61046927SAndroid Build Coastguard Worker FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE, GL_TEXTURE_BIT);
150*61046927SAndroid Build Coastguard Worker COPY_4FV(unit->ObjectPlane[index], params);
151*61046927SAndroid Build Coastguard Worker }
152*61046927SAndroid Build Coastguard Worker break;
153*61046927SAndroid Build Coastguard Worker
154*61046927SAndroid Build Coastguard Worker case GL_EYE_PLANE:
155*61046927SAndroid Build Coastguard Worker {
156*61046927SAndroid Build Coastguard Worker GLfloat tmp[4];
157*61046927SAndroid Build Coastguard Worker
158*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT) {
159*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
160*61046927SAndroid Build Coastguard Worker return;
161*61046927SAndroid Build Coastguard Worker }
162*61046927SAndroid Build Coastguard Worker
163*61046927SAndroid Build Coastguard Worker /* Transform plane equation by the inverse modelview matrix */
164*61046927SAndroid Build Coastguard Worker if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) {
165*61046927SAndroid Build Coastguard Worker _math_matrix_analyse(ctx->ModelviewMatrixStack.Top);
166*61046927SAndroid Build Coastguard Worker }
167*61046927SAndroid Build Coastguard Worker _mesa_transform_vector(tmp, params,
168*61046927SAndroid Build Coastguard Worker ctx->ModelviewMatrixStack.Top->inv);
169*61046927SAndroid Build Coastguard Worker if (TEST_EQ_4V(unit->EyePlane[index], tmp))
170*61046927SAndroid Build Coastguard Worker return;
171*61046927SAndroid Build Coastguard Worker FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE, GL_TEXTURE_BIT);
172*61046927SAndroid Build Coastguard Worker COPY_4FV(unit->EyePlane[index], tmp);
173*61046927SAndroid Build Coastguard Worker }
174*61046927SAndroid Build Coastguard Worker break;
175*61046927SAndroid Build Coastguard Worker
176*61046927SAndroid Build Coastguard Worker default:
177*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" );
178*61046927SAndroid Build Coastguard Worker return;
179*61046927SAndroid Build Coastguard Worker }
180*61046927SAndroid Build Coastguard Worker }
181*61046927SAndroid Build Coastguard Worker
182*61046927SAndroid Build Coastguard Worker
183*61046927SAndroid Build Coastguard Worker /* Helper for glGetTexGendv / glGetMultiTexGendvEXT */
184*61046927SAndroid Build Coastguard Worker static void
gettexgendv(GLuint texunitIndex,GLenum coord,GLenum pname,GLdouble * params,const char * caller)185*61046927SAndroid Build Coastguard Worker gettexgendv( GLuint texunitIndex, GLenum coord, GLenum pname,
186*61046927SAndroid Build Coastguard Worker GLdouble *params, const char* caller)
187*61046927SAndroid Build Coastguard Worker {
188*61046927SAndroid Build Coastguard Worker struct gl_texgen *texgen;
189*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
190*61046927SAndroid Build Coastguard Worker
191*61046927SAndroid Build Coastguard Worker texgen = get_texgen(ctx, texunitIndex, coord, caller);
192*61046927SAndroid Build Coastguard Worker if (!texgen) {
193*61046927SAndroid Build Coastguard Worker _mesa_error(ctx, GL_INVALID_ENUM, "%s(coord)", caller);
194*61046927SAndroid Build Coastguard Worker return;
195*61046927SAndroid Build Coastguard Worker }
196*61046927SAndroid Build Coastguard Worker
197*61046927SAndroid Build Coastguard Worker struct gl_fixedfunc_texture_unit *unit = &ctx->Texture.FixedFuncUnit[texunitIndex];
198*61046927SAndroid Build Coastguard Worker int index = coord == GL_TEXTURE_GEN_STR_OES ? 0 : (coord - GL_S);
199*61046927SAndroid Build Coastguard Worker
200*61046927SAndroid Build Coastguard Worker switch (pname) {
201*61046927SAndroid Build Coastguard Worker case GL_TEXTURE_GEN_MODE:
202*61046927SAndroid Build Coastguard Worker params[0] = ENUM_TO_DOUBLE(texgen->Mode);
203*61046927SAndroid Build Coastguard Worker break;
204*61046927SAndroid Build Coastguard Worker case GL_OBJECT_PLANE:
205*61046927SAndroid Build Coastguard Worker COPY_4V(params, unit->ObjectPlane[index]);
206*61046927SAndroid Build Coastguard Worker break;
207*61046927SAndroid Build Coastguard Worker case GL_EYE_PLANE:
208*61046927SAndroid Build Coastguard Worker COPY_4V(params, unit->EyePlane[index]);
209*61046927SAndroid Build Coastguard Worker break;
210*61046927SAndroid Build Coastguard Worker default:
211*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(pname)", caller );
212*61046927SAndroid Build Coastguard Worker }
213*61046927SAndroid Build Coastguard Worker }
214*61046927SAndroid Build Coastguard Worker
215*61046927SAndroid Build Coastguard Worker
216*61046927SAndroid Build Coastguard Worker /* Helper for glGetTexGenfv / glGetMultiTexGenfvEXT */
217*61046927SAndroid Build Coastguard Worker static void
gettexgenfv(GLenum texunitIndex,GLenum coord,GLenum pname,GLfloat * params,const char * caller)218*61046927SAndroid Build Coastguard Worker gettexgenfv( GLenum texunitIndex, GLenum coord, GLenum pname,
219*61046927SAndroid Build Coastguard Worker GLfloat *params, const char* caller )
220*61046927SAndroid Build Coastguard Worker {
221*61046927SAndroid Build Coastguard Worker struct gl_texgen *texgen;
222*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
223*61046927SAndroid Build Coastguard Worker
224*61046927SAndroid Build Coastguard Worker texgen = get_texgen(ctx, texunitIndex, coord, caller);
225*61046927SAndroid Build Coastguard Worker if (!texgen) {
226*61046927SAndroid Build Coastguard Worker _mesa_error(ctx, GL_INVALID_ENUM, "%s(coord)", caller);
227*61046927SAndroid Build Coastguard Worker return;
228*61046927SAndroid Build Coastguard Worker }
229*61046927SAndroid Build Coastguard Worker
230*61046927SAndroid Build Coastguard Worker struct gl_fixedfunc_texture_unit *unit = &ctx->Texture.FixedFuncUnit[texunitIndex];
231*61046927SAndroid Build Coastguard Worker int index = coord == GL_TEXTURE_GEN_STR_OES ? 0 : (coord - GL_S);
232*61046927SAndroid Build Coastguard Worker
233*61046927SAndroid Build Coastguard Worker switch (pname) {
234*61046927SAndroid Build Coastguard Worker case GL_TEXTURE_GEN_MODE:
235*61046927SAndroid Build Coastguard Worker params[0] = ENUM_TO_FLOAT(texgen->Mode);
236*61046927SAndroid Build Coastguard Worker break;
237*61046927SAndroid Build Coastguard Worker case GL_OBJECT_PLANE:
238*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT) {
239*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(param)", caller );
240*61046927SAndroid Build Coastguard Worker return;
241*61046927SAndroid Build Coastguard Worker }
242*61046927SAndroid Build Coastguard Worker COPY_4V(params, unit->ObjectPlane[index]);
243*61046927SAndroid Build Coastguard Worker break;
244*61046927SAndroid Build Coastguard Worker case GL_EYE_PLANE:
245*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT) {
246*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(param)", caller );
247*61046927SAndroid Build Coastguard Worker return;
248*61046927SAndroid Build Coastguard Worker }
249*61046927SAndroid Build Coastguard Worker COPY_4V(params, unit->EyePlane[index]);
250*61046927SAndroid Build Coastguard Worker break;
251*61046927SAndroid Build Coastguard Worker default:
252*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(pname)", caller );
253*61046927SAndroid Build Coastguard Worker }
254*61046927SAndroid Build Coastguard Worker }
255*61046927SAndroid Build Coastguard Worker
256*61046927SAndroid Build Coastguard Worker
257*61046927SAndroid Build Coastguard Worker /* Helper for glGetTexGeniv / glGetMultiTexGenivEXT */
258*61046927SAndroid Build Coastguard Worker static void
gettexgeniv(GLenum texunitIndex,GLenum coord,GLenum pname,GLint * params,const char * caller)259*61046927SAndroid Build Coastguard Worker gettexgeniv( GLenum texunitIndex, GLenum coord, GLenum pname,
260*61046927SAndroid Build Coastguard Worker GLint *params, const char* caller)
261*61046927SAndroid Build Coastguard Worker {
262*61046927SAndroid Build Coastguard Worker struct gl_texgen *texgen;
263*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
264*61046927SAndroid Build Coastguard Worker
265*61046927SAndroid Build Coastguard Worker texgen = get_texgen(ctx, texunitIndex, coord, caller);
266*61046927SAndroid Build Coastguard Worker if (!texgen) {
267*61046927SAndroid Build Coastguard Worker _mesa_error(ctx, GL_INVALID_ENUM, "%s(coord)", caller);
268*61046927SAndroid Build Coastguard Worker return;
269*61046927SAndroid Build Coastguard Worker }
270*61046927SAndroid Build Coastguard Worker
271*61046927SAndroid Build Coastguard Worker struct gl_fixedfunc_texture_unit *unit = &ctx->Texture.FixedFuncUnit[texunitIndex];
272*61046927SAndroid Build Coastguard Worker int index = coord == GL_TEXTURE_GEN_STR_OES ? 0 : (coord - GL_S);
273*61046927SAndroid Build Coastguard Worker
274*61046927SAndroid Build Coastguard Worker switch (pname) {
275*61046927SAndroid Build Coastguard Worker case GL_TEXTURE_GEN_MODE:
276*61046927SAndroid Build Coastguard Worker params[0] = texgen->Mode;
277*61046927SAndroid Build Coastguard Worker break;
278*61046927SAndroid Build Coastguard Worker case GL_OBJECT_PLANE:
279*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT) {
280*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(param)" , caller);
281*61046927SAndroid Build Coastguard Worker return;
282*61046927SAndroid Build Coastguard Worker }
283*61046927SAndroid Build Coastguard Worker params[0] = (GLint) unit->ObjectPlane[index][0];
284*61046927SAndroid Build Coastguard Worker params[1] = (GLint) unit->ObjectPlane[index][1];
285*61046927SAndroid Build Coastguard Worker params[2] = (GLint) unit->ObjectPlane[index][2];
286*61046927SAndroid Build Coastguard Worker params[3] = (GLint) unit->ObjectPlane[index][3];
287*61046927SAndroid Build Coastguard Worker break;
288*61046927SAndroid Build Coastguard Worker case GL_EYE_PLANE:
289*61046927SAndroid Build Coastguard Worker if (ctx->API != API_OPENGL_COMPAT) {
290*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(param)" , caller);
291*61046927SAndroid Build Coastguard Worker return;
292*61046927SAndroid Build Coastguard Worker }
293*61046927SAndroid Build Coastguard Worker params[0] = (GLint) unit->EyePlane[index][0];
294*61046927SAndroid Build Coastguard Worker params[1] = (GLint) unit->EyePlane[index][1];
295*61046927SAndroid Build Coastguard Worker params[2] = (GLint) unit->EyePlane[index][2];
296*61046927SAndroid Build Coastguard Worker params[3] = (GLint) unit->EyePlane[index][3];
297*61046927SAndroid Build Coastguard Worker break;
298*61046927SAndroid Build Coastguard Worker default:
299*61046927SAndroid Build Coastguard Worker _mesa_error( ctx, GL_INVALID_ENUM, "%s(pname)" , caller);
300*61046927SAndroid Build Coastguard Worker }
301*61046927SAndroid Build Coastguard Worker }
302*61046927SAndroid Build Coastguard Worker
303*61046927SAndroid Build Coastguard Worker
304*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_TexGenfv(GLenum coord,GLenum pname,const GLfloat * params)305*61046927SAndroid Build Coastguard Worker _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
306*61046927SAndroid Build Coastguard Worker {
307*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
308*61046927SAndroid Build Coastguard Worker texgenfv(ctx->Texture.CurrentUnit, coord, pname, params, "glTexGenfv");
309*61046927SAndroid Build Coastguard Worker }
310*61046927SAndroid Build Coastguard Worker
311*61046927SAndroid Build Coastguard Worker
312*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_MultiTexGenfvEXT(GLenum texunit,GLenum coord,GLenum pname,const GLfloat * params)313*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGenfvEXT( GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params )
314*61046927SAndroid Build Coastguard Worker {
315*61046927SAndroid Build Coastguard Worker texgenfv(texunit - GL_TEXTURE0, coord, pname, params, "glMultiTexGenfvEXT");
316*61046927SAndroid Build Coastguard Worker }
317*61046927SAndroid Build Coastguard Worker
318*61046927SAndroid Build Coastguard Worker
319*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_TexGeniv(GLenum coord,GLenum pname,const GLint * params)320*61046927SAndroid Build Coastguard Worker _mesa_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
321*61046927SAndroid Build Coastguard Worker {
322*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
323*61046927SAndroid Build Coastguard Worker GLfloat p[4];
324*61046927SAndroid Build Coastguard Worker p[0] = (GLfloat) params[0];
325*61046927SAndroid Build Coastguard Worker if (pname == GL_TEXTURE_GEN_MODE) {
326*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
327*61046927SAndroid Build Coastguard Worker }
328*61046927SAndroid Build Coastguard Worker else {
329*61046927SAndroid Build Coastguard Worker p[1] = (GLfloat) params[1];
330*61046927SAndroid Build Coastguard Worker p[2] = (GLfloat) params[2];
331*61046927SAndroid Build Coastguard Worker p[3] = (GLfloat) params[3];
332*61046927SAndroid Build Coastguard Worker }
333*61046927SAndroid Build Coastguard Worker texgenfv(ctx->Texture.CurrentUnit, coord, pname, p, "glTexGeniv");
334*61046927SAndroid Build Coastguard Worker }
335*61046927SAndroid Build Coastguard Worker
336*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_MultiTexGenivEXT(GLenum texunit,GLenum coord,GLenum pname,const GLint * params)337*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, const GLint *params )
338*61046927SAndroid Build Coastguard Worker {
339*61046927SAndroid Build Coastguard Worker GLfloat p[4];
340*61046927SAndroid Build Coastguard Worker p[0] = (GLfloat) params[0];
341*61046927SAndroid Build Coastguard Worker if (pname == GL_TEXTURE_GEN_MODE) {
342*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
343*61046927SAndroid Build Coastguard Worker }
344*61046927SAndroid Build Coastguard Worker else {
345*61046927SAndroid Build Coastguard Worker p[1] = (GLfloat) params[1];
346*61046927SAndroid Build Coastguard Worker p[2] = (GLfloat) params[2];
347*61046927SAndroid Build Coastguard Worker p[3] = (GLfloat) params[3];
348*61046927SAndroid Build Coastguard Worker }
349*61046927SAndroid Build Coastguard Worker texgenfv(texunit - GL_TEXTURE0, coord, pname, p, "glMultiTexGenivEXT");
350*61046927SAndroid Build Coastguard Worker }
351*61046927SAndroid Build Coastguard Worker
352*61046927SAndroid Build Coastguard Worker
353*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_TexGend(GLenum coord,GLenum pname,GLdouble param)354*61046927SAndroid Build Coastguard Worker _mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )
355*61046927SAndroid Build Coastguard Worker {
356*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
357*61046927SAndroid Build Coastguard Worker GLfloat p[4];
358*61046927SAndroid Build Coastguard Worker p[0] = (GLfloat) param;
359*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
360*61046927SAndroid Build Coastguard Worker texgenfv(ctx->Texture.CurrentUnit, coord, pname, p, "glTexGend");
361*61046927SAndroid Build Coastguard Worker }
362*61046927SAndroid Build Coastguard Worker
363*61046927SAndroid Build Coastguard Worker
364*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_MultiTexGendEXT(GLenum texunit,GLenum coord,GLenum pname,GLdouble param)365*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGendEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble param )
366*61046927SAndroid Build Coastguard Worker {
367*61046927SAndroid Build Coastguard Worker GLfloat p[4];
368*61046927SAndroid Build Coastguard Worker p[0] = (GLfloat) param;
369*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
370*61046927SAndroid Build Coastguard Worker texgenfv(texunit - GL_TEXTURE0, coord, pname, p, "glMultiTexGendEXT");
371*61046927SAndroid Build Coastguard Worker }
372*61046927SAndroid Build Coastguard Worker
373*61046927SAndroid Build Coastguard Worker
374*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_TexGendv(GLenum coord,GLenum pname,const GLdouble * params)375*61046927SAndroid Build Coastguard Worker _mesa_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
376*61046927SAndroid Build Coastguard Worker {
377*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
378*61046927SAndroid Build Coastguard Worker GLfloat p[4];
379*61046927SAndroid Build Coastguard Worker p[0] = (GLfloat) params[0];
380*61046927SAndroid Build Coastguard Worker if (pname == GL_TEXTURE_GEN_MODE) {
381*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
382*61046927SAndroid Build Coastguard Worker }
383*61046927SAndroid Build Coastguard Worker else {
384*61046927SAndroid Build Coastguard Worker p[1] = (GLfloat) params[1];
385*61046927SAndroid Build Coastguard Worker p[2] = (GLfloat) params[2];
386*61046927SAndroid Build Coastguard Worker p[3] = (GLfloat) params[3];
387*61046927SAndroid Build Coastguard Worker }
388*61046927SAndroid Build Coastguard Worker texgenfv(ctx->Texture.CurrentUnit, coord, pname, p, "glTexGendv");
389*61046927SAndroid Build Coastguard Worker }
390*61046927SAndroid Build Coastguard Worker
391*61046927SAndroid Build Coastguard Worker
392*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_MultiTexGendvEXT(GLenum texunit,GLenum coord,GLenum pname,const GLdouble * params)393*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params )
394*61046927SAndroid Build Coastguard Worker {
395*61046927SAndroid Build Coastguard Worker GLfloat p[4];
396*61046927SAndroid Build Coastguard Worker p[0] = (GLfloat) params[0];
397*61046927SAndroid Build Coastguard Worker if (pname == GL_TEXTURE_GEN_MODE) {
398*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
399*61046927SAndroid Build Coastguard Worker }
400*61046927SAndroid Build Coastguard Worker else {
401*61046927SAndroid Build Coastguard Worker p[1] = (GLfloat) params[1];
402*61046927SAndroid Build Coastguard Worker p[2] = (GLfloat) params[2];
403*61046927SAndroid Build Coastguard Worker p[3] = (GLfloat) params[3];
404*61046927SAndroid Build Coastguard Worker }
405*61046927SAndroid Build Coastguard Worker texgenfv(texunit - GL_TEXTURE0, coord, pname, p, "glMultiTexGendvEXT");
406*61046927SAndroid Build Coastguard Worker }
407*61046927SAndroid Build Coastguard Worker
408*61046927SAndroid Build Coastguard Worker
409*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_TexGenf(GLenum coord,GLenum pname,GLfloat param)410*61046927SAndroid Build Coastguard Worker _mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param )
411*61046927SAndroid Build Coastguard Worker {
412*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
413*61046927SAndroid Build Coastguard Worker GLfloat p[4];
414*61046927SAndroid Build Coastguard Worker p[0] = param;
415*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
416*61046927SAndroid Build Coastguard Worker texgenfv(ctx->Texture.CurrentUnit, coord, pname, p, "glTexGenf");
417*61046927SAndroid Build Coastguard Worker }
418*61046927SAndroid Build Coastguard Worker
419*61046927SAndroid Build Coastguard Worker
420*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_MultiTexGenfEXT(GLenum texunit,GLenum coord,GLenum pname,GLfloat param)421*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGenfEXT( GLenum texunit, GLenum coord, GLenum pname, GLfloat param )
422*61046927SAndroid Build Coastguard Worker {
423*61046927SAndroid Build Coastguard Worker GLfloat p[4];
424*61046927SAndroid Build Coastguard Worker p[0] = param;
425*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0.0F;
426*61046927SAndroid Build Coastguard Worker texgenfv(texunit - GL_TEXTURE0, coord, pname, p, "glMultiTexGenfEXT");
427*61046927SAndroid Build Coastguard Worker }
428*61046927SAndroid Build Coastguard Worker
429*61046927SAndroid Build Coastguard Worker
430*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_TexGeni(GLenum coord,GLenum pname,GLint param)431*61046927SAndroid Build Coastguard Worker _mesa_TexGeni( GLenum coord, GLenum pname, GLint param )
432*61046927SAndroid Build Coastguard Worker {
433*61046927SAndroid Build Coastguard Worker GLint p[4];
434*61046927SAndroid Build Coastguard Worker p[0] = param;
435*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0;
436*61046927SAndroid Build Coastguard Worker _mesa_TexGeniv( coord, pname, p );
437*61046927SAndroid Build Coastguard Worker }
438*61046927SAndroid Build Coastguard Worker
439*61046927SAndroid Build Coastguard Worker
440*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_MultiTexGeniEXT(GLenum texunit,GLenum coord,GLenum pname,GLint param)441*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGeniEXT( GLenum texunit, GLenum coord, GLenum pname, GLint param )
442*61046927SAndroid Build Coastguard Worker {
443*61046927SAndroid Build Coastguard Worker GLint p[4];
444*61046927SAndroid Build Coastguard Worker p[0] = param;
445*61046927SAndroid Build Coastguard Worker p[1] = p[2] = p[3] = 0;
446*61046927SAndroid Build Coastguard Worker _mesa_MultiTexGenivEXT( texunit, coord, pname, p );
447*61046927SAndroid Build Coastguard Worker }
448*61046927SAndroid Build Coastguard Worker
449*61046927SAndroid Build Coastguard Worker
450*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_GetTexGendv(GLenum coord,GLenum pname,GLdouble * params)451*61046927SAndroid Build Coastguard Worker _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
452*61046927SAndroid Build Coastguard Worker {
453*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
454*61046927SAndroid Build Coastguard Worker gettexgendv(ctx->Texture.CurrentUnit, coord, pname, params, "glGetTexGendv");
455*61046927SAndroid Build Coastguard Worker }
456*61046927SAndroid Build Coastguard Worker
457*61046927SAndroid Build Coastguard Worker
458*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_GetMultiTexGendvEXT(GLenum texunit,GLenum coord,GLenum pname,GLdouble * params)459*61046927SAndroid Build Coastguard Worker _mesa_GetMultiTexGendvEXT( GLenum texunit, GLenum coord, GLenum pname, GLdouble *params )
460*61046927SAndroid Build Coastguard Worker {
461*61046927SAndroid Build Coastguard Worker gettexgendv(texunit - GL_TEXTURE0, coord, pname, params, "glGetMultiTexGendvEXT");
462*61046927SAndroid Build Coastguard Worker }
463*61046927SAndroid Build Coastguard Worker
464*61046927SAndroid Build Coastguard Worker
465*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_GetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)466*61046927SAndroid Build Coastguard Worker _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
467*61046927SAndroid Build Coastguard Worker {
468*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
469*61046927SAndroid Build Coastguard Worker gettexgenfv(ctx->Texture.CurrentUnit, coord, pname, params, "glGetTexGenfv");
470*61046927SAndroid Build Coastguard Worker }
471*61046927SAndroid Build Coastguard Worker
472*61046927SAndroid Build Coastguard Worker
473*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_GetMultiTexGenfvEXT(GLenum texunit,GLenum coord,GLenum pname,GLfloat * params)474*61046927SAndroid Build Coastguard Worker _mesa_GetMultiTexGenfvEXT( GLenum texunit, GLenum coord, GLenum pname, GLfloat *params )
475*61046927SAndroid Build Coastguard Worker {
476*61046927SAndroid Build Coastguard Worker gettexgenfv(texunit - GL_TEXTURE0, coord, pname, params, "glGetMultiTexGenfvEXT");
477*61046927SAndroid Build Coastguard Worker }
478*61046927SAndroid Build Coastguard Worker
479*61046927SAndroid Build Coastguard Worker
480*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_GetTexGeniv(GLenum coord,GLenum pname,GLint * params)481*61046927SAndroid Build Coastguard Worker _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
482*61046927SAndroid Build Coastguard Worker {
483*61046927SAndroid Build Coastguard Worker GET_CURRENT_CONTEXT(ctx);
484*61046927SAndroid Build Coastguard Worker gettexgeniv(ctx->Texture.CurrentUnit, coord, pname, params, "glGetTexGeniv");
485*61046927SAndroid Build Coastguard Worker }
486*61046927SAndroid Build Coastguard Worker
487*61046927SAndroid Build Coastguard Worker
488*61046927SAndroid Build Coastguard Worker void GLAPIENTRY
_mesa_GetMultiTexGenivEXT(GLenum texunit,GLenum coord,GLenum pname,GLint * params)489*61046927SAndroid Build Coastguard Worker _mesa_GetMultiTexGenivEXT( GLenum texunit, GLenum coord, GLenum pname, GLint *params )
490*61046927SAndroid Build Coastguard Worker {
491*61046927SAndroid Build Coastguard Worker gettexgeniv(texunit - GL_TEXTURE0, coord, pname, params, "glGetTexGenivEXT");
492*61046927SAndroid Build Coastguard Worker }
493