1 #include <stdbool.h>
2 #include "main/mfeatures.h"
3
4 #if FEATURE_ES1
5
6 #include "api_loopback.h"
7 #include "api_exec.h"
8 #include "blend.h"
9 #include "clear.h"
10 #include "clip.h"
11 #include "context.h"
12 #include "depth.h"
13 #include "fog.h"
14 #include "imports.h"
15 #include "light.h"
16 #include "lines.h"
17 #include "matrix.h"
18 #include "multisample.h"
19 #include "pixelstore.h"
20 #include "points.h"
21 #include "polygon.h"
22 #include "readpix.h"
23 #include "texenv.h"
24 #include "texgen.h"
25 #include "texobj.h"
26 #include "texparam.h"
27 #include "mtypes.h"
28 #include "viewport.h"
29 #include "main/drawtex.h"
30 #include "vbo/vbo.h"
31
32 #ifndef GL_APIENTRY
33 #define GL_APIENTRY GLAPIENTRY
34 #endif
35
36 #include "main/es1_conversion.h"
37
38 void GL_APIENTRY
_es_AlphaFuncx(GLenum func,GLclampx ref)39 _es_AlphaFuncx(GLenum func, GLclampx ref)
40 {
41 _mesa_AlphaFunc(func, (GLclampf) (ref / 65536.0f));
42 }
43
44 void GL_APIENTRY
_es_ClearColorx(GLclampx red,GLclampx green,GLclampx blue,GLclampx alpha)45 _es_ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
46 {
47 _mesa_ClearColor((GLclampf) (red / 65536.0f),
48 (GLclampf) (green / 65536.0f),
49 (GLclampf) (blue / 65536.0f),
50 (GLclampf) (alpha / 65536.0f));
51 }
52
53 void GL_APIENTRY
_es_ClearDepthx(GLclampx depth)54 _es_ClearDepthx(GLclampx depth)
55 {
56 _mesa_ClearDepthf((GLclampf) (depth / 65536.0f));
57 }
58
59 void GL_APIENTRY
_es_ClipPlanef(GLenum plane,const GLfloat * equation)60 _es_ClipPlanef(GLenum plane, const GLfloat *equation)
61 {
62 unsigned int i;
63 GLdouble converted_equation[4];
64
65 for (i = 0; i < Elements(converted_equation); i++) {
66 converted_equation[i] = (GLdouble) (equation[i]);
67 }
68
69 _mesa_ClipPlane(plane, converted_equation);
70 }
71
72 void GL_APIENTRY
_es_ClipPlanex(GLenum plane,const GLfixed * equation)73 _es_ClipPlanex(GLenum plane, const GLfixed *equation)
74 {
75 unsigned int i;
76 GLdouble converted_equation[4];
77
78 for (i = 0; i < Elements(converted_equation); i++) {
79 converted_equation[i] = (GLdouble) (equation[i] / 65536.0);
80 }
81
82 _mesa_ClipPlane(plane, converted_equation);
83 }
84
85 void GL_APIENTRY
_es_Color4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)86 _es_Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
87 {
88 _es_Color4f((GLfloat) (red / 255.0f),
89 (GLfloat) (green / 255.0f),
90 (GLfloat) (blue / 255.0f),
91 (GLfloat) (alpha / 255.0f));
92 }
93
94 void GL_APIENTRY
_es_Color4x(GLfixed red,GLfixed green,GLfixed blue,GLfixed alpha)95 _es_Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
96 {
97 _es_Color4f((GLfloat) (red / 65536.0f),
98 (GLfloat) (green / 65536.0f),
99 (GLfloat) (blue / 65536.0f),
100 (GLfloat) (alpha / 65536.0f));
101 }
102
103 void GL_APIENTRY
_es_DepthRangex(GLclampx zNear,GLclampx zFar)104 _es_DepthRangex(GLclampx zNear, GLclampx zFar)
105 {
106 _mesa_DepthRangef((GLclampf) (zNear / 65536.0f),
107 (GLclampf) (zFar / 65536.0f));
108 }
109
110 void GL_APIENTRY
_es_DrawTexxOES(GLfixed x,GLfixed y,GLfixed z,GLfixed w,GLfixed h)111 _es_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w, GLfixed h)
112 {
113
114 _mesa_DrawTexf((GLfloat) (x / 65536.0f),
115 (GLfloat) (y / 65536.0f),
116 (GLfloat) (z / 65536.0f),
117 (GLfloat) (w / 65536.0f),
118 (GLfloat) (h / 65536.0f));
119 }
120
121 void GL_APIENTRY
_es_DrawTexxvOES(const GLfixed * coords)122 _es_DrawTexxvOES(const GLfixed *coords)
123 {
124 unsigned int i;
125 GLfloat converted_coords[5];
126
127 for (i = 0; i < Elements(converted_coords); i++) {
128 converted_coords[i] = (GLfloat) (coords[i] / 65536.0f);
129 }
130
131 _mesa_DrawTexfv(converted_coords);
132 }
133
134 void GL_APIENTRY
_es_Fogx(GLenum pname,GLfixed param)135 _es_Fogx(GLenum pname, GLfixed param)
136 {
137 if (pname != GL_FOG_MODE) {
138 _mesa_Fogf(pname, (GLfloat) (param / 65536.0f));
139 } else {
140 _mesa_Fogf(pname, (GLfloat) param);
141 }
142
143 }
144
145 void GL_APIENTRY
_es_Fogxv(GLenum pname,const GLfixed * params)146 _es_Fogxv(GLenum pname, const GLfixed *params)
147 {
148 unsigned int i;
149 unsigned int n_params = 4;
150 GLfloat converted_params[4];
151 bool convert_params_value = true;
152
153 switch(pname) {
154 case GL_FOG_MODE:
155 convert_params_value = false;
156 n_params = 1;
157 break;
158 case GL_FOG_COLOR:
159 n_params = 4;
160 break;
161 case GL_FOG_DENSITY:
162 case GL_FOG_START:
163 case GL_FOG_END:
164 n_params = 1;
165 break;
166 default:
167 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
168 "glFogxv(pname=0x%x)", pname);
169 return;
170 }
171
172 if (convert_params_value) {
173 for (i = 0; i < n_params; i++) {
174 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
175 }
176 } else {
177 for (i = 0; i < n_params; i++) {
178 converted_params[i] = (GLfloat) params[i];
179 }
180 }
181
182 _mesa_Fogfv(pname, converted_params);
183 }
184
185 void GL_APIENTRY
_es_Frustumf(GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)186 _es_Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
187 GLfloat zNear, GLfloat zFar)
188 {
189 _mesa_Frustum((GLdouble) (left),
190 (GLdouble) (right),
191 (GLdouble) (bottom),
192 (GLdouble) (top),
193 (GLdouble) (zNear),
194 (GLdouble) (zFar));
195 }
196
197 void GL_APIENTRY
_es_Frustumx(GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)198 _es_Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
199 GLfixed zNear, GLfixed zFar)
200 {
201 _mesa_Frustum((GLdouble) (left / 65536.0),
202 (GLdouble) (right / 65536.0),
203 (GLdouble) (bottom / 65536.0),
204 (GLdouble) (top / 65536.0),
205 (GLdouble) (zNear / 65536.0),
206 (GLdouble) (zFar / 65536.0));
207 }
208
209 void GL_APIENTRY
_es_GetClipPlanef(GLenum plane,GLfloat * equation)210 _es_GetClipPlanef(GLenum plane, GLfloat *equation)
211 {
212 unsigned int i;
213 GLdouble converted_equation[4];
214
215 _mesa_GetClipPlane(plane, converted_equation);
216 for (i = 0; i < Elements(converted_equation); i++) {
217 equation[i] = (GLfloat) (converted_equation[i]);
218 }
219 }
220
221 void GL_APIENTRY
_es_GetClipPlanex(GLenum plane,GLfixed * equation)222 _es_GetClipPlanex(GLenum plane, GLfixed *equation)
223 {
224 unsigned int i;
225 GLdouble converted_equation[4];
226
227 _mesa_GetClipPlane(plane, converted_equation);
228 for (i = 0; i < Elements(converted_equation); i++) {
229 equation[i] = (GLfixed) (converted_equation[i] * 65536);
230 }
231 }
232
233 void GL_APIENTRY
_es_GetLightxv(GLenum light,GLenum pname,GLfixed * params)234 _es_GetLightxv(GLenum light, GLenum pname, GLfixed *params)
235 {
236 unsigned int i;
237 unsigned int n_params = 4;
238 GLfloat converted_params[4];
239
240 if (light < GL_LIGHT0 || light > GL_LIGHT7) {
241 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
242 "glGetLightxv(light=0x%x)", light);
243 return;
244 }
245 switch(pname) {
246 case GL_AMBIENT:
247 case GL_DIFFUSE:
248 case GL_SPECULAR:
249 case GL_POSITION:
250 n_params = 4;
251 break;
252 case GL_SPOT_DIRECTION:
253 n_params = 3;
254 break;
255 case GL_SPOT_EXPONENT:
256 case GL_SPOT_CUTOFF:
257 case GL_CONSTANT_ATTENUATION:
258 case GL_LINEAR_ATTENUATION:
259 case GL_QUADRATIC_ATTENUATION:
260 n_params = 1;
261 break;
262 default:
263 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
264 "glGetLightxv(pname=0x%x)", pname);
265 return;
266 }
267
268 _mesa_GetLightfv(light, pname, converted_params);
269 for (i = 0; i < n_params; i++) {
270 params[i] = (GLint) (converted_params[i] * 65536);
271 }
272 }
273
274 void GL_APIENTRY
_es_GetMaterialxv(GLenum face,GLenum pname,GLfixed * params)275 _es_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
276 {
277 unsigned int i;
278 unsigned int n_params = 4;
279 GLfloat converted_params[4];
280
281 switch(face) {
282 case GL_FRONT:
283 case GL_BACK:
284 break;
285 default:
286 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
287 "glGetMaterialxv(face=0x%x)", face);
288 return;
289 }
290 switch(pname) {
291 case GL_SHININESS:
292 n_params = 1;
293 break;
294 case GL_AMBIENT:
295 case GL_DIFFUSE:
296 case GL_SPECULAR:
297 case GL_EMISSION:
298 n_params = 4;
299 break;
300 default:
301 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
302 "glGetMaterialxv(pname=0x%x)", pname);
303 return;
304 }
305
306 _mesa_GetMaterialfv(face, pname, converted_params);
307 for (i = 0; i < n_params; i++) {
308 params[i] = (GLint) (converted_params[i] * 65536);
309 }
310 }
311
312 void GL_APIENTRY
_es_GetTexEnvxv(GLenum target,GLenum pname,GLfixed * params)313 _es_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
314 {
315 unsigned int i;
316 unsigned int n_params = 4;
317 GLfloat converted_params[4];
318 bool convert_params_value = true;
319
320 switch(target) {
321 case GL_POINT_SPRITE:
322 if (pname != GL_COORD_REPLACE) {
323 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
324 "glGetTexEnvxv(target=0x%x)", target);
325 return;
326 }
327 break;
328 case GL_TEXTURE_FILTER_CONTROL_EXT:
329 if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
330 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
331 "glGetTexEnvxv(target=0x%x)", target);
332 return;
333 }
334 break;
335 case GL_TEXTURE_ENV:
336 if (pname != GL_TEXTURE_ENV_COLOR && pname != GL_RGB_SCALE && pname != GL_ALPHA_SCALE && pname != GL_TEXTURE_ENV_MODE && pname != GL_COMBINE_RGB && pname != GL_COMBINE_ALPHA && pname != GL_SRC0_RGB && pname != GL_SRC1_RGB && pname != GL_SRC2_RGB && pname != GL_SRC0_ALPHA && pname != GL_SRC1_ALPHA && pname != GL_SRC2_ALPHA && pname != GL_OPERAND0_RGB && pname != GL_OPERAND1_RGB && pname != GL_OPERAND2_RGB && pname != GL_OPERAND0_ALPHA && pname != GL_OPERAND1_ALPHA && pname != GL_OPERAND2_ALPHA) {
337 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
338 "glGetTexEnvxv(target=0x%x)", target);
339 return;
340 }
341 break;
342 default:
343 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
344 "glGetTexEnvxv(target=0x%x)", target);
345 return;
346 }
347 switch(pname) {
348 case GL_COORD_REPLACE:
349 convert_params_value = false;
350 n_params = 1;
351 break;
352 case GL_TEXTURE_LOD_BIAS_EXT:
353 n_params = 1;
354 break;
355 case GL_TEXTURE_ENV_COLOR:
356 n_params = 4;
357 break;
358 case GL_RGB_SCALE:
359 case GL_ALPHA_SCALE:
360 n_params = 1;
361 break;
362 case GL_TEXTURE_ENV_MODE:
363 case GL_COMBINE_RGB:
364 case GL_COMBINE_ALPHA:
365 case GL_SRC0_RGB:
366 case GL_SRC1_RGB:
367 case GL_SRC2_RGB:
368 case GL_SRC0_ALPHA:
369 case GL_SRC1_ALPHA:
370 case GL_SRC2_ALPHA:
371 case GL_OPERAND0_RGB:
372 case GL_OPERAND1_RGB:
373 case GL_OPERAND2_RGB:
374 case GL_OPERAND0_ALPHA:
375 case GL_OPERAND1_ALPHA:
376 case GL_OPERAND2_ALPHA:
377 convert_params_value = false;
378 n_params = 1;
379 break;
380 default:
381 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
382 "glGetTexEnvxv(pname=0x%x)", pname);
383 return;
384 }
385
386 _mesa_GetTexEnvfv(target, pname, converted_params);
387 if (convert_params_value) {
388 for (i = 0; i < n_params; i++) {
389 params[i] = (GLint) (converted_params[i] * 65536);
390 }
391 } else {
392 for (i = 0; i < n_params; i++) {
393 params[i] = (GLfixed) converted_params[i];
394 }
395 }
396 }
397
398 void GL_APIENTRY
_check_GetTexGenivOES(GLenum coord,GLenum pname,GLint * params)399 _check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
400 {
401 _mesa_GetTexGeniv(coord, pname, params);
402 }
403
404 void GL_APIENTRY
_check_GetTexGenxvOES(GLenum coord,GLenum pname,GLfixed * params)405 _check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
406 {
407 _mesa_GetTexGeniv(coord, pname, (GLint *) params);
408 }
409
410 void GL_APIENTRY
_es_GetTexParameterxv(GLenum target,GLenum pname,GLfixed * params)411 _es_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
412 {
413 unsigned int i;
414 unsigned int n_params = 4;
415 GLfloat converted_params[4];
416 bool convert_params_value = true;
417
418 switch(target) {
419 case GL_TEXTURE_2D:
420 case GL_TEXTURE_CUBE_MAP:
421 case GL_TEXTURE_EXTERNAL_OES:
422 break;
423 default:
424 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
425 "glGetTexParameterxv(target=0x%x)", target);
426 return;
427 }
428 switch(pname) {
429 case GL_TEXTURE_WRAP_S:
430 case GL_TEXTURE_WRAP_T:
431 case GL_TEXTURE_MIN_FILTER:
432 case GL_TEXTURE_MAG_FILTER:
433 case GL_GENERATE_MIPMAP:
434 convert_params_value = false;
435 n_params = 1;
436 break;
437 case GL_TEXTURE_CROP_RECT_OES:
438 n_params = 4;
439 break;
440 default:
441 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
442 "glGetTexParameterxv(pname=0x%x)", pname);
443 return;
444 }
445
446 _mesa_GetTexParameterfv(target, pname, converted_params);
447 if (convert_params_value) {
448 for (i = 0; i < n_params; i++) {
449 params[i] = (GLint) (converted_params[i] * 65536);
450 }
451 } else {
452 for (i = 0; i < n_params; i++) {
453 params[i] = (GLfixed) converted_params[i];
454 }
455 }
456 }
457
458 void GL_APIENTRY
_es_LightModelx(GLenum pname,GLfixed param)459 _es_LightModelx(GLenum pname, GLfixed param)
460 {
461 _mesa_LightModelf(pname, (GLfloat) param);
462 }
463
464 void GL_APIENTRY
_es_LightModelxv(GLenum pname,const GLfixed * params)465 _es_LightModelxv(GLenum pname, const GLfixed *params)
466 {
467 unsigned int i;
468 unsigned int n_params = 4;
469 GLfloat converted_params[4];
470 bool convert_params_value = true;
471
472 switch(pname) {
473 case GL_LIGHT_MODEL_AMBIENT:
474 n_params = 4;
475 break;
476 case GL_LIGHT_MODEL_TWO_SIDE:
477 convert_params_value = false;
478 n_params = 1;
479 break;
480 default:
481 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
482 "glLightModelxv(pname=0x%x)", pname);
483 return;
484 }
485
486 if (convert_params_value) {
487 for (i = 0; i < n_params; i++) {
488 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
489 }
490 } else {
491 for (i = 0; i < n_params; i++) {
492 converted_params[i] = (GLfloat) params[i];
493 }
494 }
495
496 _mesa_LightModelfv(pname, converted_params);
497 }
498
499 void GL_APIENTRY
_es_Lightx(GLenum light,GLenum pname,GLfixed param)500 _es_Lightx(GLenum light, GLenum pname, GLfixed param)
501 {
502 _mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
503 }
504
505 void GL_APIENTRY
_es_Lightxv(GLenum light,GLenum pname,const GLfixed * params)506 _es_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
507 {
508 unsigned int i;
509 unsigned int n_params = 4;
510 GLfloat converted_params[4];
511
512 if (light < GL_LIGHT0 || light > GL_LIGHT7) {
513 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
514 "glLightxv(light=0x%x)", light);
515 return;
516 }
517 switch(pname) {
518 case GL_AMBIENT:
519 case GL_DIFFUSE:
520 case GL_SPECULAR:
521 case GL_POSITION:
522 n_params = 4;
523 break;
524 case GL_SPOT_DIRECTION:
525 n_params = 3;
526 break;
527 case GL_SPOT_EXPONENT:
528 case GL_SPOT_CUTOFF:
529 case GL_CONSTANT_ATTENUATION:
530 case GL_LINEAR_ATTENUATION:
531 case GL_QUADRATIC_ATTENUATION:
532 n_params = 1;
533 break;
534 default:
535 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
536 "glLightxv(pname=0x%x)", pname);
537 return;
538 }
539
540 for (i = 0; i < n_params; i++) {
541 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
542 }
543
544 _mesa_Lightfv(light, pname, converted_params);
545 }
546
547 void GL_APIENTRY
_es_LineWidthx(GLfixed width)548 _es_LineWidthx(GLfixed width)
549 {
550 _mesa_LineWidth((GLfloat) (width / 65536.0f));
551 }
552
553 void GL_APIENTRY
_es_LoadMatrixx(const GLfixed * m)554 _es_LoadMatrixx(const GLfixed *m)
555 {
556 unsigned int i;
557 GLfloat converted_m[16];
558
559 for (i = 0; i < Elements(converted_m); i++) {
560 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
561 }
562
563 _mesa_LoadMatrixf(converted_m);
564 }
565
566 void GL_APIENTRY
_es_Materialx(GLenum face,GLenum pname,GLfixed param)567 _es_Materialx(GLenum face, GLenum pname, GLfixed param)
568 {
569 if (face != GL_FRONT_AND_BACK) {
570 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
571 "glMaterialx(face=0x%x)", face);
572 return;
573 }
574
575 if (pname != GL_SHININESS) {
576 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
577 "glMaterialx(pname=0x%x)", pname);
578 return;
579 }
580
581 _es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
582 }
583
584 void GL_APIENTRY
_es_Materialxv(GLenum face,GLenum pname,const GLfixed * params)585 _es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
586 {
587 unsigned int i;
588 unsigned int n_params = 4;
589 GLfloat converted_params[4];
590
591 if (face != GL_FRONT_AND_BACK) {
592 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
593 "glMaterialxv(face=0x%x)", face);
594 return;
595 }
596
597 switch(pname) {
598 case GL_AMBIENT:
599 case GL_DIFFUSE:
600 case GL_AMBIENT_AND_DIFFUSE:
601 case GL_SPECULAR:
602 case GL_EMISSION:
603 n_params = 4;
604 break;
605 case GL_SHININESS:
606 n_params = 1;
607 break;
608 default:
609 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
610 "glMaterialxv(pname=0x%x)", pname);
611 return;
612 }
613
614 for (i = 0; i < n_params; i++) {
615 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
616 }
617
618 _es_Materialfv(face, pname, converted_params);
619 }
620
621 void GL_APIENTRY
_es_MultMatrixx(const GLfixed * m)622 _es_MultMatrixx(const GLfixed *m)
623 {
624 unsigned int i;
625 GLfloat converted_m[16];
626
627 for (i = 0; i < Elements(converted_m); i++) {
628 converted_m[i] = (GLfloat) (m[i] / 65536.0f);
629 }
630
631 _mesa_MultMatrixf(converted_m);
632 }
633
634 void GL_APIENTRY
_es_MultiTexCoord4x(GLenum texture,GLfixed s,GLfixed t,GLfixed r,GLfixed q)635 _es_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
636 {
637 _es_MultiTexCoord4f(texture,
638 (GLfloat) (s / 65536.0f),
639 (GLfloat) (t / 65536.0f),
640 (GLfloat) (r / 65536.0f),
641 (GLfloat) (q / 65536.0f));
642 }
643
644 void GL_APIENTRY
_es_Normal3x(GLfixed nx,GLfixed ny,GLfixed nz)645 _es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
646 {
647 _es_Normal3f((GLfloat) (nx / 65536.0f),
648 (GLfloat) (ny / 65536.0f),
649 (GLfloat) (nz / 65536.0f));
650 }
651
652 void GL_APIENTRY
_es_Orthof(GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)653 _es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
654 GLfloat zNear, GLfloat zFar)
655 {
656 _mesa_Ortho((GLdouble) (left),
657 (GLdouble) (right),
658 (GLdouble) (bottom),
659 (GLdouble) (top),
660 (GLdouble) (zNear),
661 (GLdouble) (zFar));
662 }
663
664 void GL_APIENTRY
_es_Orthox(GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)665 _es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
666 GLfixed zNear, GLfixed zFar)
667 {
668 _mesa_Ortho((GLdouble) (left / 65536.0),
669 (GLdouble) (right / 65536.0),
670 (GLdouble) (bottom / 65536.0),
671 (GLdouble) (top / 65536.0),
672 (GLdouble) (zNear / 65536.0),
673 (GLdouble) (zFar / 65536.0));
674 }
675
676 void GL_APIENTRY
_es_PointParameterx(GLenum pname,GLfixed param)677 _es_PointParameterx(GLenum pname, GLfixed param)
678 {
679 _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
680 }
681
682 void GL_APIENTRY
_es_PointParameterxv(GLenum pname,const GLfixed * params)683 _es_PointParameterxv(GLenum pname, const GLfixed *params)
684 {
685 unsigned int i;
686 unsigned int n_params = 3;
687 GLfloat converted_params[3];
688
689 switch(pname) {
690 case GL_POINT_SIZE_MIN:
691 case GL_POINT_SIZE_MAX:
692 case GL_POINT_FADE_THRESHOLD_SIZE:
693 n_params = 1;
694 break;
695 case GL_POINT_DISTANCE_ATTENUATION:
696 n_params = 3;
697 break;
698 default:
699 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
700 "glPointParameterxv(pname=0x%x)", pname);
701 return;
702 }
703
704 for (i = 0; i < n_params; i++) {
705 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
706 }
707
708 _mesa_PointParameterfv(pname, converted_params);
709 }
710
711 void GL_APIENTRY
_es_PointSizex(GLfixed size)712 _es_PointSizex(GLfixed size)
713 {
714 _mesa_PointSize((GLfloat) (size / 65536.0f));
715 }
716
717 void GL_APIENTRY
_es_PolygonOffsetx(GLfixed factor,GLfixed units)718 _es_PolygonOffsetx(GLfixed factor, GLfixed units)
719 {
720 _mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
721 (GLfloat) (units / 65536.0f));
722 }
723
724 void GL_APIENTRY
_es_Rotatex(GLfixed angle,GLfixed x,GLfixed y,GLfixed z)725 _es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
726 {
727 _mesa_Rotatef((GLfloat) (angle / 65536.0f),
728 (GLfloat) (x / 65536.0f),
729 (GLfloat) (y / 65536.0f),
730 (GLfloat) (z / 65536.0f));
731 }
732
733 void GL_APIENTRY
_es_SampleCoveragex(GLclampx value,GLboolean invert)734 _es_SampleCoveragex(GLclampx value, GLboolean invert)
735 {
736 _mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
737 invert);
738 }
739
740 void GL_APIENTRY
_es_Scalex(GLfixed x,GLfixed y,GLfixed z)741 _es_Scalex(GLfixed x, GLfixed y, GLfixed z)
742 {
743 _mesa_Scalef((GLfloat) (x / 65536.0f),
744 (GLfloat) (y / 65536.0f),
745 (GLfloat) (z / 65536.0f));
746 }
747
748 void GL_APIENTRY
_es_TexEnvx(GLenum target,GLenum pname,GLfixed param)749 _es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
750 {
751 switch(target) {
752 case GL_POINT_SPRITE:
753 case GL_TEXTURE_FILTER_CONTROL_EXT:
754 case GL_TEXTURE_ENV:
755 break;
756 default:
757 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
758 "glTexEnvx(target=0x%x)", target);
759 return;
760 }
761
762 switch(pname) {
763 case GL_COORD_REPLACE:
764 case GL_TEXTURE_ENV_MODE:
765 case GL_COMBINE_RGB:
766 case GL_COMBINE_ALPHA:
767 case GL_SRC0_RGB:
768 case GL_SRC1_RGB:
769 case GL_SRC2_RGB:
770 case GL_SRC0_ALPHA:
771 case GL_SRC1_ALPHA:
772 case GL_SRC2_ALPHA:
773 case GL_OPERAND0_RGB:
774 case GL_OPERAND1_RGB:
775 case GL_OPERAND2_RGB:
776 case GL_OPERAND0_ALPHA:
777 case GL_OPERAND1_ALPHA:
778 case GL_OPERAND2_ALPHA:
779 _mesa_TexEnvf(target, pname, (GLfloat) param);
780 break;
781 case GL_TEXTURE_LOD_BIAS_EXT:
782 case GL_RGB_SCALE:
783 case GL_ALPHA_SCALE:
784 _mesa_TexEnvf(target, pname, (GLfloat) (param / 65536.0f));
785 break;
786 default:
787 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
788 "glTexEnvx(pname=0x%x)", pname);
789 return;
790 }
791 }
792
793 void GL_APIENTRY
_es_TexEnvxv(GLenum target,GLenum pname,const GLfixed * params)794 _es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
795 {
796 switch(target) {
797 case GL_POINT_SPRITE:
798 case GL_TEXTURE_FILTER_CONTROL_EXT:
799 case GL_TEXTURE_ENV:
800 break;
801 default:
802 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
803 "glTexEnvxv(target=0x%x)", target);
804 return;
805 }
806
807 switch(pname) {
808 case GL_COORD_REPLACE:
809 case GL_TEXTURE_ENV_MODE:
810 case GL_COMBINE_RGB:
811 case GL_COMBINE_ALPHA:
812 case GL_SRC0_RGB:
813 case GL_SRC1_RGB:
814 case GL_SRC2_RGB:
815 case GL_SRC0_ALPHA:
816 case GL_SRC1_ALPHA:
817 case GL_SRC2_ALPHA:
818 case GL_OPERAND0_RGB:
819 case GL_OPERAND1_RGB:
820 case GL_OPERAND2_RGB:
821 case GL_OPERAND0_ALPHA:
822 case GL_OPERAND1_ALPHA:
823 case GL_OPERAND2_ALPHA:
824 _mesa_TexEnvf(target, pname, (GLfloat) params[0]);
825 break;
826 case GL_TEXTURE_LOD_BIAS_EXT:
827 case GL_RGB_SCALE:
828 case GL_ALPHA_SCALE:
829 _mesa_TexEnvf(target, pname, (GLfloat) (params[0] / 65536.0f));
830 break;
831 case GL_TEXTURE_ENV_COLOR: {
832 unsigned int i;
833 GLfloat converted_params[4];
834
835 for (i = 0; i < Elements(converted_params); i++) {
836 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
837 }
838
839 _mesa_TexEnvfv(target, pname, converted_params);
840 break;
841 }
842 default:
843 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
844 "glTexEnvxv(pname=0x%x)", pname);
845 return;
846 }
847 }
848
849 void GL_APIENTRY
_check_TexGeniOES(GLenum coord,GLenum pname,GLint param)850 _check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
851 {
852 _es_TexGenf(coord, pname, (GLfloat) param);
853 }
854
855 void GL_APIENTRY
_check_TexGenivOES(GLenum coord,GLenum pname,const GLint * params)856 _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
857 {
858 _es_TexGenf(coord, pname, (GLfloat) params[0]);
859 }
860
861 void GL_APIENTRY
_check_TexGenxOES(GLenum coord,GLenum pname,GLfixed param)862 _check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
863 {
864 _es_TexGenf(coord, pname, (GLfloat) param);
865 }
866
867 void GL_APIENTRY
_check_TexGenxvOES(GLenum coord,GLenum pname,const GLfixed * params)868 _check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
869 {
870 _es_TexGenf(coord, pname, (GLfloat) params[0]);
871 }
872
873 void GL_APIENTRY
_es_TexParameterx(GLenum target,GLenum pname,GLfixed param)874 _es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
875 {
876 if (pname == GL_TEXTURE_MAX_ANISOTROPY_EXT) {
877 _mesa_TexParameterf(target, pname, (GLfloat) (param / 65536.0f));
878 } else {
879 _mesa_TexParameterf(target, pname, (GLfloat) param);
880 }
881 }
882
883 void GL_APIENTRY
_es_TexParameterxv(GLenum target,GLenum pname,const GLfixed * params)884 _es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
885 {
886 unsigned int i;
887 unsigned int n_params = 4;
888 GLfloat converted_params[4];
889 bool convert_params_value = true;
890
891 switch(target) {
892 case GL_TEXTURE_2D:
893 case GL_TEXTURE_CUBE_MAP:
894 case GL_TEXTURE_EXTERNAL_OES:
895 break;
896 default:
897 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
898 "glTexParameterxv(target=0x%x)", target);
899 return;
900 }
901 switch(pname) {
902 case GL_TEXTURE_WRAP_S:
903 case GL_TEXTURE_WRAP_T:
904 convert_params_value = false;
905 n_params = 1;
906 break;
907 case GL_TEXTURE_MIN_FILTER:
908 case GL_TEXTURE_MAG_FILTER:
909 case GL_GENERATE_MIPMAP:
910 convert_params_value = false;
911 n_params = 1;
912 break;
913 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
914 n_params = 1;
915 break;
916 case GL_TEXTURE_CROP_RECT_OES:
917 n_params = 4;
918 break;
919 default:
920 _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
921 "glTexParameterxv(pname=0x%x)", pname);
922 return;
923 }
924
925 if (convert_params_value) {
926 for (i = 0; i < n_params; i++) {
927 converted_params[i] = (GLfloat) (params[i] / 65536.0f);
928 }
929 } else {
930 for (i = 0; i < n_params; i++) {
931 converted_params[i] = (GLfloat) params[i];
932 }
933 }
934
935 _mesa_TexParameterfv(target, pname, converted_params);
936 }
937
938 void GL_APIENTRY
_es_Translatex(GLfixed x,GLfixed y,GLfixed z)939 _es_Translatex(GLfixed x, GLfixed y, GLfixed z)
940 {
941 _mesa_Translatef((GLfloat) (x / 65536.0f),
942 (GLfloat) (y / 65536.0f),
943 (GLfloat) (z / 65536.0f));
944 }
945
946 #endif /* FEATURE_ES1 */
947