e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_STATE_EVALUATORS
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_STATE_EVALUATORS
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <iprt/cdefs.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define GLEVAL_TOT 9
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define MAX_EVAL_ORDER 30
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue eval1D[GLEVAL_TOT][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue eval2D[GLEVAL_TOT][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enable[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enable1D[GLEVAL_TOT][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enable2D[GLEVAL_TOT][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue grid1D[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue grid2D[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue dirty[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef CR_NV_vertex_program
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enableAttrib1D[CR_MAX_VERTEX_ATTRIBS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enableAttrib2D[CR_MAX_VERTEX_ATTRIBS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CREvaluatorBits;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat u1, u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat du;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint order;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *coeff;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CREvaluator1D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat u1, u2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat v1, v2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat du, dv;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint uorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vorder;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat *coeff;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CREvaluator2D;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean enable1D[GLEVAL_TOT];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean enable2D[GLEVAL_TOT];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef CR_NV_vertex_program
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean enableAttrib1D[CR_MAX_VERTEX_ATTRIBS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean enableAttrib2D[CR_MAX_VERTEX_ATTRIBS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean autoNormal;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluator1D eval1D[GLEVAL_TOT];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluator2D eval2D[GLEVAL_TOT];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef CR_NV_vertex_program
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluator1D attribEval1D[CR_MAX_VERTEX_ATTRIBS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CREvaluator2D attribEval2D[CR_MAX_VERTEX_ATTRIBS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint un1D; /* GL_MAP1_GRID_SEGMENTS */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat u11D, u21D; /* GL_MAP1_GRID_DOMAIN */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint un2D; /* GL_MAP2_GRID_SEGMENTS (u) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint vn2D; /* GL_MAP2_GRID_SEGMENTS (v) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat u12D, u22D; /* GL_MAP2_GRID_DOMAIN (u) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLfloat v12D, v22D; /* GL_MAP2_GRID_DOMAIN (v) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CREvaluatorState;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern const int gleval_sizes[];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateEvaluatorInit (CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateEvaluatorDestroy (CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateEvaluatorDiff(CREvaluatorBits *e, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateEvaluatorSwitch(CREvaluatorBits *e, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_STATE_EVALUATORS */