Guiliani  Version 2.5 revision 6773 (build 33)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OGL_API.h
1 /*
2 * Copyright (C) TES Electronic Solutions GmbH,
3 * All Rights Reserved.
4 * Contact: info@guiliani.de
5 *
6 * This file is part of the Guiliani HMI framework
7 * for the development of graphical user interfaces on embedded systems.
8 */
9 
10 #ifndef __OGL_API_H__
11 #define __OGL_API_H__
12 
13 // OpenGL
14 
15 #if defined(WIN32)
16  #include <windows.h> // needed for gl.h on windows
17  #define GuilianiGLGetProcAddress wglGetProcAddress
18 #elif defined(__linux__)
19  #include <SDL.h>
20  #define GuilianiGLGetProcAddress SDL_GL_GetProcAddress
21 #endif
22 
23 #if defined SYSTEM_NAME_DARWIN
24  #include <OpenGL/gl.h>
25  #include <OpenGL/glext.h>
26 #else
27  #include <GL/gl.h>
28  #include <GL/glext.h>
29 #endif
30 
31 // if version 2.0 of OpenGL is defined, we can use shaders instead of fixed function-pipeline
32 #ifdef GL_VERSION_2_0
33  #define GUILIANI_USE_GL_SHADERS 1
34 #endif
35 
36 #if defined (GUILIANI_USE_OGL)
37 #if !defined SYSTEM_NAME_DARWIN
38 // API mappings
39 // Use extension for VBO and FBO
40 //defines for the VBO extensions
41 #define glDeleteBuffers CGfxWrapGL::glDeleteBuffers_Guiliani
42 #define glBindBuffer CGfxWrapGL::glBindBuffer_Guiliani
43 #define glGenBuffers CGfxWrapGL::glGenBuffers_Guiliani
44 #define glBufferData CGfxWrapGL::glBufferData_Guiliani
45 
46 //defines for the FBO extensions
47 #define glGenFramebuffers CGfxWrapGL::glGenFramebuffers_Guiliani
48 #define glBindFramebuffer CGfxWrapGL::glBindFramebuffer_Guiliani
49 #define glFramebufferTexture2D CGfxWrapGL::glFramebufferTexture2D_Guiliani
50 #define glCheckFramebufferStatus CGfxWrapGL::glCheckFramebufferStatus_Guiliani
51 #define glDeleteFramebuffers CGfxWrapGL::glDeleteFramebuffers_Guiliani
52 
53 #if GUILIANI_USE_GL_SHADERS == 1
54 // defines for shaders
55 #define glBlendEquationSeparate CGfxWrapGL::glBlendEquationSeparate_Guiliani
56 #define glDrawBuffers CGfxWrapGL::glDrawBuffers_Guiliani
57 #define glStencilOpSeperate CGfxWrapGL::glStencilOpSeparate_Guiliani
58 #define glStencilFuncSeperate CGfxWrapGL::glStencilFuncSeparate_Guiliani
59 #define glStencilMaskSeperate CGfxWrapGL::glStencilMaskSeparate_Guiliani
60 #define glAttachShader CGfxWrapGL::glAttachShader_Guiliani
61 #define glBindAttribLocation CGfxWrapGL::glBindAttribLocation_Guiliani
62 #define glCompileShader CGfxWrapGL::glCompileShader_Guiliani
63 #define glCreateProgram CGfxWrapGL::glCreateProgram_Guiliani
64 #define glCreateShader CGfxWrapGL::glCreateShader_Guiliani
65 #define glDeleteProgram CGfxWrapGL::glDeleteProgram_Guiliani
66 #define glDeleteShader CGfxWrapGL::glDeleteShader_Guiliani
67 #define glDetachShader CGfxWrapGL::glDetachShader_Guiliani
68 #define glDisableVertexAttribArray CGfxWrapGL::glDisableVertexAttribArray_Guiliani
69 #define glEnableVertexAttribArray CGfxWrapGL::glEnableVertexAttribArray_Guiliani
70 #define glGetActiveAttrib CGfxWrapGL::glGetActiveAttrib_Guiliani
71 #define glGetActiveUniform CGfxWrapGL::glGetActiveUniform_Guiliani
72 #define glGetAttachedShaders CGfxWrapGL::glGetAttachedShaders_Guiliani
73 #define glGetAttribLocation CGfxWrapGL::glGetAttribLocation_Guiliani
74 #define glGetProgramiv CGfxWrapGL::glGetProgramiv_Guiliani
75 #define glGetProgramInfoLog CGfxWrapGL::glGetProgramInfoLog_Guiliani
76 #define glGetShaderiv CGfxWrapGL::glGetShaderiv_Guiliani
77 #define glGetShaderInfoLog CGfxWrapGL::glGetShaderInfoLog_Guiliani
78 #define glGetShaderSource CGfxWrapGL::glGetShaderSource_Guiliani
79 #define glGetUniformLocation CGfxWrapGL::glGetUniformLocation_Guiliani
80 #define glGetUniformfv CGfxWrapGL::glGetUniformfv_Guiliani
81 #define glGetUniformiv CGfxWrapGL::glGetUniformiv_Guiliani
82 #define glGetVertexAttribdv CGfxWrapGL::glGetVertexAttribdv_Guiliani
83 #define glGetVertexAttribfv CGfxWrapGL::glGetVertexAttribfv_Guiliani
84 #define glGetVertexAttribiv CGfxWrapGL::glGetVertexAttribiv_Guiliani
85 #define glGetVertexAttribPointerv CGfxWrapGL::glGetVertexAttribPointerv_Guiliani
86 #define glIsProgram CGfxWrapGL::glIsProgram_Guiliani
87 #define glIsShader CGfxWrapGL::glIsShader_Guiliani
88 #define glLinkProgram CGfxWrapGL::glLinkProgram_Guiliani
89 #define glShaderSource CGfxWrapGL::glShaderSource_Guiliani
90 #define glUseProgram CGfxWrapGL::glUseProgram_Guiliani
91 #define glUniform1f CGfxWrapGL::glUniform1f_Guiliani
92 #define glUniform2f CGfxWrapGL::glUniform2f_Guiliani
93 #define glUniform3f CGfxWrapGL::glUniform3f_Guiliani
94 #define glUniform4f CGfxWrapGL::glUniform4f_Guiliani
95 #define glUniform1i CGfxWrapGL::glUniform1i_Guiliani
96 #define glUniform2i CGfxWrapGL::glUniform2i_Guiliani
97 #define glUniform3i CGfxWrapGL::glUniform3i_Guiliani
98 #define glUniform4i CGfxWrapGL::glUniform4i_Guiliani
99 #define glUniform1fv CGfxWrapGL::glUniform1fv_Guiliani
100 #define glUniform2fv CGfxWrapGL::glUniform2fv_Guiliani
101 #define glUniform3fv CGfxWrapGL::glUniform3fv_Guiliani
102 #define glUniform4fv CGfxWrapGL::glUniform4fv_Guiliani
103 #define glUniform1iv CGfxWrapGL::glUniform1iv_Guiliani
104 #define glUniform2iv CGfxWrapGL::glUniform2iv_Guiliani
105 #define glUniform3iv CGfxWrapGL::glUniform3iv_Guiliani
106 #define glUniform4iv CGfxWrapGL::glUniform4iv_Guiliani
107 #define glUniformMatrix2fv CGfxWrapGL::glUniformMatrix2fv_Guiliani
108 #define glUniformMatrix3fv CGfxWrapGL::glUniformMatrix3fv_Guiliani
109 #define glUniformMatrix4fv CGfxWrapGL::glUniformMatrix4fv_Guiliani
110 #define glValidateProgram CGfxWrapGL::glValidateProgram_Guiliani
111 #define glVertexAttrib1d CGfxWrapGL::glVertexAttrib1d_Guiliani
112 #define glVertexAttrib1dv CGfxWrapGL::glVertexAttrib1dv_Guiliani
113 #define glVertexAttrib1f CGfxWrapGL::glVertexAttrib1f_Guiliani
114 #define glVertexAttrib1fv CGfxWrapGL::glVertexAttrib1fv_Guiliani
115 #define glVertexAttrib1s CGfxWrapGL::glVertexAttrib1s_Guiliani
116 #define glVertexAttrib1sv CGfxWrapGL::glVertexAttrib1sv_Guiliani
117 #define glVertexAttrib2d CGfxWrapGL::glVertexAttrib2d_Guiliani
118 #define glVertexAttrib2dv CGfxWrapGL::glVertexAttrib2dv_Guiliani
119 #define glVertexAttrib2f CGfxWrapGL::glVertexAttrib2f_Guiliani
120 #define glVertexAttrib2fv CGfxWrapGL::glVertexAttrib2fv_Guiliani
121 #define glVertexAttrib2s CGfxWrapGL::glVertexAttrib2s_Guiliani
122 #define glVertexAttrib2sv CGfxWrapGL::glVertexAttrib2sv_Guiliani
123 #define glVertexAttrib3d CGfxWrapGL::glVertexAttrib3d_Guiliani
124 #define glVertexAttrib3dv CGfxWrapGL::glVertexAttrib3dv_Guiliani
125 #define glVertexAttrib3f CGfxWrapGL::glVertexAttrib3f_Guiliani
126 #define glVertexAttrib3fv CGfxWrapGL::glVertexAttrib3fv_Guiliani
127 #define glVertexAttrib3s CGfxWrapGL::glVertexAttrib3s_Guiliani
128 #define glVertexAttrib3sv CGfxWrapGL::glVertexAttrib3sv_Guiliani
129 #define glVertexAttrib4Nbv CGfxWrapGL::glVertexAttrib4Nbv_Guiliani;
130 #define glVertexAttrib4Niv CGfxWrapGL::glVertexAttrib4Niv_Guiliani;
131 #define glVertexAttrib4Nsv CGfxWrapGL::glVertexAttrib4Nsv_Guiliani;
132 #define glVertexAttrib4Nub CGfxWrapGL::glVertexAttrib4Nub_Guiliani;
133 #define glVertexAttrib4Nubv CGfxWrapGL::glVertexAttrib4Nubv_Guiliani;
134 #define glVertexAttrib4Nuiv CGfxWrapGL::glVertexAttrib4Nuiv_Guiliani;
135 #define glVertexAttrib4Nusv CGfxWrapGL::glVertexAttrib4Nusv_Guiliani;
136 #define glVertexAttrib4bv CGfxWrapGL::glVertexAttrib4bv_Guiliani;
137 #define glVertexAttrib4d CGfxWrapGL::glVertexAttrib4d_Guiliani
138 #define glVertexAttrib4dv CGfxWrapGL::glVertexAttrib4dv_Guiliani
139 #define glVertexAttrib4f CGfxWrapGL::glVertexAttrib4f_Guiliani
140 #define glVertexAttrib4fv CGfxWrapGL::glVertexAttrib4fv_Guiliani
141 #define glVertexAttrib4iv CGfxWrapGL::glVertexAttrib4iv_Guiliani
142 #define glVertexAttrib4s CGfxWrapGL::glVertexAttrib4s_Guiliani
143 #define glVertexAttrib4sv CGfxWrapGL::glVertexAttrib4sv_Guiliani
144 #define glVertexAttrib4ubv CGfxWrapGL::glVertexAttrib4ubv_Guiliani;
145 #define glVertexAttrib4uiv CGfxWrapGL::glVertexAttrib4uiv_Guiliani;
146 #define glVertexAttrib4usv CGfxWrapGL::glVertexAttrib4usv_Guiliani
147 #define glVertexAttribPointer CGfxWrapGL::glVertexAttribPointer_Guiliani
148 #endif
149 
150 #endif
151 #endif
152 
153 // Fixpoint environments (embedded targets) usually only support OpenGL ES.
154 // Float is usually supported on (non-ES) OpenGL desktop computers.
155 // Therefore, we do a simple mapping:
156 // Fixpoint -> OpenGL ES
157 // Float -> OpenGL
158 
159 #if defined eC_FIXPOINT && defined GUILIANI_USE_OGL
160 #error Fixpoint is not supported in OGL and OGLES2 mode!
161 #endif
162 
163 // maps the gl calls
164 #if defined eC_FIXPOINT
165 
166 #define GL_EC_VALUE GL_FIXED
167 #define glTexEnvV glTexEnvx
168 #define glScaleV glScalex
169 #define glColor4V glColor4x
170 #define glOrthoV glOrthox
171 #define glFrustumV glFrustumx
172 #define glTranslateV glTranslatex
173 #define glClearColorV glClearColorx
174 #define glTexParameterV glTexParameterx
175 #define glTexEnvV glTexEnvx
176 #define glLoadMatrixV(m) glLoadMatrixx((GLfixed*)(m))
177 #define glMultMatrixV(m) glMultMatrixx((GLfixed*)(m))
178 #define glLineWidthV glLineWidthx
179 #define glClearDepthV glClearDepthx
180 // Use self implemented routine here. No more dependencies to glu library,
181 // when gluPerspectivex is not needed.
182 #define gluPerspectiveV GETGFX_GL.SetPerspectiveProjection
183 #define glRotateV glRotatex
184 #define glNormal3V glNormal3x
185 #define glMaterialV glMaterialx
186 #define glMaterialVv(a, b, c) glMaterialxv(a, b, (GLfixed*)(c))
187 #define glLightV glLightx
188 #define glLightVv(a, b, c) glLightxv(a, b, (GLfixed*)(c))
189 #define glLightModelVv(a, b) glLightModelxv(a, (GLfixed*)(b))
190 #define glGetV(a, b) glGetFixedv(a, (GLfixed*)(b))
191 
192 #else
193 
194 #if GUILIANI_USE_GL_SHADERS == 1
195 
196 // when using shaders some gl-function are getting re-mapped for simplicity
197 #define glTranslateV GETGFX_GL.SetTranslation
198 #define glColor4V(r, g, b, a) glUniform4f(glGetUniformLocation(GETGFX_GL.GetShaderID(), "Color"), eC_ToFloat(r), eC_ToFloat(g), eC_ToFloat(b), eC_ToFloat(a))
199 #define glOrthoV GETGFX_GL.SetOrthoProjection
200 #define glFrustumV GETGFX_GL.SetFrustumProjection
201 #define glRotateV(a, b, c, d) GETGFX_GL.SetRotation(a, b, c, d)
202 #define glScaleV GETGFX_GL.SetScaling
203 
204 #undef GL_PROJECTION
205 #define GL_PROJECTION CGfxWrapGL::MT_PROJECTION
206 
207 #undef GL_MODELVIEW
208 #define GL_MODELVIEW CGfxWrapGL::MT_MODELVIEW
209 
210 // re-map GL-constants to point to locations of vertex-attributes
211 #undef GL_VERTEX_ARRAY
212 #define GL_VERTEX_ARRAY 0
213 
214 #undef GL_TEXTURE_COORD_ARRAY
215 #define GL_TEXTURE_COORD_ARRAY 1
216 
217 #define glMatrixMode GETGFX_GL.SetMatrixMode
218 #define glLoadIdentity GETGFX_GL.LoadIdentity
219 #define glPushMatrix GETGFX_GL.PushMatrix
220 #define glPopMatrix GETGFX_GL.PopMatrix
221 #define glLoadMatrixV GETGFX_GL.SetMatrix
222 #define glEnableClientState glEnableVertexAttribArray
223 #define glDisableClientState glDisableVertexAttribArray
224 #define glVertexPointer(a, b, c, d) glVertexAttribPointer(GL_VERTEX_ARRAY, a, b, GL_FALSE, c, d)
225 #define glTexCoordPointer(a, b, c, d) glVertexAttribPointer(GL_TEXTURE_COORD_ARRAY, a, b, GL_FALSE, c, d)
226 
227 #else
228 
229 #define glTranslateV(x, y, z) glTranslatef(eC_ToFloat(x), eC_ToFloat(y), eC_ToFloat(z))
230 #define glColor4V(r, g, b, a) glColor4f(eC_ToFloat(r), eC_ToFloat(g), eC_ToFloat(b), eC_ToFloat(a))
231 #define glRotateV(a, b, c, d) glRotatef(eC_ToFloat(a), eC_ToFloat(b), eC_ToFloat(c), eC_ToFloat(d))
232 #define glTexEnvV glTexEnvf
233 #define glScaleV glScalef
234 #define glLoadMatrixV(a) glLoadMatrixf(reinterpret_cast<const GLfloat*>(a))
235 #define glMultMatrixV glMultMatrixf
236 #define glNormal3V(x, y, z) glNormal3f(eC_ToFloat(x), eC_ToFloat(y), eC_ToFloat(z))
237 #define glMaterialV(a, b, c) glMaterialf(a, b, eC_ToFloat(c))
238 #define glMaterialVv glMaterialfv
239 #define glLightV(a, b, c) glLightf(a, b, eC_ToFloat(c))
240 #define glLightVv glLightfv
241 #define glLightModelVv glLightModelfv
242 #define glOrthoV(a, b, c, d, e, f) glOrtho(eC_ToFloat(a), eC_ToFloat(b), eC_ToFloat(c), eC_ToFloat(d), eC_ToFloat(e), eC_ToFloat(f))
243 #define glFrustumV(a, b, c, d, e, f) glFrustum(eC_ToFloat(a), eC_ToFloat(b), eC_ToFloat(c), eC_ToFloat(d), eC_ToFloat(e), eC_ToFloat(f))
244 
245 #endif
246 
247 #define GL_EC_VALUE GL_FLOAT
248 #define glClearColorV(r, g, b, a) glClearColor(eC_ToFloat(r), eC_ToFloat(g), eC_ToFloat(b), eC_ToFloat(a))
249 #define glTexParameterV(target, pname, param) glTexParameterf(eC_ToFloat(target), eC_ToFloat(pname), eC_ToFloat(param))
250 #define glLineWidthV glLineWidth
251 #define glClearDepthV(a) glClearDepth(eC_ToFloat(a))
252 #define gluPerspectiveV GETGFX_GL.SetPerspectiveProjection
253 #define glGetV glGetFloatv
254 
255 #endif
256 
257 #endif