146645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo/* San Angeles Observation OpenGL ES version example
246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * Copyright 2004-2005 Jetro Lauha
346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * All rights reserved.
446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * Web: http://iki.fi/jetro/
546645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *
646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * This source is free software; you can redistribute it and/or
746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * modify it under the terms of EITHER:
846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *   (1) The GNU Lesser General Public License as published by the Free
946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *       Software Foundation; either version 2.1 of the License, or (at
1046645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *       your option) any later version. The text of the GNU Lesser
1146645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *       General Public License is included with this source in the
1246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *       file LICENSE-LGPL.txt.
1346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *   (2) The BSD-style license that is included with this source in
1446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *       the file LICENSE-BSD.txt.
1546645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *
1646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * This source is distributed in the hope that it will be useful,
1746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * but WITHOUT ANY WARRANTY; without even the implied warranty of
1846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
1946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details.
2046645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo *
2146645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * $Id: importgl.h,v 1.4 2005/02/24 20:29:33 tonic Exp $
2246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * $Revision: 1.4 $
2346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo */
2446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
2546645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifndef IMPORTGL_H_INCLUDED
2646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#define IMPORTGL_H_INCLUDED
2746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
2846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
2946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifdef __cplusplus
3046645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Moextern "C" {
3146645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif
3246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
33c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#include <GLES2/gl2.h>
3446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
3546645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo/* Use DISABLE_IMPORTGL if you want to link the OpenGL ES at
3646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * compile/link time and not import it dynamically runtime.
3746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo */
3846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifndef DISABLE_IMPORTGL
3946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
4046645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
41591e2c249ea3291b844210606dcbf19ada6fe380Frank Henigman/* Dynamically fetches pointers to the gl functions.
4246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * Should be called once on application initialization.
4346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo * Returns non-zero on success and 0 on failure.
4446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo */
45591e2c249ea3291b844210606dcbf19ada6fe380Frank Henigmanextern int importGLInit();
4646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
4746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
4846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifndef IMPORTGL_API
4946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#define IMPORTGL_API extern
5046645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif
5146645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifndef IMPORTGL_FNPTRINIT
5246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#define IMPORTGL_FNPTRINIT
5346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif
5446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
55c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define FNDEF(retType, funcName, args) \
56c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo        IMPORTGL_API retType (*funcPtr_##funcName) args IMPORTGL_FNPTRINIT;\
57c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo        typedef retType (*funcType_##funcName) args
58c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo
59c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo
60c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glAttachShader, (GLuint program, GLuint shader));
61c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glBindBuffer, (GLenum target, GLuint buffer));
6246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(void, glBlendFunc, (GLenum sfactor, GLenum dfactor));
63c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glBufferData, (GLenum target, GLsizeiptr size,
64c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                           const void* data, GLenum usage));
65c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glBufferSubData, (GLenum target, GLintptr offset,
66c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                              GLsizeiptr size, const void* data));
6746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(void, glClear, (GLbitfield mask));
68c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glClearColor, (GLclampf red, GLclampf green, GLclampf blue,
69c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                           GLclampf alpha));
70c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glCompileShader, (GLuint shader));
71c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(GLuint, glCreateProgram, (void));
72c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(GLuint, glCreateShader, (GLenum type));
73c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glDeleteBuffers, (GLsizei n, const GLuint* buffers));
74c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glDeleteProgram, (GLuint program));
75c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glDeleteShader, (GLuint shader));
7646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(void, glDisable, (GLenum cap));
77c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glDisableVertexAttribArray, (GLuint index));
7846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(void, glDrawArrays, (GLenum mode, GLint first, GLsizei count));
7946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(void, glEnable, (GLenum cap));
80c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glEnableVertexAttribArray, (GLuint index));
81c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glGenBuffers, (GLsizei n, GLuint* buffers));
82c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(int, glGetAttribLocation, (GLuint program, const char* name));
8346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(GLenum, glGetError, (void));
84c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glGetShaderiv, (GLuint shader, GLenum pname, GLint* params));
85c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glGetShaderInfoLog, (GLuint shader, GLsizei bufsize,
86c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                                 GLsizei* length, char* infolog));
87c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(int, glGetUniformLocation, (GLuint program, const char* name));
88c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glLinkProgram, (GLuint program));
89c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glShaderSource, (GLuint shader, GLsizei count,
90c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                             const char** string, const GLint* length));
91c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glUniform1f, (GLint location, GLfloat x));
92c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glUniform3fv, (GLint location, GLsizei count, const GLfloat* v));
93c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glUniform4fv, (GLint location, GLsizei count, const GLfloat* v));
94c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glUniformMatrix3fv, (GLint location, GLsizei count,
95c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                                 GLboolean transpose, const GLfloat* value));
96c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glUniformMatrix4fv, (GLint location, GLsizei count,
97c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                                 GLboolean transpose, const GLfloat* value));
98c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glUseProgram, (GLuint program));
99c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao MoFNDEF(void, glVertexAttribPointer, (GLuint indx, GLint size, GLenum type,
100c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                                    GLboolean normalized, GLsizei stride,
101c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo                                    const void* ptr));
10246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao MoFNDEF(void, glViewport, (GLint x, GLint y, GLsizei width, GLsizei height));
10346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
10446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#undef FN
10546645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#define FNPTR(name) funcPtr_##name
10646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
10746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifndef IMPORTGL_NO_FNPTR_DEFS
10846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
109591e2c249ea3291b844210606dcbf19ada6fe380Frank Henigman// Redirect gl* function calls to funcPtr_gl*.
110c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo
111c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glAttachShader              FNPTR(glAttachShader)
112c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glBindBuffer                FNPTR(glBindBuffer)
113c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glBlendFunc                 FNPTR(glBlendFunc)
114c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glBufferData                FNPTR(glBufferData)
115c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glBufferSubData             FNPTR(glBufferSubData)
116c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glClear                     FNPTR(glClear)
117c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glClearColor                FNPTR(glClearColor)
118c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glCompileShader             FNPTR(glCompileShader)
119c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glCreateProgram             FNPTR(glCreateProgram)
120c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glCreateShader              FNPTR(glCreateShader)
121c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glDeleteBuffers             FNPTR(glDeleteBuffers)
122c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glDeleteProgram             FNPTR(glDeleteProgram)
123c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glDeleteShader              FNPTR(glDeleteShader)
124c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glDisable                   FNPTR(glDisable)
125c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glDisableVertexAttribArray  FNPTR(glDisableVertexAttribArray)
126c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glDrawArrays                FNPTR(glDrawArrays)
127c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glEnable                    FNPTR(glEnable)
128c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glEnableVertexAttribArray   FNPTR(glEnableVertexAttribArray)
129c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glGenBuffers                FNPTR(glGenBuffers)
130c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glGetAttribLocation         FNPTR(glGetAttribLocation)
131c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glGetError                  FNPTR(glGetError)
132c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glGetShaderiv               FNPTR(glGetShaderiv)
133c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glGetShaderInfoLog          FNPTR(glGetShaderInfoLog)
134c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glGetUniformLocation        FNPTR(glGetUniformLocation)
135c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo
136c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glLinkProgram               FNPTR(glLinkProgram)
137c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glShaderSource              FNPTR(glShaderSource)
138c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glUniform1f                 FNPTR(glUniform1f)
139c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glUniform3fv                FNPTR(glUniform3fv)
140c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glUniform4fv                FNPTR(glUniform4fv)
141c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glUniformMatrix3fv          FNPTR(glUniformMatrix3fv)
142c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glUniformMatrix4fv          FNPTR(glUniformMatrix4fv)
143c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glUseProgram                FNPTR(glUseProgram)
144c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glViewport                  FNPTR(glViewport)
145c8ab85b5ab0cf6bc500d8b31cfcb199a7107c8e8Zhenyao Mo#define glVertexAttribPointer       FNPTR(glVertexAttribPointer)
14646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
14746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif // !IMPORTGL_NO_FNPTR_DEFS
14846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
14946645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
15046645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif // !DISABLE_IMPORTGL
15146645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
15246645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
15346645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#ifdef __cplusplus
15446645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo}
15546645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif
15646645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
15746645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo
15846645d3bc30237d5be6552a255c9100fd6d1c5c3Zhenyao Mo#endif // !IMPORTGL_H_INCLUDED
159