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 fw_glMatrixMode(GLint mode);
163void fw_glLoadIdentity(void);
164void fw_glPushMatrix(void);
165void fw_glPopMatrix(void);
166void fw_glTranslated(GLDOUBLE a, GLDOUBLE b, GLDOUBLE c);
167void fw_glTransformd(GLDOUBLE *mat);
168void fw_glMultMatrixd(GLDOUBLE *mat);
169void fw_glTranslatef(float a, float b, float c);
170void fw_glRotateRad (GLDOUBLE a, GLDOUBLE b, GLDOUBLE c, GLDOUBLE d);
171void fw_glRotated (GLDOUBLE a, GLDOUBLE b, GLDOUBLE c, GLDOUBLE d);
172void fw_glRotatef (float a, float b, float c, float d);
173void fw_glScaled (GLDOUBLE a, GLDOUBLE b, GLDOUBLE c);
174void fw_glScalef (float a, float b, float c);
175void fw_glGetDoublev (int ty, GLDOUBLE *mat);
176void fw_glSetDoublev (int ty, GLDOUBLE *mat);
177void fw_glGetInteger( int ty, int *params);
178
179/* OpenGL-ES specifics for Materials and Vertices */
180void fw_iphone_enableClientState(GLenum aaa);
181void fw_iphone_disableClientState(GLenum aaa);
182void fw_iphone_vertexPointer(GLint aaa,GLenum bbb,GLsizei ccc,const GLvoid *ddd);
183void fw_iphone_normalPointer(GLenum aaa,GLsizei bbb, const GLvoid *ccc);
184void fw_iphone_texcoordPointer(GLint aaa, GLenum bbb ,GLsizei ccc,const GLvoid *ddd);
185void fw_iphone_colorPointer(GLint aaa, GLenum bbb,GLsizei ccc,const GLvoid *ddd);
186void fw_gluPerspective(GLDOUBLE fovy, GLDOUBLE aspect, GLDOUBLE zNear, GLDOUBLE zFar);
187void fw_gluPickMatrix(GLDOUBLE xx, GLDOUBLE yy, GLDOUBLE width, GLDOUBLE height, GLint *vp);
188void fw_Frustum(GLDOUBLE left, GLDOUBLE right, GLDOUBLE bottom, GLDOUBLE top, GLDOUBLE nearZ, GLDOUBLE farZ);
189void fw_Ortho(GLDOUBLE left, GLDOUBLE right, GLDOUBLE bottom, GLDOUBLE top, GLDOUBLE nearZ, GLDOUBLE farZ);
190void fw_gluProject( GLDOUBLE objX,
191 GLDOUBLE objY,
192 GLDOUBLE objZ,
193 const GLDOUBLE *model,
194 const GLDOUBLE *proj,
195 const GLint *view,
196 GLDOUBLE* winX,
197 GLDOUBLE* winY,
198 GLDOUBLE* winZ );
199void fw_gluUnProject( GLDOUBLE winX,
200 GLDOUBLE winY,
201 GLDOUBLE winZ,
202 const GLDOUBLE *model,
203 const GLDOUBLE *proj,
204 const GLint *view,
205 GLDOUBLE* objX,
206 GLDOUBLE* objY,
207 GLDOUBLE* objZ );
208
209void fw_gluPickMatrix(GLDOUBLE x, GLDOUBLE y, GLDOUBLE deltax, GLDOUBLE deltay,
210 GLint viewport[4]);
211
212void printMaxStackUsed();
213GLDOUBLE *getPickrayMatrix(int index);
214void setPickrayMatrix(int index, GLDOUBLE *mat);
215void freeMallocedNodeFields(struct X3D_Node* node);
216void unRegisterX3DNode(struct X3D_Node * tmp);
217
218//khyoo
219
220void fw_gluPerspectiveTexture(GLDOUBLE fovy, GLDOUBLE aspect, GLDOUBLE zNear, GLDOUBLE zFar);
221void fw_gluPerspectiveTextureLookAt(GLDOUBLE ex, GLDOUBLE ey, GLDOUBLE ez,
222 GLDOUBLE cx, GLDOUBLE cy, GLDOUBLE cz,
223 GLDOUBLE ux,GLDOUBLE uy,GLDOUBLE uz);
224
225#endif /* __FREEWRL_OPENGL_UTILS_H__ */