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 GLTRANS_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define GLTRANS_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <iprt/cdefs.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define NUM_MATRICES 4
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue dirty[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue *currentMatrix; /* points to one of the following */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue matrixMode[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue modelviewMatrix[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue projectionMatrix[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue colorMatrix[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue textureMatrix[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue programMatrix[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue clipPlane[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enable[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue base[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRTransformBits;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRmatrix *top; /* points into stack */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRmatrix *stack; /* array [maxDepth] of CRmatrix */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLuint depth; /* 0 <= depth < maxDepth */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLuint maxDepth; /* size of stack[] array */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRMatrixStack;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLvectord *clipPlane;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean *clip;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum matrixMode;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* matrix stacks */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMatrixStack modelViewStack;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMatrixStack projectionStack;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMatrixStack colorStack;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMatrixStack textureStack[CR_MAX_TEXTURE_UNITS];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMatrixStack programStack[CR_MAX_PROGRAM_MATRICES];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRMatrixStack *currentStack;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean modelViewProjectionValid;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRmatrix modelViewProjection; /* product of modelview and projection */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef CR_OPENGL_VERSION_1_2
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean rescaleNormals;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef CR_IBM_rasterpos_clip
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean rasterPositionUnclipped;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean normalize;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRTransformState;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformInit(CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformDestroy(CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateInitMatrixStack(CRMatrixStack *stack, int maxDepth);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateLoadMatrix(const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformUpdateTransform(CRTransformState *t);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformXformPoint(CRTransformState *t, GLvectorf *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformXformPointMatrixf(const CRmatrix *m, GLvectorf *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformXformPointMatrixd(const CRmatrix *m, GLvectord *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformDiff(CRTransformBits *t, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTransformSwitch(CRTransformBits *bb, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRContext *fromCtx, CRContext *toCtx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_STATE_TRANSFORM_H */