Home | History | Annotate | Download | only in src
      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