blob: ae3c5badce4c419eab0a2c55db52309dbc3981eb [file] [log] [blame]
#include <stdbool.h>
#include "main/mfeatures.h"
#if FEATURE_ES1
#include "api_loopback.h"
#include "api_exec.h"
#include "blend.h"
#include "clear.h"
#include "clip.h"
#include "context.h"
#include "depth.h"
#include "fog.h"
#include "imports.h"
#include "light.h"
#include "lines.h"
#include "matrix.h"
#include "multisample.h"
#include "pixelstore.h"
#include "points.h"
#include "polygon.h"
#include "readpix.h"
#include "texenv.h"
#include "texgen.h"
#include "texobj.h"
#include "texparam.h"
#include "mtypes.h"
#include "viewport.h"
#include "main/drawtex.h"
#include "vbo/vbo.h"
#ifndef GL_APIENTRY
#define GL_APIENTRY GLAPIENTRY
#endif
#include "main/es1_conversion.h"
void GL_APIENTRY
_es_AlphaFuncx(GLenum func, GLclampx ref)
{
_mesa_AlphaFunc(func, (GLclampf) (ref / 65536.0f));
}
void GL_APIENTRY
_es_ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
{
_mesa_ClearColor((GLclampf) (red / 65536.0f),
(GLclampf) (green / 65536.0f),
(GLclampf) (blue / 65536.0f),
(GLclampf) (alpha / 65536.0f));
}
void GL_APIENTRY
_es_ClearDepthx(GLclampx depth)
{
_mesa_ClearDepthf((GLclampf) (depth / 65536.0f));
}
void GL_APIENTRY
_es_ClipPlanef(GLenum plane, const GLfloat *equation)
{
unsigned int i;
GLdouble converted_equation[4];
for (i = 0; i < Elements(converted_equation); i++) {
converted_equation[i] = (GLdouble) (equation[i]);
}
_mesa_ClipPlane(plane, converted_equation);
}
void GL_APIENTRY
_es_ClipPlanex(GLenum plane, const GLfixed *equation)
{
unsigned int i;
GLdouble converted_equation[4];
for (i = 0; i < Elements(converted_equation); i++) {
converted_equation[i] = (GLdouble) (equation[i] / 65536.0);
}
_mesa_ClipPlane(plane, converted_equation);
}
void GL_APIENTRY
_es_Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
{
_es_Color4f((GLfloat) (red / 255.0f),
(GLfloat) (green / 255.0f),
(GLfloat) (blue / 255.0f),
(GLfloat) (alpha / 255.0f));
}
void GL_APIENTRY
_es_Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
{
_es_Color4f((GLfloat) (red / 65536.0f),
(GLfloat) (green / 65536.0f),
(GLfloat) (blue / 65536.0f),
(GLfloat) (alpha / 65536.0f));
}
void GL_APIENTRY
_es_DepthRangex(GLclampx zNear, GLclampx zFar)
{
_mesa_DepthRangef((GLclampf) (zNear / 65536.0f),
(GLclampf) (zFar / 65536.0f));
}
void GL_APIENTRY
_es_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w, GLfixed h)
{
_mesa_DrawTexf((GLfloat) (x / 65536.0f),
(GLfloat) (y / 65536.0f),
(GLfloat) (z / 65536.0f),
(GLfloat) (w / 65536.0f),
(GLfloat) (h / 65536.0f));
}
void GL_APIENTRY
_es_DrawTexxvOES(const GLfixed *coords)
{
unsigned int i;
GLfloat converted_coords[5];
for (i = 0; i < Elements(converted_coords); i++) {
converted_coords[i] = (GLfloat) (coords[i] / 65536.0f);
}
_mesa_DrawTexfv(converted_coords);
}
void GL_APIENTRY
_es_Fogx(GLenum pname, GLfixed param)
{
if (pname != GL_FOG_MODE) {
_mesa_Fogf(pname, (GLfloat) (param / 65536.0f));
} else {
_mesa_Fogf(pname, (GLfloat) param);
}
}
void GL_APIENTRY
_es_Fogxv(GLenum pname, const GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
bool convert_params_value = true;
switch(pname) {
case GL_FOG_MODE:
convert_params_value = false;
n_params = 1;
break;
case GL_FOG_COLOR:
n_params = 4;
break;
case GL_FOG_DENSITY:
case GL_FOG_START:
case GL_FOG_END:
n_params = 1;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glFogxv(pname=0x%x)", pname);
return;
}
if (convert_params_value) {
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
} else {
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) params[i];
}
}
_mesa_Fogfv(pname, converted_params);
}
void GL_APIENTRY
_es_Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
GLfloat zNear, GLfloat zFar)
{
_mesa_Frustum((GLdouble) (left),
(GLdouble) (right),
(GLdouble) (bottom),
(GLdouble) (top),
(GLdouble) (zNear),
(GLdouble) (zFar));
}
void GL_APIENTRY
_es_Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
GLfixed zNear, GLfixed zFar)
{
_mesa_Frustum((GLdouble) (left / 65536.0),
(GLdouble) (right / 65536.0),
(GLdouble) (bottom / 65536.0),
(GLdouble) (top / 65536.0),
(GLdouble) (zNear / 65536.0),
(GLdouble) (zFar / 65536.0));
}
void GL_APIENTRY
_es_GetClipPlanef(GLenum plane, GLfloat *equation)
{
unsigned int i;
GLdouble converted_equation[4];
_mesa_GetClipPlane(plane, converted_equation);
for (i = 0; i < Elements(converted_equation); i++) {
equation[i] = (GLfloat) (converted_equation[i]);
}
}
void GL_APIENTRY
_es_GetClipPlanex(GLenum plane, GLfixed *equation)
{
unsigned int i;
GLdouble converted_equation[4];
_mesa_GetClipPlane(plane, converted_equation);
for (i = 0; i < Elements(converted_equation); i++) {
equation[i] = (GLfixed) (converted_equation[i] * 65536);
}
}
void GL_APIENTRY
_es_GetLightxv(GLenum light, GLenum pname, GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
if (light < GL_LIGHT0 || light > GL_LIGHT7) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetLightxv(light=0x%x)", light);
return;
}
switch(pname) {
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
case GL_POSITION:
n_params = 4;
break;
case GL_SPOT_DIRECTION:
n_params = 3;
break;
case GL_SPOT_EXPONENT:
case GL_SPOT_CUTOFF:
case GL_CONSTANT_ATTENUATION:
case GL_LINEAR_ATTENUATION:
case GL_QUADRATIC_ATTENUATION:
n_params = 1;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetLightxv(pname=0x%x)", pname);
return;
}
_mesa_GetLightfv(light, pname, converted_params);
for (i = 0; i < n_params; i++) {
params[i] = (GLint) (converted_params[i] * 65536);
}
}
void GL_APIENTRY
_es_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
switch(face) {
case GL_FRONT:
case GL_BACK:
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetMaterialxv(face=0x%x)", face);
return;
}
switch(pname) {
case GL_SHININESS:
n_params = 1;
break;
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
case GL_EMISSION:
n_params = 4;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetMaterialxv(pname=0x%x)", pname);
return;
}
_mesa_GetMaterialfv(face, pname, converted_params);
for (i = 0; i < n_params; i++) {
params[i] = (GLint) (converted_params[i] * 65536);
}
}
void GL_APIENTRY
_es_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
bool convert_params_value = true;
switch(target) {
case GL_POINT_SPRITE:
if (pname != GL_COORD_REPLACE) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexEnvxv(target=0x%x)", target);
return;
}
break;
case GL_TEXTURE_FILTER_CONTROL_EXT:
if (pname != GL_TEXTURE_LOD_BIAS_EXT) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexEnvxv(target=0x%x)", target);
return;
}
break;
case GL_TEXTURE_ENV:
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) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexEnvxv(target=0x%x)", target);
return;
}
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexEnvxv(target=0x%x)", target);
return;
}
switch(pname) {
case GL_COORD_REPLACE:
convert_params_value = false;
n_params = 1;
break;
case GL_TEXTURE_LOD_BIAS_EXT:
n_params = 1;
break;
case GL_TEXTURE_ENV_COLOR:
n_params = 4;
break;
case GL_RGB_SCALE:
case GL_ALPHA_SCALE:
n_params = 1;
break;
case GL_TEXTURE_ENV_MODE:
case GL_COMBINE_RGB:
case GL_COMBINE_ALPHA:
case GL_SRC0_RGB:
case GL_SRC1_RGB:
case GL_SRC2_RGB:
case GL_SRC0_ALPHA:
case GL_SRC1_ALPHA:
case GL_SRC2_ALPHA:
case GL_OPERAND0_RGB:
case GL_OPERAND1_RGB:
case GL_OPERAND2_RGB:
case GL_OPERAND0_ALPHA:
case GL_OPERAND1_ALPHA:
case GL_OPERAND2_ALPHA:
convert_params_value = false;
n_params = 1;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexEnvxv(pname=0x%x)", pname);
return;
}
_mesa_GetTexEnvfv(target, pname, converted_params);
if (convert_params_value) {
for (i = 0; i < n_params; i++) {
params[i] = (GLint) (converted_params[i] * 65536);
}
} else {
for (i = 0; i < n_params; i++) {
params[i] = (GLfixed) converted_params[i];
}
}
}
void GL_APIENTRY
_check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
{
_mesa_GetTexGeniv(coord, pname, params);
}
void GL_APIENTRY
_check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
{
_mesa_GetTexGeniv(coord, pname, (GLint *) params);
}
void GL_APIENTRY
_es_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
bool convert_params_value = true;
switch(target) {
case GL_TEXTURE_2D:
case GL_TEXTURE_CUBE_MAP:
case GL_TEXTURE_EXTERNAL_OES:
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexParameterxv(target=0x%x)", target);
return;
}
switch(pname) {
case GL_TEXTURE_WRAP_S:
case GL_TEXTURE_WRAP_T:
case GL_TEXTURE_MIN_FILTER:
case GL_TEXTURE_MAG_FILTER:
case GL_GENERATE_MIPMAP:
convert_params_value = false;
n_params = 1;
break;
case GL_TEXTURE_CROP_RECT_OES:
n_params = 4;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glGetTexParameterxv(pname=0x%x)", pname);
return;
}
_mesa_GetTexParameterfv(target, pname, converted_params);
if (convert_params_value) {
for (i = 0; i < n_params; i++) {
params[i] = (GLint) (converted_params[i] * 65536);
}
} else {
for (i = 0; i < n_params; i++) {
params[i] = (GLfixed) converted_params[i];
}
}
}
void GL_APIENTRY
_es_LightModelx(GLenum pname, GLfixed param)
{
_mesa_LightModelf(pname, (GLfloat) param);
}
void GL_APIENTRY
_es_LightModelxv(GLenum pname, const GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
bool convert_params_value = true;
switch(pname) {
case GL_LIGHT_MODEL_AMBIENT:
n_params = 4;
break;
case GL_LIGHT_MODEL_TWO_SIDE:
convert_params_value = false;
n_params = 1;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glLightModelxv(pname=0x%x)", pname);
return;
}
if (convert_params_value) {
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
} else {
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) params[i];
}
}
_mesa_LightModelfv(pname, converted_params);
}
void GL_APIENTRY
_es_Lightx(GLenum light, GLenum pname, GLfixed param)
{
_mesa_Lightf(light, pname, (GLfloat) (param / 65536.0f));
}
void GL_APIENTRY
_es_Lightxv(GLenum light, GLenum pname, const GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
if (light < GL_LIGHT0 || light > GL_LIGHT7) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glLightxv(light=0x%x)", light);
return;
}
switch(pname) {
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
case GL_POSITION:
n_params = 4;
break;
case GL_SPOT_DIRECTION:
n_params = 3;
break;
case GL_SPOT_EXPONENT:
case GL_SPOT_CUTOFF:
case GL_CONSTANT_ATTENUATION:
case GL_LINEAR_ATTENUATION:
case GL_QUADRATIC_ATTENUATION:
n_params = 1;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glLightxv(pname=0x%x)", pname);
return;
}
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
_mesa_Lightfv(light, pname, converted_params);
}
void GL_APIENTRY
_es_LineWidthx(GLfixed width)
{
_mesa_LineWidth((GLfloat) (width / 65536.0f));
}
void GL_APIENTRY
_es_LoadMatrixx(const GLfixed *m)
{
unsigned int i;
GLfloat converted_m[16];
for (i = 0; i < Elements(converted_m); i++) {
converted_m[i] = (GLfloat) (m[i] / 65536.0f);
}
_mesa_LoadMatrixf(converted_m);
}
void GL_APIENTRY
_es_Materialx(GLenum face, GLenum pname, GLfixed param)
{
if (face != GL_FRONT_AND_BACK) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glMaterialx(face=0x%x)", face);
return;
}
if (pname != GL_SHININESS) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glMaterialx(pname=0x%x)", pname);
return;
}
_es_Materialf(face, pname, (GLfloat) (param / 65536.0f));
}
void GL_APIENTRY
_es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
if (face != GL_FRONT_AND_BACK) {
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glMaterialxv(face=0x%x)", face);
return;
}
switch(pname) {
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_AMBIENT_AND_DIFFUSE:
case GL_SPECULAR:
case GL_EMISSION:
n_params = 4;
break;
case GL_SHININESS:
n_params = 1;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glMaterialxv(pname=0x%x)", pname);
return;
}
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
_es_Materialfv(face, pname, converted_params);
}
void GL_APIENTRY
_es_MultMatrixx(const GLfixed *m)
{
unsigned int i;
GLfloat converted_m[16];
for (i = 0; i < Elements(converted_m); i++) {
converted_m[i] = (GLfloat) (m[i] / 65536.0f);
}
_mesa_MultMatrixf(converted_m);
}
void GL_APIENTRY
_es_MultiTexCoord4x(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
{
_es_MultiTexCoord4f(texture,
(GLfloat) (s / 65536.0f),
(GLfloat) (t / 65536.0f),
(GLfloat) (r / 65536.0f),
(GLfloat) (q / 65536.0f));
}
void GL_APIENTRY
_es_Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
{
_es_Normal3f((GLfloat) (nx / 65536.0f),
(GLfloat) (ny / 65536.0f),
(GLfloat) (nz / 65536.0f));
}
void GL_APIENTRY
_es_Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
GLfloat zNear, GLfloat zFar)
{
_mesa_Ortho((GLdouble) (left),
(GLdouble) (right),
(GLdouble) (bottom),
(GLdouble) (top),
(GLdouble) (zNear),
(GLdouble) (zFar));
}
void GL_APIENTRY
_es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,
GLfixed zNear, GLfixed zFar)
{
_mesa_Ortho((GLdouble) (left / 65536.0),
(GLdouble) (right / 65536.0),
(GLdouble) (bottom / 65536.0),
(GLdouble) (top / 65536.0),
(GLdouble) (zNear / 65536.0),
(GLdouble) (zFar / 65536.0));
}
void GL_APIENTRY
_es_PointParameterx(GLenum pname, GLfixed param)
{
_mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));
}
void GL_APIENTRY
_es_PointParameterxv(GLenum pname, const GLfixed *params)
{
unsigned int i;
unsigned int n_params = 3;
GLfloat converted_params[3];
switch(pname) {
case GL_POINT_SIZE_MIN:
case GL_POINT_SIZE_MAX:
case GL_POINT_FADE_THRESHOLD_SIZE:
n_params = 1;
break;
case GL_POINT_DISTANCE_ATTENUATION:
n_params = 3;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glPointParameterxv(pname=0x%x)", pname);
return;
}
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
_mesa_PointParameterfv(pname, converted_params);
}
void GL_APIENTRY
_es_PointSizex(GLfixed size)
{
_mesa_PointSize((GLfloat) (size / 65536.0f));
}
void GL_APIENTRY
_es_PolygonOffsetx(GLfixed factor, GLfixed units)
{
_mesa_PolygonOffset((GLfloat) (factor / 65536.0f),
(GLfloat) (units / 65536.0f));
}
void GL_APIENTRY
_es_Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
{
_mesa_Rotatef((GLfloat) (angle / 65536.0f),
(GLfloat) (x / 65536.0f),
(GLfloat) (y / 65536.0f),
(GLfloat) (z / 65536.0f));
}
void GL_APIENTRY
_es_SampleCoveragex(GLclampx value, GLboolean invert)
{
_mesa_SampleCoverageARB((GLclampf) (value / 65536.0f),
invert);
}
void GL_APIENTRY
_es_Scalex(GLfixed x, GLfixed y, GLfixed z)
{
_mesa_Scalef((GLfloat) (x / 65536.0f),
(GLfloat) (y / 65536.0f),
(GLfloat) (z / 65536.0f));
}
void GL_APIENTRY
_es_TexEnvx(GLenum target, GLenum pname, GLfixed param)
{
switch(target) {
case GL_POINT_SPRITE:
case GL_TEXTURE_FILTER_CONTROL_EXT:
case GL_TEXTURE_ENV:
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glTexEnvx(target=0x%x)", target);
return;
}
switch(pname) {
case GL_COORD_REPLACE:
case GL_TEXTURE_ENV_MODE:
case GL_COMBINE_RGB:
case GL_COMBINE_ALPHA:
case GL_SRC0_RGB:
case GL_SRC1_RGB:
case GL_SRC2_RGB:
case GL_SRC0_ALPHA:
case GL_SRC1_ALPHA:
case GL_SRC2_ALPHA:
case GL_OPERAND0_RGB:
case GL_OPERAND1_RGB:
case GL_OPERAND2_RGB:
case GL_OPERAND0_ALPHA:
case GL_OPERAND1_ALPHA:
case GL_OPERAND2_ALPHA:
_mesa_TexEnvf(target, pname, (GLfloat) param);
break;
case GL_TEXTURE_LOD_BIAS_EXT:
case GL_RGB_SCALE:
case GL_ALPHA_SCALE:
_mesa_TexEnvf(target, pname, (GLfloat) (param / 65536.0f));
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glTexEnvx(pname=0x%x)", pname);
return;
}
}
void GL_APIENTRY
_es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
{
switch(target) {
case GL_POINT_SPRITE:
case GL_TEXTURE_FILTER_CONTROL_EXT:
case GL_TEXTURE_ENV:
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glTexEnvxv(target=0x%x)", target);
return;
}
switch(pname) {
case GL_COORD_REPLACE:
case GL_TEXTURE_ENV_MODE:
case GL_COMBINE_RGB:
case GL_COMBINE_ALPHA:
case GL_SRC0_RGB:
case GL_SRC1_RGB:
case GL_SRC2_RGB:
case GL_SRC0_ALPHA:
case GL_SRC1_ALPHA:
case GL_SRC2_ALPHA:
case GL_OPERAND0_RGB:
case GL_OPERAND1_RGB:
case GL_OPERAND2_RGB:
case GL_OPERAND0_ALPHA:
case GL_OPERAND1_ALPHA:
case GL_OPERAND2_ALPHA:
_mesa_TexEnvf(target, pname, (GLfloat) params[0]);
break;
case GL_TEXTURE_LOD_BIAS_EXT:
case GL_RGB_SCALE:
case GL_ALPHA_SCALE:
_mesa_TexEnvf(target, pname, (GLfloat) (params[0] / 65536.0f));
break;
case GL_TEXTURE_ENV_COLOR: {
unsigned int i;
GLfloat converted_params[4];
for (i = 0; i < Elements(converted_params); i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
_mesa_TexEnvfv(target, pname, converted_params);
break;
}
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glTexEnvxv(pname=0x%x)", pname);
return;
}
}
void GL_APIENTRY
_check_TexGeniOES(GLenum coord, GLenum pname, GLint param)
{
_es_TexGenf(coord, pname, (GLfloat) param);
}
void GL_APIENTRY
_check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
{
_es_TexGenf(coord, pname, (GLfloat) params[0]);
}
void GL_APIENTRY
_check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
{
_es_TexGenf(coord, pname, (GLfloat) param);
}
void GL_APIENTRY
_check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
{
_es_TexGenf(coord, pname, (GLfloat) params[0]);
}
void GL_APIENTRY
_es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
{
if (pname == GL_TEXTURE_MAX_ANISOTROPY_EXT) {
_mesa_TexParameterf(target, pname, (GLfloat) (param / 65536.0f));
} else {
_mesa_TexParameterf(target, pname, (GLfloat) param);
}
}
void GL_APIENTRY
_es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
{
unsigned int i;
unsigned int n_params = 4;
GLfloat converted_params[4];
bool convert_params_value = true;
switch(target) {
case GL_TEXTURE_2D:
case GL_TEXTURE_CUBE_MAP:
case GL_TEXTURE_EXTERNAL_OES:
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glTexParameterxv(target=0x%x)", target);
return;
}
switch(pname) {
case GL_TEXTURE_WRAP_S:
case GL_TEXTURE_WRAP_T:
convert_params_value = false;
n_params = 1;
break;
case GL_TEXTURE_MIN_FILTER:
case GL_TEXTURE_MAG_FILTER:
case GL_GENERATE_MIPMAP:
convert_params_value = false;
n_params = 1;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
n_params = 1;
break;
case GL_TEXTURE_CROP_RECT_OES:
n_params = 4;
break;
default:
_mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
"glTexParameterxv(pname=0x%x)", pname);
return;
}
if (convert_params_value) {
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) (params[i] / 65536.0f);
}
} else {
for (i = 0; i < n_params; i++) {
converted_params[i] = (GLfloat) params[i];
}
}
_mesa_TexParameterfv(target, pname, converted_params);
}
void GL_APIENTRY
_es_Translatex(GLfixed x, GLfixed y, GLfixed z)
{
_mesa_Translatef((GLfloat) (x / 65536.0f),
(GLfloat) (y / 65536.0f),
(GLfloat) (z / 65536.0f));
}
#endif /* FEATURE_ES1 */