1 /* San Angeles Observation OpenGL ES version example 2 * Copyright 2004-2005 Jetro Lauha 3 * All rights reserved. 4 * Web: http://iki.fi/jetro/ 5 * 6 * This source is free software; you can redistribute it and/or 7 * modify it under the terms of EITHER: 8 * (1) The GNU Lesser General Public License as published by the Free 9 * Software Foundation; either version 2.1 of the License, or (at 10 * your option) any later version. The text of the GNU Lesser 11 * General Public License is included with this source in the 12 * file LICENSE-LGPL.txt. 13 * (2) The BSD-style license that is included with this source in 14 * the file LICENSE-BSD.txt. 15 * 16 * This source is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files 19 * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. 20 * 21 * $Id: importgl.h,v 1.4 2005/02/24 20:29:33 tonic Exp $ 22 * $Revision: 1.4 $ 23 */ 24 25 #ifndef IMPORTGL_H_INCLUDED 26 #define IMPORTGL_H_INCLUDED 27 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include <GLES2/gl2.h> 34 35 /* Use DISABLE_IMPORTGL if you want to link the OpenGL ES at 36 * compile/link time and not import it dynamically runtime. 37 */ 38 #ifndef DISABLE_IMPORTGL 39 40 41 /* Dynamically fetches pointers to the gl functions. 42 * Should be called once on application initialization. 43 * Returns non-zero on success and 0 on failure. 44 */ 45 extern int importGLInit(); 46 47 48 #ifndef IMPORTGL_API 49 #define IMPORTGL_API extern 50 #endif 51 #ifndef IMPORTGL_FNPTRINIT 52 #define IMPORTGL_FNPTRINIT 53 #endif 54 55 #define FNDEF(retType, funcName, args) \ 56 IMPORTGL_API retType (*funcPtr_##funcName) args IMPORTGL_FNPTRINIT;\ 57 typedef retType (*funcType_##funcName) args 58 59 60 FNDEF(void, glAttachShader, (GLuint program, GLuint shader)); 61 FNDEF(void, glBindBuffer, (GLenum target, GLuint buffer)); 62 FNDEF(void, glBlendFunc, (GLenum sfactor, GLenum dfactor)); 63 FNDEF(void, glBufferData, (GLenum target, GLsizeiptr size, 64 const void* data, GLenum usage)); 65 FNDEF(void, glBufferSubData, (GLenum target, GLintptr offset, 66 GLsizeiptr size, const void* data)); 67 FNDEF(void, glClear, (GLbitfield mask)); 68 FNDEF(void, glClearColor, (GLclampf red, GLclampf green, GLclampf blue, 69 GLclampf alpha)); 70 FNDEF(void, glCompileShader, (GLuint shader)); 71 FNDEF(GLuint, glCreateProgram, (void)); 72 FNDEF(GLuint, glCreateShader, (GLenum type)); 73 FNDEF(void, glDeleteBuffers, (GLsizei n, const GLuint* buffers)); 74 FNDEF(void, glDeleteProgram, (GLuint program)); 75 FNDEF(void, glDeleteShader, (GLuint shader)); 76 FNDEF(void, glDisable, (GLenum cap)); 77 FNDEF(void, glDisableVertexAttribArray, (GLuint index)); 78 FNDEF(void, glDrawArrays, (GLenum mode, GLint first, GLsizei count)); 79 FNDEF(void, glEnable, (GLenum cap)); 80 FNDEF(void, glEnableVertexAttribArray, (GLuint index)); 81 FNDEF(void, glGenBuffers, (GLsizei n, GLuint* buffers)); 82 FNDEF(int, glGetAttribLocation, (GLuint program, const char* name)); 83 FNDEF(GLenum, glGetError, (void)); 84 FNDEF(void, glGetShaderiv, (GLuint shader, GLenum pname, GLint* params)); 85 FNDEF(void, glGetShaderInfoLog, (GLuint shader, GLsizei bufsize, 86 GLsizei* length, char* infolog)); 87 FNDEF(int, glGetUniformLocation, (GLuint program, const char* name)); 88 FNDEF(void, glLinkProgram, (GLuint program)); 89 FNDEF(void, glShaderSource, (GLuint shader, GLsizei count, 90 const char** string, const GLint* length)); 91 FNDEF(void, glUniform1f, (GLint location, GLfloat x)); 92 FNDEF(void, glUniform3fv, (GLint location, GLsizei count, const GLfloat* v)); 93 FNDEF(void, glUniform4fv, (GLint location, GLsizei count, const GLfloat* v)); 94 FNDEF(void, glUniformMatrix3fv, (GLint location, GLsizei count, 95 GLboolean transpose, const GLfloat* value)); 96 FNDEF(void, glUniformMatrix4fv, (GLint location, GLsizei count, 97 GLboolean transpose, const GLfloat* value)); 98 FNDEF(void, glUseProgram, (GLuint program)); 99 FNDEF(void, glVertexAttribPointer, (GLuint indx, GLint size, GLenum type, 100 GLboolean normalized, GLsizei stride, 101 const void* ptr)); 102 FNDEF(void, glViewport, (GLint x, GLint y, GLsizei width, GLsizei height)); 103 104 #undef FN 105 #define FNPTR(name) funcPtr_##name 106 107 #ifndef IMPORTGL_NO_FNPTR_DEFS 108 109 // Redirect gl* function calls to funcPtr_gl*. 110 111 #define glAttachShader FNPTR(glAttachShader) 112 #define glBindBuffer FNPTR(glBindBuffer) 113 #define glBlendFunc FNPTR(glBlendFunc) 114 #define glBufferData FNPTR(glBufferData) 115 #define glBufferSubData FNPTR(glBufferSubData) 116 #define glClear FNPTR(glClear) 117 #define glClearColor FNPTR(glClearColor) 118 #define glCompileShader FNPTR(glCompileShader) 119 #define glCreateProgram FNPTR(glCreateProgram) 120 #define glCreateShader FNPTR(glCreateShader) 121 #define glDeleteBuffers FNPTR(glDeleteBuffers) 122 #define glDeleteProgram FNPTR(glDeleteProgram) 123 #define glDeleteShader FNPTR(glDeleteShader) 124 #define glDisable FNPTR(glDisable) 125 #define glDisableVertexAttribArray FNPTR(glDisableVertexAttribArray) 126 #define glDrawArrays FNPTR(glDrawArrays) 127 #define glEnable FNPTR(glEnable) 128 #define glEnableVertexAttribArray FNPTR(glEnableVertexAttribArray) 129 #define glGenBuffers FNPTR(glGenBuffers) 130 #define glGetAttribLocation FNPTR(glGetAttribLocation) 131 #define glGetError FNPTR(glGetError) 132 #define glGetShaderiv FNPTR(glGetShaderiv) 133 #define glGetShaderInfoLog FNPTR(glGetShaderInfoLog) 134 #define glGetUniformLocation FNPTR(glGetUniformLocation) 135 136 #define glLinkProgram FNPTR(glLinkProgram) 137 #define glShaderSource FNPTR(glShaderSource) 138 #define glUniform1f FNPTR(glUniform1f) 139 #define glUniform3fv FNPTR(glUniform3fv) 140 #define glUniform4fv FNPTR(glUniform4fv) 141 #define glUniformMatrix3fv FNPTR(glUniformMatrix3fv) 142 #define glUniformMatrix4fv FNPTR(glUniformMatrix4fv) 143 #define glUseProgram FNPTR(glUseProgram) 144 #define glViewport FNPTR(glViewport) 145 #define glVertexAttribPointer FNPTR(glVertexAttribPointer) 146 147 #endif // !IMPORTGL_NO_FNPTR_DEFS 148 149 150 #endif // !DISABLE_IMPORTGL 151 152 153 #ifdef __cplusplus 154 } 155 #endif 156 157 158 #endif // !IMPORTGL_H_INCLUDED 159