Guiliani  Version 2.6 revision 7293 (documentation build 12)
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