summaryrefslogtreecommitdiff
path: root/src/VBox/GuestHost/OpenGL/include/state/cr_transform.h
blob: 66e4709e8791ce2df8f0eb85da7fecdfcbb071e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/* Copyright (c) 2001, Stanford University
 * All rights reserved.
 *
 * See the file LICENSE.txt for information on redistributing this software.
 */

#ifndef GLTRANS_H
#define GLTRANS_H

#include "state/cr_statetypes.h"

#include <iprt/cdefs.h>

#ifdef __cplusplus
extern "C" {
#endif

#define NUM_MATRICES 4

typedef struct {
	CRbitvalue dirty[CR_MAX_BITARRAY];
	CRbitvalue *currentMatrix; /* points to one of the following */
	CRbitvalue matrixMode[CR_MAX_BITARRAY];
	CRbitvalue modelviewMatrix[CR_MAX_BITARRAY];
	CRbitvalue projectionMatrix[CR_MAX_BITARRAY];
	CRbitvalue colorMatrix[CR_MAX_BITARRAY];
	CRbitvalue textureMatrix[CR_MAX_BITARRAY];
	CRbitvalue programMatrix[CR_MAX_BITARRAY];
	CRbitvalue clipPlane[CR_MAX_BITARRAY];
	CRbitvalue enable[CR_MAX_BITARRAY];
	CRbitvalue base[CR_MAX_BITARRAY];
} CRTransformBits;

typedef struct {
   CRmatrix *top;      /* points into stack */
   CRmatrix *stack;    /* array [maxDepth] of CRmatrix */
   GLuint depth;       /* 0 <= depth < maxDepth */
   GLuint maxDepth;    /* size of stack[] array */
} CRMatrixStack;

typedef struct {
	GLvectord  *clipPlane;
	GLboolean  *clip;

	GLenum matrixMode;

	/* matrix stacks */
	CRMatrixStack modelViewStack;
	CRMatrixStack projectionStack;
	CRMatrixStack colorStack;
	CRMatrixStack textureStack[CR_MAX_TEXTURE_UNITS];
	CRMatrixStack programStack[CR_MAX_PROGRAM_MATRICES];
	CRMatrixStack *currentStack;

	GLboolean modelViewProjectionValid;
	CRmatrix  modelViewProjection;  /* product of modelview and projection */

#ifdef CR_OPENGL_VERSION_1_2
	GLboolean rescaleNormals;
#endif
#ifdef CR_IBM_rasterpos_clip
	GLboolean rasterPositionUnclipped;
#endif
	GLboolean normalize;
} CRTransformState;


DECLEXPORT(void) crStateTransformInit(CRContext *ctx);
DECLEXPORT(void) crStateTransformDestroy(CRContext *ctx);

DECLEXPORT(void) crStateInitMatrixStack(CRMatrixStack *stack, int maxDepth);

DECLEXPORT(void) crStateLoadMatrix(const CRmatrix *m);

DECLEXPORT(void) crStateTransformUpdateTransform(CRTransformState *t);
DECLEXPORT(void) crStateTransformXformPoint(CRTransformState *t, GLvectorf *p);

DECLEXPORT(void) crStateTransformXformPointMatrixf(const CRmatrix *m, GLvectorf *p);
DECLEXPORT(void) crStateTransformXformPointMatrixd(const CRmatrix *m, GLvectord *p);

DECLEXPORT(void) crStateTransformDiff(CRTransformBits *t, CRbitvalue *bitID,
                                      CRContext *fromCtx, CRContext *toCtx);

DECLEXPORT(void) crStateTransformSwitch(CRTransformBits *bb, CRbitvalue *bitID, 
                                        CRContext *fromCtx, CRContext *toCtx);

#ifdef __cplusplus
}
#endif

#endif /* CR_STATE_TRANSFORM_H */