state_lists.c revision 022e56bff837db399121bc76e4f404a6cd959d6e
/* Copyright (c) 2001, Stanford University
* All rights reserved
*
* See the file LICENSE.txt for information on redistributing this software.
*/
#include <stdio.h>
#include "cr_mem.h"
#include "state.h"
#include "state/cr_statetypes.h"
#include "state_internals.h"
{
/* nothing - dlists are in shared state */
}
{
l->mode = 0;
l->currentIndex = 0;
l->base = 0;
}
//#define CRSTATE_DEBUG_QUERY_HW_STATE
#ifndef CRSTATE_DEBUG_QUERY_HW_STATE
#else
}
# define CR_STATE_SETTEX_MSG(state, st, hw) crDebug("crStateQueryHWState fixed %s from %i to %i", state, st, hw)
{ \
crDebug("st: [%f, %f, %f, %f] [%f, %f, %f, %f] [%f, %f, %f, %f] [%f, %f, %f, %f]", \
crDebug("hw: [%f, %f, %f, %f] [%f, %f, %f, %f] [%f, %f, %f, %f] [%f, %f, %f, %f]", \
}
#endif
#define CRSTATE_SET_ENUM(state, cap) {GLenum _e=g->state; diff_api.GetIntegerv(cap, &_e); CRSTATE_SET_CAP(state, _e, "%#x");}
#define CRSTATE_SET_FLOAT(state, cap) {GLfloat _f=g->state; diff_api.GetFloatv(cap, &_f); CRSTATE_SET_CAP(state, _f, "%f");}
#define CRSTATE_SET_INT(state, cap) {GLint _i=g->state; diff_api.GetIntegerv(cap, &_i); CRSTATE_SET_CAP(state, _i, "%i");}
#define CRSTATE_SET_BOOL(state, cap) {GLboolean _b=g->state; diff_api.GetBooleanv(cap, &_b); CRSTATE_SET_CAP(state, _b, "%u");}
{ \
}
{ \
{ \
} \
}
{ \
}
{ \
}
#define CRSTATE_SET_TEXGEN_4F(state, coord, pname) _CRSTATE_SET_4F_XYZW(state, coord, pname, GetTexGenfv)
#define CRSTATE_SET_TEXGEN_I(state, coord, pname) {GLint _i=g->state; diff_api.GetTexGeniv(coord, pname, &_i); CRSTATE_SET_CAP(state, _i, "%i");}
#define CRSTATE_SET_TEXENV_I(state, target, pname) {GLint _i=g->state; diff_api.GetTexEnviv(target, pname, &_i); CRSTATE_SET_CAP(state, _i, "%i");}
#define CRSTATE_SET_TEXENV_F(state, target, pname) {GLfloat _f=g->state; diff_api.GetTexEnvfv(target, pname, &_f); CRSTATE_SET_CAP(state, _f, "%f");}
#define CRSTATE_SET_TEXENV_COLOR(state, target, pname) _CRSTATE_SET_4F_RGBA(state, target, pname, GetTexEnvfv)
#define CRSTATE_SET_MATERIAL_COLOR(state, face, pname) _CRSTATE_SET_4F_RGBA(state, face, pname, GetMaterialfv)
#define CRSTATE_SET_MATERIAL_F(state, face, pname) {GLfloat _f=g->state; diff_api.GetMaterialfv(face, pname, &_f); CRSTATE_SET_CAP(state, _f, "%f");}
#define CRSTATE_SET_LIGHT_COLOR(state, light, pname) _CRSTATE_SET_4F_RGBA(state, light, pname, GetLightfv)
#define CRSTATE_SET_LIGHT_F(state, light, pname) {GLfloat _f=g->state; diff_api.GetLightfv(light, pname, &_f); CRSTATE_SET_CAP(state, _f, "%f");}
#define CRSTATE_SET_LIGHT_4F(state, light, pname) _CRSTATE_SET_4F_XYZW(state, light, pname, GetLightfv)
{ \
}
{ \
}
{ \
crMatrixGetFloats(&f[0], g->state); \
{ \
crMatrixInitFromFloats(g->state, &f[0]); \
} \
}
{
CRContext *g = GetCurrentContext();
{
{
}
{
}
{
}
{
}
{
}
/* seems to always match previous .logicOp
if (CHECKDIRTY(sb->buffer.indexLogicOp, negbitID))
{
CRSTATE_SET_ENUM(buffer.logicOpMode, GL_LOGIC_OP_MODE);
}
*/
{
{
if (!binding)
{
crWarning("HW state synch: GL_DRAW_FRAMEBUFFER_BINDING is NULL");
}
{
}
{
}
else
{
}
}
else
{
}
}
{
{
if (!binding)
{
crWarning("HW state synch: GL_READ_FRAMEBUFFER_BINDING is NULL");
}
{
}
{
}
else
{
}
}
else
{
}
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
#ifdef CR_EXT_blend_color
{
}
#endif
#if defined(CR_EXT_blend_minmax) || defined(CR_EXT_blend_subtract) || defined(CR_EXT_blend_logic_op)
{
}
#endif
#if defined(CR_EXT_blend_func_separate)
{
}
#endif
}
{
{
}
{
}
{
}
} while (0)
} while (0)
/* func */
{
/* this if branch is not needed here actually, just in case ogl drivers misbehave */
if (activeFace == GL_BACK)
{
}
}
{
if (activeFace == GL_BACK)
{
}
}
if ((!frontIsSet || !backIsSet) && CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func, negbitID))
{
if (activeFace == GL_BACK)
{
}
if (!backIsSet)
{
g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func;
g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref;
g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask;
}
}
/* op */
{
/* this if branch is not needed here actually, just in case ogl drivers misbehave */
if (activeFace == GL_BACK)
{
}
}
{
if (activeFace == GL_BACK)
{
}
}
if ((!frontIsSet || !backIsSet) && CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op, negbitID))
{
if (activeFace == GL_BACK)
{
}
if (!backIsSet)
{
g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail;
g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail;
g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass;
}
}
{
}
{
}
}
{
for (i=0; i<g->limits.maxTextureUnits; ++i)
{
{
if (i!=activeUnit)
{
activeUnit=i;
}
#ifdef CR_OPENGL_VERSION_1_2
#endif
#ifdef CR_ARB_texture_cube_map
if (g->extensions.ARB_texture_cube_map)
{
}
#endif
#ifdef CR_NV_texture_rectangle
if (g->extensions.NV_texture_rectangle)
{
}
#endif
}
{
if (i!=activeUnit)
{
activeUnit=i;
}
#ifdef CR_OPENGL_VERSION_1_2
#endif
#ifdef CR_ARB_texture_cube_map
if (g->extensions.ARB_texture_cube_map)
{
CRSTATE_SET_TEXTURE(texture.unit[i].currentTextureCubeMap, GL_TEXTURE_BINDING_CUBE_MAP_ARB, GL_TEXTURE_CUBE_MAP_ARB);
}
#endif
#ifdef CR_NV_texture_rectangle
if (g->extensions.NV_texture_rectangle)
{
CRSTATE_SET_TEXTURE(texture.unit[i].currentTextureRect, GL_TEXTURE_BINDING_RECTANGLE_NV, GL_TEXTURE_RECTANGLE_NV);
}
#endif
}
{
if (i!=activeUnit)
{
activeUnit=i;
}
}
{
if (i!=activeUnit)
{
activeUnit=i;
}
}
{
if (i!=activeUnit)
{
activeUnit=i;
}
}
{
if (i!=activeUnit)
{
activeUnit=i;
}
}
}
{
}
}
{
int i;
{
}
{
}
{
}
{
}
{
}
for (i=0; i<CR_MAX_LIGHTS; ++i)
{
{
{
}
{
}
{
}
{
}
{
}
{
}
{
}
}
}
}
{
{
#ifdef CR_OPENGL_VERSION_1_2
#endif
#ifdef CR_IBM_rasterpos_clip
#endif
}
{
int i;
for (i=0; i<CR_MAX_CLIP_PLANES; i++)
{
}
}
{
}
{
}
{
unsigned int i;
for (i=0; i<g->limits.maxTextureUnits; i++)
{
}
}
{
}
{
}
}
{
{
}
{
}
{
}
{
}
}
{
int i;
{
}
for (i=0; i<GLEVAL_TOT; i++)
{
{
}
{
}
{
if (order>0)
{
if (!coeffs)
{
crWarning("crStateQueryHWState: out of memory, at eval1D[%i]", i);
continue;
}
}
{
}
{
}
}
{
{
if (!coeffs)
{
crWarning("crStateQueryHWState: out of memory, at eval2D[%i]", i);
continue;
}
}
{
}
{
}
{
}
}
}
{
}
{
}
}
{
{
}
{
}
{
}
{
}
{
}
{
}
{
}
#ifdef CR_NV_fog_distance
{
}
#endif
#ifdef CR_EXT_fog_coord
{
}
#endif
}
{
{
}
{
}
{
}
{
}
{
}
#ifdef CR_EXT_clip_volume_hint
{
}
#endif
#ifdef CR_ARB_texture_compression
{
}
#endif
#ifdef CR_SGIS_generate_mipmap
{
}
#endif
}
{
{
}
{
}
{
}
}
{
{
}
{
}
}
{
{
}
{
}
#ifdef CR_ARB_point_parameters
{
}
{
}
{
}
{
}
#endif
#ifdef CR_ARB_point_sprite
{
}
{
for (i=0; i<g->limits.maxTextureUnits; ++i)
{
{
if (activeUnit!=i)
{
activeUnit=i;
}
}
}
{
}
}
#endif
}
{
{
}
{
}
{
}
{
{
#ifdef CRSTATE_DEBUG_QUERY_HW_STATE
{
}
#endif
}
}
}
}
{
CRContext *g = GetCurrentContext();
CRListsState *l = &(g->lists);
if (g->current.inBeginEnd)
{
return;
}
if (list == 0)
{
return;
}
if (l->currentIndex)
{
/* already building a list */
return;
}
{
return;
}
FLUSH();
/* Must log that this key is used */
}
/* Need this???
crStateCurrentRecover();
*/
l->currentIndex = list;
}
void STATE_APIENTRY crStateEndList (void)
{
CRContext *g = GetCurrentContext();
CRListsState *l = &(g->lists);
if (g->current.inBeginEnd)
{
return;
}
if (!l->currentIndex)
{
return;
}
l->currentIndex = 0;
l->mode = 0;
}
{
CRContext *g = GetCurrentContext();
if (g->current.inBeginEnd)
{
return 0;
}
if (range < 0)
{
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "Negative range passed to glGenLists: %d", range);
return 0;
}
return start;
}
{
CRContext *g = GetCurrentContext();
if (g->current.inBeginEnd)
{
return;
}
if (range < 0)
{
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "Negative range passed to glDeleteLists: %d", range);
return;
}
crHashtableDeleteBlock(g->shared->dlistTable, list, range, crFree); /* call crFree to delete list data */
}
{
CRContext *g = GetCurrentContext();
if (g->current.inBeginEnd)
{
return GL_FALSE;
}
if (list == 0)
return GL_FALSE;
}
{
CRContext *g = GetCurrentContext();
CRListsState *l = &(g->lists);
if (g->current.inBeginEnd)
{
return;
}
}
void
{
unsigned int j;
for (j=0;j<CR_MAX_BITARRAY;j++)
{
}
}
}
void
{
unsigned int j;
for (j=0;j<CR_MAX_BITARRAY;j++)
{
}
}
}