FreeWRL / FreeX3D 4.3.0
OpenGL_Utils.h
1/*
2
3
4Screen snapshot.
5
6*/
7
8/****************************************************************************
9 This file is part of the FreeWRL/FreeX3D Distribution.
10
11 Copyright 2009 CRC Canada. (http://www.crc.gc.ca)
12
13 FreeWRL/FreeX3D is free software: you can redistribute it and/or modify
14 it under the terms of the GNU Lesser Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 FreeWRL/FreeX3D is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with FreeWRL/FreeX3D. If not, see <http://www.gnu.org/licenses/>.
25****************************************************************************/
26
27
28#ifndef __FREEWRL_OPENGL_UTILS_H__
29#define __FREEWRL_OPENGL_UTILS_H__
30
31// number of Shader nodes available per invocation
32#define MAX_USER_DEFINED_SHADERS 40 //Sept 2016, changed from 4 to 40. In theory could do 2^32 - we have an int32 now just for user shaders
33
34int getNextFreeUserDefinedShaderSlot();
35void kill_userDefinedShaders();
36void sendShaderTextToEngine(int ste, int partsN, char ** vertSource, char ** fragSource);
37
38typedef enum vertexShaderResources {
39 vertexGLSLVersion,
40
41 vertexPrecisionDeclare,
42 vertMaxLightsDeclare,
43
44 vertexLightDefines,
45 vertexTCGTDefines,
46
47 vertexNormalDeclare,
48 vertexPositionDeclare,
49 vertexSimpleColourDeclare,
50 vertexTextureMatrixDeclare,
51 vertexOneMaterialDeclare,
52 vertexBackMaterialDeclare,
53 vertFrontColourDeclare,
54 vertexTexCoordInputDeclare,
55 vertexTexCoordOutputDeclare,
56 vertexHatchPositionDeclare,
57 vertexPointSizeDeclare,
58
59 vertexNormPosOutput,
60
61 vertexLightingEquation,
62
63
64
65 vertexProjValDec,
66 vertexProjCalTexCoord,
67 vertexMultiProjValDec,
68 vertexMultiProjCalTexCoord,
69
70 vertexMainStart,
71
72 vertexPointSizeAssign,
73 vertexPositionCalculation,
74
75 vertexOneMaterialCalculation,
76 vertexNormPosCalculation,
77 vertexSingleTextureCalculation,
78 vertexADSLCalculation,
79 vertexSimpleColourCalculation,
80 vertexHatchPositionCalculation,
81
82 vertexUserDefinedInput,
83
84 vertexProjTexCalculation,
85 vertexMultiProjTexCalculation,
86
87 vertexMainEnd,
88 vertexEndMarker
89} vertexShaderResources_t;
90
91typedef enum fragmenShaderResources {
92 fragmentGLSLVersion,
93 fragmentPrecisionDeclare,
94 fragMaxLightsDeclare,
95
96 fragmentMultiTexDefines,
97 fragmentLightDefines,
98 fragmentFillPropDefines,
99
100 fragmentNormalColorDefs,
101
102 fragmentTexCoordDeclare,
103 fragmentTex0Declare,
104 fragmentMultiTexDeclare,
105 fragmentSimpleColourDeclare,
106 fragmentOneColourDeclare,
107 fragmentBackColourDeclare,
108 fragmentNormPosDeclare,
109 fragmentHatchPositionDeclare,
110 fragmentADSLLightModel,
111 fragmentMultiTexModel,
112 fragmentFillPropModel,
113
114
115
116 fragmentProjValDec,
117 fragmentProjCalTexCoord,
118 fragmentMultiProjValDec,
119 fragmentMultiProjCalTexCoord,
120
121
122 fragmentMainStart,
123
124 fragmentUserDefinedInput,
125
126 fragmentSimpleColourAssign,
127 fragmentOneColourAssign,
128 fragmentADSLAssign,
129 fragmentTextureAssign,
130 fragmentFillPropAssign,
131
132 fragmentProjTexAssign,
133
134 fragmentMainEnd,
135 fragmentEndMarker
136} fragmentShaderResources_t;
137
138
139#ifdef OLDCODE
140OLDCODE /* Ian moved this from iglobal.h so that OpenGL_Utils.c could use it
141OLDCODE * since OpenGL_Utils.c cannot #include <iglobal.h> due to recursion */
142OLDCODE struct multiTexParams {
143OLDCODE int multitex_mode[2];
144OLDCODE int multitex_source[2];
145OLDCODE int multitex_function;
146OLDCODE };
147#endif //OLDCODE
148
149
150void do_textureTransform (struct X3D_Node *textureNode, int ttnum);
151void markForDispose(struct X3D_Node *node, int recursive);
152
153//s_shader_capabilities_t *getMyShaders(shaderflagsstruct ); //moved to component_shape.h where shaderflagsstruct defined
154s_shader_capabilities_t *getMyShader(unsigned int);
155
156void sendMatriciesToShader(s_shader_capabilities_t *me);
157void sendMaterialsToShader(s_shader_capabilities_t *me);
158
159void
160BackEndClearBuffer(int);
161
162void
163BackEndLightsOff(void);
164
165#ifdef DEBUGGING_CODE
166void drawBBOX(struct X3D_Node *node);
167#endif //DEBUGGING_CODE
168
169
170void fw_glMatrixMode(GLint mode);
171void fw_glLoadIdentity(void);
172void fw_glPushMatrix(void);
173void fw_glPopMatrix(void);
174void fw_glTranslated(GLDOUBLE a, GLDOUBLE b, GLDOUBLE c);
175void fw_glTransformd(GLDOUBLE *mat);
176void fw_glMultMatrixd(GLDOUBLE *mat);
177void fw_glTranslatef(float a, float b, float c);
178void fw_glRotateRad (GLDOUBLE a, GLDOUBLE b, GLDOUBLE c, GLDOUBLE d);
179void fw_glRotated (GLDOUBLE a, GLDOUBLE b, GLDOUBLE c, GLDOUBLE d);
180void fw_glRotatef (float a, float b, float c, float d);
181void fw_glScaled (GLDOUBLE a, GLDOUBLE b, GLDOUBLE c);
182void fw_glScalef (float a, float b, float c);
183void fw_glGetDoublev (int ty, GLDOUBLE *mat);
184void fw_glSetDoublev (int ty, GLDOUBLE *mat);
185
186/* OpenGL-ES specifics for Materials and Vertices */
187void fw_iphone_enableClientState(GLenum aaa);
188void fw_iphone_disableClientState(GLenum aaa);
189void fw_iphone_vertexPointer(GLint aaa,GLenum bbb,GLsizei ccc,const GLvoid *ddd);
190void fw_iphone_normalPointer(GLenum aaa,GLsizei bbb, const GLvoid *ccc);
191void fw_iphone_texcoordPointer(GLint aaa, GLenum bbb ,GLsizei ccc,const GLvoid *ddd);
192void fw_iphone_colorPointer(GLint aaa, GLenum bbb,GLsizei ccc,const GLvoid *ddd);
193void fw_gluPerspective(GLDOUBLE fovy, GLDOUBLE aspect, GLDOUBLE zNear, GLDOUBLE zFar);
194void fw_gluPickMatrix(GLDOUBLE xx, GLDOUBLE yy, GLDOUBLE width, GLDOUBLE height, GLint *vp);
195void fw_Frustum(GLDOUBLE left, GLDOUBLE right, GLDOUBLE bottom, GLDOUBLE top, GLDOUBLE nearZ, GLDOUBLE farZ);
196void fw_Ortho(GLDOUBLE left, GLDOUBLE right, GLDOUBLE bottom, GLDOUBLE top, GLDOUBLE nearZ, GLDOUBLE farZ);
197void fw_gluProject( GLDOUBLE objX,
198 GLDOUBLE objY,
199 GLDOUBLE objZ,
200 const GLDOUBLE *model,
201 const GLDOUBLE *proj,
202 const GLint *view,
203 GLDOUBLE* winX,
204 GLDOUBLE* winY,
205 GLDOUBLE* winZ );
206void fw_gluUnProject( GLDOUBLE winX,
207 GLDOUBLE winY,
208 GLDOUBLE winZ,
209 const GLDOUBLE *model,
210 const GLDOUBLE *proj,
211 const GLint *view,
212 GLDOUBLE* objX,
213 GLDOUBLE* objY,
214 GLDOUBLE* objZ );
215
216void fw_gluPickMatrix(GLDOUBLE x, GLDOUBLE y, GLDOUBLE deltax, GLDOUBLE deltay,
217 GLint viewport[4]);
218
219void printMaxStackUsed();
220GLDOUBLE *getPickrayMatrix(int index);
221void setPickrayMatrix(int index, GLDOUBLE *mat);
222void freeMallocedNodeFields(struct X3D_Node* node);
223void unRegisterX3DNode(struct X3D_Node * tmp);
224
225//khyoo
226
227void fw_gluPerspectiveTexture(GLDOUBLE fovy, GLDOUBLE aspect, GLDOUBLE zNear, GLDOUBLE zFar);
228void fw_gluPerspectiveTextureLookAt(GLDOUBLE ex, GLDOUBLE ey, GLDOUBLE ez,
229 GLDOUBLE cx, GLDOUBLE cy, GLDOUBLE cz,
230 GLDOUBLE ux,GLDOUBLE uy,GLDOUBLE uz);
231
232#endif /* __FREEWRL_OPENGL_UTILS_H__ */