state_texture.c revision 49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1
/* Copyright (c) 2001, Stanford University
* All rights reserved
*
* See the file LICENSE.txt for information on redistributing this software.
*/
#include "state.h"
#include "state/cr_statetypes.h"
#include "state/cr_texture.h"
#include "cr_hash.h"
#include "cr_string.h"
#include "cr_mem.h"
#include "cr_version.h"
#include "state_internals.h"
#define UNUSED(x) ((void) (x))
{
#ifdef CR_OPENGL_VERSION_1_2
#endif
#ifdef CR_ARB_texture_cube_map
#endif
#ifdef CR_NV_texture_rectangle
#endif
}
{
unsigned int i;
unsigned int a;
/* compute max levels from max sizes */
t->maxLevel = i;
t->max3DLevel = i;
#ifdef CR_ARB_texture_cube_map
t->maxCubeMapLevel = i;
#endif
#ifdef CR_NV_texture_rectangle
t->maxRectLevel = i;
#endif
#ifdef CR_OPENGL_VERSION_1_2
#endif
#ifdef CR_ARB_texture_cube_map
#endif
#ifdef CR_NV_texture_rectangle
#endif
#ifdef CR_OPENGL_VERSION_1_2
#endif
#ifdef CR_ARB_texture_cube_map
#endif
#ifdef CR_NV_texture_rectangle
#endif
t->curTextureUnit = 0;
/* Per-unit initialization */
for (i = 0; i < limits->maxTextureUnits; i++)
{
#ifdef CR_ARB_texture_cube_map
#endif
#ifdef CR_NV_texture_rectangle
#endif
#ifdef CR_NV_texture_rectangle
#endif
#ifdef CR_EXT_texture_lod_bias
#endif
}
}
void
{
int i, face;
#ifdef CR_OPENGL_VERSION_1_2
#endif
/* XXX don't always need all six faces */
/* allocate array of mipmap levels */
return; /* out of memory */
/* init non-zero fields */
for (i = 0; i <= t->maxLevel; i++) {
}
}
#endif
#ifdef CR_ARB_depth_texture
#endif
#ifdef CR_ARB_shadow
#endif
#ifdef CR_ARB_shadow_ambient
#endif
for (i = 0; i < CR_MAX_TEXTURE_UNITS; i++)
{
}
}
/* ================================================================
* Texture internal formats:
*/
const CRTextureFormat _texformat_rgba8888 = {
8, /* RedBits */
8, /* GreenBits */
8, /* BlueBits */
8, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_argb8888 = {
8, /* RedBits */
8, /* GreenBits */
8, /* BlueBits */
8, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_rgb888 = {
8, /* RedBits */
8, /* GreenBits */
8, /* BlueBits */
0, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_rgb565 = {
5, /* RedBits */
6, /* GreenBits */
5, /* BlueBits */
0, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_argb4444 = {
4, /* RedBits */
4, /* GreenBits */
4, /* BlueBits */
4, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_argb1555 = {
5, /* RedBits */
5, /* GreenBits */
5, /* BlueBits */
1, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_al88 = {
0, /* RedBits */
0, /* GreenBits */
0, /* BlueBits */
8, /* AlphaBits */
8, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_rgb332 = {
3, /* RedBits */
3, /* GreenBits */
2, /* BlueBits */
0, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_a8 = {
0, /* RedBits */
0, /* GreenBits */
0, /* BlueBits */
8, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_l8 = {
0, /* RedBits */
0, /* GreenBits */
0, /* BlueBits */
0, /* AlphaBits */
8, /* LuminanceBits */
0, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_i8 = {
0, /* RedBits */
0, /* GreenBits */
0, /* BlueBits */
0, /* AlphaBits */
0, /* LuminanceBits */
8, /* IntensityBits */
0, /* IndexBits */
};
const CRTextureFormat _texformat_ci8 = {
0, /* RedBits */
0, /* GreenBits */
0, /* BlueBits */
0, /* AlphaBits */
0, /* LuminanceBits */
0, /* IntensityBits */
8, /* IndexBits */
};
/**
* Given an internal texture format enum or 1, 2, 3, 4 initialize the
* texture levels texture format. This basically just indicates the
* number of red, green, blue, alpha, luminance, etc. bits are used to
* store the image.
*/
void
{
switch (internalFormat) {
case 4:
case GL_RGBA:
case GL_COMPRESSED_RGBA_ARB:
#ifdef CR_EXT_texture_sRGB
case GL_SRGB_ALPHA_EXT:
case GL_SRGB8_ALPHA8_EXT:
#endif
break;
case 3:
case GL_RGB:
case GL_COMPRESSED_RGB_ARB:
#ifdef CR_EXT_texture_sRGB
case GL_SRGB_EXT:
case GL_SRGB8_EXT:
case GL_COMPRESSED_SRGB_EXT:
#endif
break;
case GL_RGBA2:
case GL_RGBA4:
case GL_RGB5_A1:
case GL_RGBA8:
case GL_RGB10_A2:
case GL_RGBA12:
case GL_RGBA16:
break;
case GL_R3_G3_B2:
break;
case GL_RGB4:
case GL_RGB5:
case GL_RGB8:
case GL_RGB10:
case GL_RGB12:
case GL_RGB16:
break;
case GL_ALPHA:
case GL_ALPHA4:
case GL_ALPHA8:
case GL_ALPHA12:
case GL_ALPHA16:
case GL_COMPRESSED_ALPHA_ARB:
break;
case 1:
case GL_LUMINANCE:
case GL_LUMINANCE4:
case GL_LUMINANCE8:
case GL_LUMINANCE12:
case GL_LUMINANCE16:
#ifdef CR_EXT_texture_sRGB
case GL_SLUMINANCE_EXT:
case GL_SLUMINANCE8_EXT:
#endif
break;
case 2:
case GL_LUMINANCE_ALPHA:
case GL_LUMINANCE4_ALPHA4:
case GL_LUMINANCE6_ALPHA2:
case GL_LUMINANCE8_ALPHA8:
case GL_LUMINANCE12_ALPHA4:
case GL_LUMINANCE12_ALPHA12:
case GL_LUMINANCE16_ALPHA16:
#ifdef CR_EXT_texture_sRGB
case GL_SLUMINANCE_ALPHA_EXT:
#endif
break;
case GL_INTENSITY:
case GL_INTENSITY4:
case GL_INTENSITY8:
case GL_INTENSITY12:
case GL_INTENSITY16:
break;
case GL_COLOR_INDEX:
case GL_COLOR_INDEX1_EXT:
case GL_COLOR_INDEX2_EXT:
case GL_COLOR_INDEX4_EXT:
case GL_COLOR_INDEX8_EXT:
case GL_COLOR_INDEX12_EXT:
case GL_COLOR_INDEX16_EXT:
break;
default:
return;
}
}
#if 0
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (!tobj) return;
}
#endif
/**
* Return the texture object corresponding to the given target and ID.
*/
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (name == 0)
{
switch (target) {
case GL_TEXTURE_1D:
return &t->base1D;
case GL_TEXTURE_2D:
return &t->base2D;
case GL_TEXTURE_3D:
return &t->base3D;
#ifdef CR_ARB_texture_cube_map
case GL_TEXTURE_CUBE_MAP_ARB:
return &t->baseCubeMap;
#endif
#ifdef CR_NV_texture_rectangle
case GL_TEXTURE_RECTANGLE_NV:
return &t->baseRect;
#endif
default:
return NULL;
}
}
return tobj;
}
/*
* Allocate a new texture object with the given name.
* Also insert into hash table.
*/
static CRTextureObj *
{
if (!name)
return NULL;
if (!tobj)
return NULL;
return tobj;
}
/**
* Delete all the data that hangs off a CRTextureObj, but don't
* delete the texture object itself, since it may not have been
* dynamically allocated.
*/
void
{
int k;
int face;
/* Free the texture images */
if (levels) {
/* free all mipmap levels for this face */
for (k = 0; k < CR_MAX_MIPMAP_LEVELS; k++) {
}
}
}
}
}
void
{
}
{
CRContext *g = GetCurrentContext();
FLUSH();
if (g->current.inBeginEnd)
{
return;
}
if (n < 0)
{
"Negative n passed to glGenTextures: %d", n);
return;
}
if (start)
{
GLint i;
for (i = 0; i < n; i++)
}
else
{
}
}
{
GLuint u;
if (!pFBO) return;
for (u=0; u<CR_MAX_COLOR_ATTACHMENTS; ++u)
{
{
}
}
{
}
{
}
}
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
int i;
FLUSH();
if (g->current.inBeginEnd)
{
return;
}
if (n < 0)
{
"Negative n passed to glDeleteTextures: %d", n);
return;
}
for (i=0; i<n; i++)
{
{
GLuint u;
/* remove from hashtable */
/* if the currentTexture is deleted,
** reset back to the base texture.
*/
for (u = 0; u < g->limits.maxTextureUnits; u++)
{
{
}
{
}
#ifdef CR_OPENGL_VERSION_1_2
{
}
#endif
#ifdef CR_ARB_texture_cube_map
{
}
#endif
#ifdef CR_NV_texture_rectangle
{
}
#endif
}
#ifdef CR_EXT_framebuffer_object
#endif
}
}
}
{
CRContext *g = GetCurrentContext();
CRClientState *c = &(g->client);
FLUSH();
if (!g->extensions.ARB_multitexture) {
"glClientActiveTextureARB not available");
return;
}
if (g->current.inBeginEnd)
{
return;
}
if ( texture < GL_TEXTURE0_ARB ||
{
"crStateClientActiveTexture: unit = %d (max is %d)",
return;
}
}
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
FLUSH();
if (!g->extensions.ARB_multitexture) {
"glActiveTextureARB not available");
return;
}
if (g->current.inBeginEnd)
{
return;
}
{
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "Bad texture unit passed to crStateActiveTexture: %d (max is %d)", texture, g->limits.maxTextureUnits );
return;
}
/* update the current matrix pointer, etc. */
}
}
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
FLUSH();
if (g->current.inBeginEnd)
{
return;
}
/* Special Case name = 0 */
if (!texture)
{
switch (target)
{
case GL_TEXTURE_1D:
break;
case GL_TEXTURE_2D:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_3D:
break;
#endif
#ifdef CR_ARB_texture_cube_map
case GL_TEXTURE_CUBE_MAP_ARB:
if (!g->extensions.ARB_texture_cube_map) {
"Invalid target passed to glBindTexture: %d", target);
return;
}
break;
#endif
#ifdef CR_NV_texture_rectangle
case GL_TEXTURE_RECTANGLE_NV:
if (!g->extensions.NV_texture_rectangle) {
"Invalid target passed to glBindTexture: %d", target);
return;
}
break;
#endif
default:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid target passed to glBindTexture: %d", target);
return;
}
return;
}
/* texture != 0 */
/* Get the texture */
if (!tobj)
{
}
/* Check the targets */
{
/* Target isn't set so set it now.*/
}
{
crWarning( "You called glBindTexture with a target of 0x%x, but the texture you wanted was target 0x%x [1D: %x 2D: %x 3D: %x cube: %x]", (int) target, (int) tobj->target, GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_CUBE_MAP );
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "Attempt to bind a texture of diffent dimenions");
return;
}
/* Set the current texture */
switch (target)
{
case GL_TEXTURE_1D:
break;
case GL_TEXTURE_2D:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_3D:
break;
#endif
#ifdef CR_ARB_texture_cube_map
case GL_TEXTURE_CUBE_MAP_ARB:
break;
#endif
#ifdef CR_NV_texture_rectangle
case GL_TEXTURE_RECTANGLE_NV:
break;
#endif
default:
"Invalid target passed to glBindTexture: %d", target);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
unsigned int i;
FLUSH();
if (g->current.inBeginEnd)
{
return;
}
if (!tobj) {
"TexParamterfv(invalid target=0x%x)", target);
return;
}
switch (pname)
{
case GL_TEXTURE_MIN_FILTER:
if (e != GL_NEAREST &&
e != GL_LINEAR &&
e != GL_NEAREST_MIPMAP_NEAREST &&
e != GL_LINEAR_MIPMAP_NEAREST &&
e != GL_NEAREST_MIPMAP_LINEAR &&
e != GL_LINEAR_MIPMAP_LINEAR)
{
"TexParamterfv: GL_TEXTURE_MIN_FILTER invalid param: %d", e);
return;
}
break;
case GL_TEXTURE_MAG_FILTER:
if (e != GL_NEAREST && e != GL_LINEAR)
{
"TexParamterfv: GL_TEXTURE_MAG_FILTER invalid param: %d", e);
return;
}
break;
case GL_TEXTURE_WRAP_S:
}
#ifdef CR_OPENGL_VERSION_1_2
else if (e == GL_CLAMP_TO_EDGE) {
}
#endif
#ifdef GL_CLAMP_TO_EDGE_EXT
}
#endif
#ifdef CR_ARB_texture_border_clamp
}
#endif
}
#endif
else {
"TexParameterfv: GL_TEXTURE_WRAP_S invalid param: 0x%x", e);
return;
}
break;
case GL_TEXTURE_WRAP_T:
}
#ifdef CR_OPENGL_VERSION_1_2
else if (e == GL_CLAMP_TO_EDGE) {
}
#endif
#ifdef GL_CLAMP_TO_EDGE_EXT
}
#endif
#ifdef CR_ARB_texture_border_clamp
}
#endif
}
#endif
else {
"TexParameterfv: GL_TEXTURE_WRAP_T invalid param: 0x%x", e);
return;
}
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_WRAP_R:
}
else if (e == GL_CLAMP_TO_EDGE) {
}
#ifdef GL_CLAMP_TO_EDGE_EXT
}
#endif
#ifdef CR_ARB_texture_border_clamp
}
#endif
}
#endif
else {
"TexParameterfv: GL_TEXTURE_WRAP_R invalid param: 0x%x", e);
return;
}
break;
case GL_TEXTURE_PRIORITY:
break;
case GL_TEXTURE_MIN_LOD:
break;
case GL_TEXTURE_MAX_LOD:
break;
case GL_TEXTURE_BASE_LEVEL:
if (e < 0.0f)
{
"TexParameterfv: GL_TEXTURE_BASE_LEVEL invalid param: 0x%x", e);
return;
}
break;
case GL_TEXTURE_MAX_LEVEL:
if (e < 0.0f)
{
"TexParameterfv: GL_TEXTURE_MAX_LEVEL invalid param: 0x%x", e);
return;
}
break;
#endif
case GL_TEXTURE_BORDER_COLOR:
break;
if (g->extensions.EXT_texture_filter_anisotropic) {
if (param[0] < 1.0f)
{
"TexParameterfv: GL_TEXTURE_MAX_ANISOTROPY_EXT called with parameter less than 1: %f", param[0]);
return;
}
{
}
}
break;
#endif
#ifdef CR_ARB_depth_texture
if (g->extensions.ARB_depth_texture) {
if (param[0] == GL_LUMINANCE ||
param[0] == GL_INTENSITY ||
}
else
{
"TexParameterfv: GL_DEPTH_TEXTURE_MODE_ARB called with invalid parameter: 0x%x", param[0]);
return;
}
}
break;
#endif
#ifdef CR_ARB_shadow
if (g->extensions.ARB_shadow) {
param[0] == GL_COMPARE_R_TO_TEXTURE_ARB) {
}
else
{
"TexParameterfv: GL_TEXTURE_COMPARE_MODE_ARB called with invalid parameter: 0x%x", param[0]);
return;
}
}
break;
if (g->extensions.ARB_shadow) {
}
}
#ifdef CR_EXT_shadow_funcs
else if (g->extensions.EXT_shadow_funcs) {
param[0] == GL_GREATER ||
}
}
#endif
else {
"TexParameterfv: GL_TEXTURE_COMPARE_FUNC_ARB called with invalid parameter: 0x%x", param[0]);
return;
}
break;
#endif
#ifdef CR_ARB_shadow_ambient
if (g->extensions.ARB_shadow_ambient) {
}
break;
#endif
#ifdef CR_SGIS_generate_mipmap
case GL_GENERATE_MIPMAP_SGIS:
if (g->extensions.SGIS_generate_mipmap) {
}
break;
#endif
default:
"TexParamterfv: Invalid pname: %d", pname);
return;
}
for (i = 0; i < g->limits.maxTextureUnits; i++)
{
}
}
void STATE_APIENTRY
{
switch (pname)
{
case GL_TEXTURE_MIN_FILTER:
case GL_TEXTURE_MAG_FILTER:
case GL_TEXTURE_WRAP_S:
case GL_TEXTURE_WRAP_T:
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_WRAP_R:
case GL_TEXTURE_PRIORITY:
case GL_TEXTURE_MIN_LOD:
case GL_TEXTURE_MAX_LOD:
case GL_TEXTURE_BASE_LEVEL:
case GL_TEXTURE_MAX_LEVEL:
#endif
#endif
#ifdef CR_ARB_depth_texture
#endif
#ifdef CR_ARB_shadow
#endif
#ifdef CR_ARB_shadow_ambinet
#endif
#ifdef CR_SGIS_generate_mipmap
case GL_GENERATE_MIPMAP_SGIS:
#endif
break;
case GL_TEXTURE_BORDER_COLOR:
break;
default:
"TexParamteriv: Invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
}
void STATE_APIENTRY
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
GLenum e;
GLcolorf c;
(void) stage;
FLUSH();
if (g->current.inBeginEnd)
{
return;
}
if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {
}
else {
}
return;
}
else
#endif
if (target == GL_POINT_SPRITE_ARB) {
}
else {
}
return;
}
else
#endif
if (target != GL_TEXTURE_ENV)
{
"glTexEnvfv: target != GL_TEXTURE_ENV: %d", target);
return;
}
switch (pname)
{
case GL_TEXTURE_ENV_MODE:
if (e != GL_MODULATE &&
e != GL_DECAL &&
e != GL_BLEND &&
e != GL_ADD &&
e != GL_REPLACE &&
e != GL_COMBINE_ARB)
{
"glTexEnvfv: invalid param: %f", *param);
return;
}
break;
case GL_TEXTURE_ENV_COLOR:
c.r = param[0];
c.g = param[1];
c.b = param[2];
c.a = param[3];
if (c.r > 1.0f) c.r = 1.0f;
if (c.g > 1.0f) c.g = 1.0f;
if (c.b > 1.0f) c.b = 1.0f;
if (c.a > 1.0f) c.a = 1.0f;
if (c.r < 0.0f) c.r = 0.0f;
if (c.g < 0.0f) c.g = 0.0f;
if (c.b < 0.0f) c.b = 0.0f;
if (c.a < 0.0f) c.a = 0.0f;
break;
#ifdef CR_ARB_texture_env_combine
case GL_COMBINE_RGB_ARB:
if (g->extensions.ARB_texture_env_combine &&
(e == GL_REPLACE ||
e == GL_MODULATE ||
e == GL_ADD ||
e == GL_ADD_SIGNED_ARB ||
e == GL_INTERPOLATE_ARB ||
e == GL_SUBTRACT_ARB)) {
}
#ifdef CR_ARB_texture_env_dot3
else if (g->extensions.ARB_texture_env_dot3 &&
(e == GL_DOT3_RGB_ARB ||
e == GL_DOT3_RGBA_ARB ||
e == GL_DOT3_RGB_EXT ||
e == GL_DOT3_RGBA_EXT)) {
}
#endif
else {
return;
}
break;
case GL_COMBINE_ALPHA_EXT:
if (g->extensions.ARB_texture_env_combine &&
(e == GL_REPLACE ||
e == GL_MODULATE ||
e == GL_ADD ||
e == GL_ADD_SIGNED_ARB ||
e == GL_INTERPOLATE_ARB ||
e == GL_SUBTRACT_ARB)) {
}
else {
return;
}
break;
case GL_SOURCE0_RGB_ARB:
case GL_SOURCE1_RGB_ARB:
case GL_SOURCE2_RGB_ARB:
if (g->extensions.ARB_texture_env_combine &&
(e == GL_TEXTURE ||
e == GL_CONSTANT_ARB ||
e == GL_PRIMARY_COLOR_ARB ||
e == GL_PREVIOUS_ARB)) {
}
else if (g->extensions.ARB_texture_env_crossbar &&
e >= GL_TEXTURE0_ARB &&
}
else {
return;
}
break;
case GL_SOURCE0_ALPHA_ARB:
case GL_SOURCE1_ALPHA_ARB:
case GL_SOURCE2_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine &&
(e == GL_TEXTURE ||
e == GL_CONSTANT_ARB ||
e == GL_PRIMARY_COLOR_ARB ||
e == GL_PREVIOUS_ARB)) {
}
else if (g->extensions.ARB_texture_env_crossbar &&
e >= GL_TEXTURE0_ARB &&
}
else {
return;
}
break;
case GL_OPERAND0_RGB_ARB:
case GL_OPERAND1_RGB_ARB:
case GL_OPERAND2_RGB_ARB:
if (g->extensions.ARB_texture_env_combine &&
(e == GL_SRC_COLOR ||
e == GL_ONE_MINUS_SRC_COLOR ||
e == GL_SRC_ALPHA ||
e == GL_ONE_MINUS_SRC_ALPHA)) {
}
else {
return;
}
break;
case GL_OPERAND0_ALPHA_ARB:
case GL_OPERAND1_ALPHA_ARB:
case GL_OPERAND2_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine &&
(e == GL_SRC_ALPHA ||
e == GL_ONE_MINUS_SRC_ALPHA)) {
}
else {
return;
}
break;
case GL_RGB_SCALE_ARB:
if (g->extensions.ARB_texture_env_combine &&
(*param == 1.0 ||
*param == 2.0 ||
*param == 4.0)) {
}
else {
return;
}
break;
case GL_ALPHA_SCALE:
if (g->extensions.ARB_texture_env_combine &&
(*param == 1.0 ||
*param == 2.0 ||
*param == 4.0)) {
}
else {
return;
}
break;
#endif /* CR_ARB_texture_env_combine */
default:
"glTexEnvfv: invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
switch (pname) {
case GL_TEXTURE_ENV_MODE:
break;
case GL_TEXTURE_ENV_COLOR:
break;
#ifdef CR_ARB_texture_env_combine
case GL_COMBINE_RGB_ARB:
case GL_COMBINE_ALPHA_EXT:
case GL_SOURCE0_RGB_ARB:
case GL_SOURCE1_RGB_ARB:
case GL_SOURCE2_RGB_ARB:
case GL_SOURCE0_ALPHA_ARB:
case GL_SOURCE1_ALPHA_ARB:
case GL_SOURCE2_ALPHA_ARB:
case GL_OPERAND0_RGB_ARB:
case GL_OPERAND1_RGB_ARB:
case GL_OPERAND2_RGB_ARB:
case GL_OPERAND0_ALPHA_ARB:
case GL_OPERAND1_ALPHA_ARB:
case GL_OPERAND2_ALPHA_ARB:
case GL_RGB_SCALE_ARB:
case GL_ALPHA_SCALE:
break;
#endif
#ifdef CR_EXT_texture_lod_bias
case GL_TEXTURE_LOD_BIAS_EXT:
break;
#endif
#ifdef CR_ARB_point_sprite
case GL_COORD_REPLACE_ARB:
break;
#endif
default:
"glTexEnvfv: invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
}
void STATE_APIENTRY
{
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {
}
else {
}
return;
}
else
#endif
if (target == GL_POINT_SPRITE_ARB) {
}
else {
}
return;
}
else
#endif
if (target != GL_TEXTURE_ENV)
{
"glGetTexEnvfv: target != GL_TEXTURE_ENV: %d", target);
return;
}
switch (pname) {
case GL_TEXTURE_ENV_MODE:
break;
case GL_TEXTURE_ENV_COLOR:
break;
case GL_COMBINE_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_COMBINE_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE0_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE1_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE2_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE0_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE1_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE2_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND0_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND1_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND2_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND0_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND1_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND2_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_RGB_SCALE_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_ALPHA_SCALE:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
default:
"glGetTexEnvfv: invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {
}
else {
}
return;
}
else
#endif
if (target == GL_POINT_SPRITE_ARB) {
}
else {
}
return;
}
else
#endif
if (target != GL_TEXTURE_ENV)
{
"glGetTexEnviv: target != GL_TEXTURE_ENV: %d", target);
return;
}
switch (pname) {
case GL_TEXTURE_ENV_MODE:
break;
case GL_TEXTURE_ENV_COLOR:
break;
case GL_COMBINE_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_COMBINE_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE0_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE1_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE2_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE0_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE1_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_SOURCE2_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND0_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND1_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND2_RGB_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND0_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND1_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_OPERAND2_ALPHA_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_RGB_SCALE_ARB:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
case GL_ALPHA_SCALE:
if (g->extensions.ARB_texture_env_combine) {
}
else {
return;
}
break;
default:
"glGetTexEnviv: invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
GLvectorf v;
GLenum e;
FLUSH();
if (g->current.inBeginEnd)
{
return;
}
switch (coord)
{
case GL_S:
switch (pname)
{
case GL_TEXTURE_GEN_MODE:
if (e == GL_OBJECT_LINEAR ||
e == GL_EYE_LINEAR ||
e == GL_SPHERE_MAP
#if defined(GL_ARB_texture_cube_map) || defined(GL_EXT_texture_cube_map) || defined(GL_NV_texgen_reflection)
|| ((e == GL_REFLECTION_MAP_ARB || e == GL_NORMAL_MAP_ARB)
&& g->extensions.ARB_texture_cube_map)
#endif
) {
}
else {
"glTexGendv called with bad param: %lf", *param);
return;
}
break;
case GL_OBJECT_PLANE:
break;
case GL_EYE_PLANE:
break;
default:
"glTexGendv called with bogus pname: %d", pname);
return;
}
break;
case GL_T:
switch (pname) {
case GL_TEXTURE_GEN_MODE:
if (e == GL_OBJECT_LINEAR ||
e == GL_EYE_LINEAR ||
e == GL_SPHERE_MAP
#if defined(GL_ARB_texture_cube_map) || defined(GL_EXT_texture_cube_map) || defined(GL_NV_texgen_reflection)
|| ((e == GL_REFLECTION_MAP_ARB || e == GL_NORMAL_MAP_ARB)
&& g->extensions.ARB_texture_cube_map)
#endif
) {
}
else {
"glTexGendv called with bad param: %lf", *param);
return;
}
break;
case GL_OBJECT_PLANE:
break;
case GL_EYE_PLANE:
break;
default:
"glTexGen called with bogus pname: %d", pname);
return;
}
break;
case GL_R:
switch (pname) {
case GL_TEXTURE_GEN_MODE:
if (e == GL_OBJECT_LINEAR ||
e == GL_EYE_LINEAR ||
e == GL_SPHERE_MAP
#if defined(GL_ARB_texture_cube_map) || defined(GL_EXT_texture_cube_map) || defined(GL_NV_texgen_reflection)
|| ((e == GL_REFLECTION_MAP_ARB || e == GL_NORMAL_MAP_ARB)
&& g->extensions.ARB_texture_cube_map)
#endif
) {
}
else {
"glTexGen called with bad param: %lf", *param);
return;
}
break;
case GL_OBJECT_PLANE:
break;
case GL_EYE_PLANE:
break;
default:
"glTexGen called with bogus pname: %d", pname);
return;
}
break;
case GL_Q:
switch (pname) {
case GL_TEXTURE_GEN_MODE:
if (e == GL_OBJECT_LINEAR ||
e == GL_EYE_LINEAR ||
e == GL_SPHERE_MAP)
{
}
else {
"glTexGen called with bad param: %lf", *param);
return;
}
break;
case GL_OBJECT_PLANE:
break;
case GL_EYE_PLANE:
break;
default:
"glTexGen called with bogus pname: %d", pname);
return;
}
break;
default:
"glTexGen called with bogus coord: %d", coord);
return;
}
}
void STATE_APIENTRY
{
switch (pname)
{
case GL_TEXTURE_GEN_MODE:
break;
case GL_OBJECT_PLANE:
case GL_EYE_PLANE:
break;
default:
"glTexGen called with bogus pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
switch (pname)
{
case GL_TEXTURE_GEN_MODE:
break;
case GL_OBJECT_PLANE:
case GL_EYE_PLANE:
break;
default:
"glTexGen called with bogus pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
}
void STATE_APIENTRY
{
}
void STATE_APIENTRY
{
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
switch (pname) {
case GL_TEXTURE_GEN_MODE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGen called with bogus coord: %d", coord);
return;
}
break;
case GL_OBJECT_PLANE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGen called with bogus coord: %d", coord);
return;
}
break;
case GL_EYE_PLANE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGen called with bogus coord: %d", coord);
return;
}
break;
default:
"glGetTexGen called with bogus pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
switch (pname) {
case GL_TEXTURE_GEN_MODE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGenfv called with bogus coord: %d", coord);
return;
}
break;
case GL_OBJECT_PLANE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGenfv called with bogus coord: %d", coord);
return;
}
break;
case GL_EYE_PLANE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGenfv called with bogus coord: %d", coord);
return;
}
break;
default:
"glGetTexGenfv called with bogus pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
switch (pname) {
case GL_TEXTURE_GEN_MODE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGeniv called with bogus coord: %d", coord);
return;
}
break;
case GL_OBJECT_PLANE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGeniv called with bogus coord: %d", coord);
return;
}
break;
case GL_EYE_PLANE:
switch (coord) {
case GL_S:
break;
case GL_T:
break;
case GL_R:
break;
case GL_Q:
break;
default:
"glGetTexGeniv called with bogus coord: %d", coord);
return;
}
break;
default:
"glGetTexGen called with bogus pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
{
"glGetTexLevelParameterfv: Invalid level: %d", level);
return;
}
if (!timg)
{
"GetTexLevelParameterfv: invalid target: 0x%x or level %d",
return;
}
switch (pname)
{
case GL_TEXTURE_WIDTH:
break;
case GL_TEXTURE_HEIGHT:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_DEPTH:
break;
#endif
break;
case GL_TEXTURE_BORDER:
break;
case GL_TEXTURE_RED_SIZE:
break;
case GL_TEXTURE_GREEN_SIZE:
break;
case GL_TEXTURE_BLUE_SIZE:
break;
case GL_TEXTURE_ALPHA_SIZE:
break;
break;
break;
break;
break;
#endif
default:
"GetTexLevelParameterfv: invalid pname: 0x%x",
pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
CRTextureState *t = &(g->texture);
if (g->current.inBeginEnd)
{
return;
}
{
"glGetTexLevelParameteriv: Invalid level: %d", level);
return;
}
if (!timg)
{
"GetTexLevelParameteriv: invalid target: 0x%x",
target);
return;
}
switch (pname)
{
case GL_TEXTURE_WIDTH:
break;
case GL_TEXTURE_HEIGHT:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_DEPTH:
break;
#endif
break;
case GL_TEXTURE_BORDER:
break;
case GL_TEXTURE_RED_SIZE:
break;
case GL_TEXTURE_GREEN_SIZE:
break;
case GL_TEXTURE_BLUE_SIZE:
break;
case GL_TEXTURE_ALPHA_SIZE:
break;
break;
break;
#if 0
/* XXX TODO */
case GL_TEXTURE_DEPTH_SIZE:
break;
#endif
break;
break;
#endif
default:
"GetTexLevelParameteriv: invalid pname: 0x%x",
pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
if (g->current.inBeginEnd)
{
return;
}
if (!tobj)
{
"glGetTexParameterfv: invalid target: 0x%x", target);
return;
}
switch (pname)
{
case GL_TEXTURE_MAG_FILTER:
break;
case GL_TEXTURE_MIN_FILTER:
break;
case GL_TEXTURE_WRAP_S:
break;
case GL_TEXTURE_WRAP_T:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_WRAP_R:
break;
case GL_TEXTURE_PRIORITY:
break;
#endif
case GL_TEXTURE_BORDER_COLOR:
break;
if (g->extensions.EXT_texture_filter_anisotropic) {
}
else {
"glGetTexParameterfv: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_ARB_depth_texture
if (g->extensions.ARB_depth_texture) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_ARB_shadow
if (g->extensions.ARB_shadow) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
if (g->extensions.ARB_shadow) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_ARB_shadow_ambient
if (g->extensions.ARB_shadow_ambient) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_SGIS_generate_mipmap
case GL_GENERATE_MIPMAP_SGIS:
if (g->extensions.SGIS_generate_mipmap) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_MIN_LOD:
break;
case GL_TEXTURE_MAX_LOD:
break;
case GL_TEXTURE_BASE_LEVEL:
break;
case GL_TEXTURE_MAX_LEVEL:
break;
#endif
#if 0
case GL_TEXTURE_LOD_BIAS_EXT:
/* XXX todo */
break;
#endif
case GL_TEXTURE_RESIDENT:
/* XXX todo */
crWarning("glGetTexParameterfv GL_TEXTURE_RESIDENT is unimplemented");
break;
default:
"glGetTexParameterfv: invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
{
CRContext *g = GetCurrentContext();
if (g->current.inBeginEnd)
{
return;
}
if (!tobj)
{
"glGetTexParameteriv: invalid target: 0x%x", target);
return;
}
switch (pname)
{
case GL_TEXTURE_MAG_FILTER:
break;
case GL_TEXTURE_MIN_FILTER:
break;
case GL_TEXTURE_WRAP_S:
break;
case GL_TEXTURE_WRAP_T:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_WRAP_R:
break;
case GL_TEXTURE_PRIORITY:
break;
#endif
case GL_TEXTURE_BORDER_COLOR:
break;
#ifdef CR_OPENGL_VERSION_1_2
case GL_TEXTURE_MIN_LOD:
break;
case GL_TEXTURE_MAX_LOD:
break;
case GL_TEXTURE_BASE_LEVEL:
break;
case GL_TEXTURE_MAX_LEVEL:
break;
#endif
if (g->extensions.EXT_texture_filter_anisotropic) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_ARB_depth_texture
if (g->extensions.ARB_depth_texture) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_ARB_shadow
if (g->extensions.ARB_shadow) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
if (g->extensions.ARB_shadow) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_ARB_shadow_ambient
if (g->extensions.ARB_shadow_ambient) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
#ifdef CR_SGIS_generate_mipmap
case GL_GENERATE_MIPMAP_SGIS:
if (g->extensions.SGIS_generate_mipmap) {
}
else {
"glGetTexParameter: invalid pname: 0x%x", pname);
return;
}
break;
#endif
case GL_TEXTURE_RESIDENT:
/* XXX todo */
crWarning("glGetTexParameteriv GL_TEXTURE_RESIDENT is unimplemented");
break;
default:
"glGetTexParameter: invalid pname: %d", pname);
return;
}
}
void STATE_APIENTRY
const GLclampf *priorities)
{
UNUSED(n);
/* TODO: */
return;
}
{
UNUSED(n);
/* TODO: */
return GL_TRUE;
}
{
CRContext *g = GetCurrentContext();
}