/* San Angeles Observation OpenGL ES version example
 * Copyright 2004-2005 Jetro Lauha
 * All rights reserved.
 * Web: http://iki.fi/jetro/
 *
 * This source is free software; you can redistribute it and/or
 * modify it under the terms of EITHER:
 *   (1) The GNU Lesser General Public License as published by the Free
 *       Software Foundation; either version 2.1 of the License, or (at
 *       your option) any later version. The text of the GNU Lesser
 *       General Public License is included with this source in the
 *       file LICENSE-LGPL.txt.
 *   (2) The BSD-style license that is included with this source in
 *       the file LICENSE-BSD.txt.
 *
 * This source is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
 * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details.
 *
 * $Id: importgl.h,v 1.4 2005/02/24 20:29:33 tonic Exp $
 * $Revision: 1.4 $
 */

#ifndef IMPORTGL_H_INCLUDED
#define IMPORTGL_H_INCLUDED


#ifdef __cplusplus
extern "C" {
#endif

#include <GLES2/gl2.h>
#include <EGL/egl.h>

/* Use DISABLE_IMPORTGL if you want to link the OpenGL ES at
 * compile/link time and not import it dynamically runtime.
 */
#ifndef DISABLE_IMPORTGL


/* Dynamically fetches pointers to the egl & gl functions.
 * Should be called once on application initialization.
 * Returns non-zero on success and 0 on failure.
 */
extern int importGLInit(char *libGLES, char *libEGL);

/* Frees the handle to egl & gl functions library.
 */
extern void importGLDeinit();


#ifndef IMPORTGL_API
#define IMPORTGL_API extern
#endif
#ifndef IMPORTGL_FNPTRINIT
#define IMPORTGL_FNPTRINIT
#endif

#define FNDEF(retType, funcName, args) \
        IMPORTGL_API retType (*funcPtr_##funcName) args IMPORTGL_FNPTRINIT;\
        typedef retType (*funcType_##funcName) args


FNDEF(EGLBoolean, eglBindAPI, (EGLenum api));
FNDEF(EGLBoolean, eglChooseConfig, (EGLDisplay dpy,
                                    const EGLint *attrib_list,
                                    EGLConfig *configs,
                                    EGLint config_size,
                                    EGLint *num_config));
FNDEF(EGLContext, eglCreateContext, (EGLDisplay dpy,
                                     EGLConfig config,
                                     EGLContext share_list,
                                     const EGLint *attrib_list));
FNDEF(EGLSurface, eglCreateWindowSurface, (EGLDisplay dpy,
                                           EGLConfig config,
                                           NativeWindowType window,
                                           const EGLint *attrib_list));
FNDEF(EGLBoolean, eglDestroyContext, (EGLDisplay dpy, EGLContext ctx));
FNDEF(EGLBoolean, eglDestroySurface, (EGLDisplay dpy, EGLSurface surface));
FNDEF(EGLBoolean, eglGetConfigAttrib, (EGLDisplay dpy, EGLConfig config,
                                       EGLint attribute, EGLint *value));
FNDEF(EGLBoolean, eglGetConfigs, (EGLDisplay dpy, EGLConfig *configs,
                                  EGLint config_size, EGLint *num_config));
FNDEF(EGLDisplay, eglGetDisplay, (NativeDisplayType display));
FNDEF(EGLint, eglGetError, (void));
FNDEF(EGLBoolean, eglInitialize, (EGLDisplay dpy,
                                  EGLint *major, EGLint *minor));
FNDEF(EGLBoolean, eglMakeCurrent, (EGLDisplay dpy, EGLSurface draw,
                                   EGLSurface read, EGLContext ctx));
FNDEF(EGLBoolean, eglSwapBuffers, (EGLDisplay dpy, EGLSurface draw));
FNDEF(EGLBoolean, eglTerminate, (EGLDisplay dpy));

FNDEF(void, glAttachShader, (GLuint program, GLuint shader));
FNDEF(void, glBindBuffer, (GLenum target, GLuint buffer));
FNDEF(void, glBlendFunc, (GLenum sfactor, GLenum dfactor));
FNDEF(void, glBufferData, (GLenum target, GLsizeiptr size,
                           const void* data, GLenum usage));
FNDEF(void, glBufferSubData, (GLenum target, GLintptr offset,
                              GLsizeiptr size, const void* data));
FNDEF(void, glClear, (GLbitfield mask));
FNDEF(void, glClearColor, (GLclampf red, GLclampf green, GLclampf blue,
                           GLclampf alpha));
FNDEF(void, glCompileShader, (GLuint shader));
FNDEF(GLuint, glCreateProgram, (void));
FNDEF(GLuint, glCreateShader, (GLenum type));
FNDEF(void, glDeleteBuffers, (GLsizei n, const GLuint* buffers));
FNDEF(void, glDeleteProgram, (GLuint program));
FNDEF(void, glDeleteShader, (GLuint shader));
FNDEF(void, glDisable, (GLenum cap));
FNDEF(void, glDisableVertexAttribArray, (GLuint index));
FNDEF(void, glDrawArrays, (GLenum mode, GLint first, GLsizei count));
FNDEF(void, glEnable, (GLenum cap));
FNDEF(void, glEnableVertexAttribArray, (GLuint index));
FNDEF(void, glGenBuffers, (GLsizei n, GLuint* buffers));
FNDEF(int, glGetAttribLocation, (GLuint program, const char* name));
FNDEF(GLenum, glGetError, (void));
FNDEF(void, glGetShaderiv, (GLuint shader, GLenum pname, GLint* params));
FNDEF(void, glGetShaderInfoLog, (GLuint shader, GLsizei bufsize,
                                 GLsizei* length, char* infolog));
FNDEF(int, glGetUniformLocation, (GLuint program, const char* name));
FNDEF(void, glLinkProgram, (GLuint program));
FNDEF(void, glShaderSource, (GLuint shader, GLsizei count,
                             const char** string, const GLint* length));
FNDEF(void, glUniform1f, (GLint location, GLfloat x));
FNDEF(void, glUniform3fv, (GLint location, GLsizei count, const GLfloat* v));
FNDEF(void, glUniform4fv, (GLint location, GLsizei count, const GLfloat* v));
FNDEF(void, glUniformMatrix3fv, (GLint location, GLsizei count,
                                 GLboolean transpose, const GLfloat* value));
FNDEF(void, glUniformMatrix4fv, (GLint location, GLsizei count,
                                 GLboolean transpose, const GLfloat* value));
FNDEF(void, glUseProgram, (GLuint program));
FNDEF(void, glVertexAttribPointer, (GLuint indx, GLint size, GLenum type,
                                    GLboolean normalized, GLsizei stride,
                                    const void* ptr));
FNDEF(void, glViewport, (GLint x, GLint y, GLsizei width, GLsizei height));

#undef FN
#define FNPTR(name) funcPtr_##name

#ifndef IMPORTGL_NO_FNPTR_DEFS

// Redirect egl* and gl* function calls to funcPtr_egl* and funcPtr_gl*.

#define eglBindAPI                  FNPTR(eglBindAPI)
#define eglChooseConfig             FNPTR(eglChooseConfig)
#define eglCreateContext            FNPTR(eglCreateContext)
#define eglCreateWindowSurface      FNPTR(eglCreateWindowSurface)
#define eglDestroyContext           FNPTR(eglDestroyContext)
#define eglDestroySurface           FNPTR(eglDestroySurface)
#define eglGetConfigAttrib          FNPTR(eglGetConfigAttrib)
#define eglGetConfigs               FNPTR(eglGetConfigs)
#define eglGetDisplay               FNPTR(eglGetDisplay)
#define eglGetError                 FNPTR(eglGetError)
#define eglInitialize               FNPTR(eglInitialize)
#define eglMakeCurrent              FNPTR(eglMakeCurrent)
#define eglSwapBuffers              FNPTR(eglSwapBuffers)
#define eglTerminate                FNPTR(eglTerminate)

#define glAttachShader              FNPTR(glAttachShader)
#define glBindBuffer                FNPTR(glBindBuffer)
#define glBlendFunc                 FNPTR(glBlendFunc)
#define glBufferData                FNPTR(glBufferData)
#define glBufferSubData             FNPTR(glBufferSubData)
#define glClear                     FNPTR(glClear)
#define glClearColor                FNPTR(glClearColor)
#define glCompileShader             FNPTR(glCompileShader)
#define glCreateProgram             FNPTR(glCreateProgram)
#define glCreateShader              FNPTR(glCreateShader)
#define glDeleteBuffers             FNPTR(glDeleteBuffers)
#define glDeleteProgram             FNPTR(glDeleteProgram)
#define glDeleteShader              FNPTR(glDeleteShader)
#define glDisable                   FNPTR(glDisable)
#define glDisableVertexAttribArray  FNPTR(glDisableVertexAttribArray)
#define glDrawArrays                FNPTR(glDrawArrays)
#define glEnable                    FNPTR(glEnable)
#define glEnableVertexAttribArray   FNPTR(glEnableVertexAttribArray)
#define glGenBuffers                FNPTR(glGenBuffers)
#define glGetAttribLocation         FNPTR(glGetAttribLocation)
#define glGetError                  FNPTR(glGetError)
#define glGetShaderiv               FNPTR(glGetShaderiv)
#define glGetShaderInfoLog          FNPTR(glGetShaderInfoLog)
#define glGetUniformLocation        FNPTR(glGetUniformLocation)

#define glLinkProgram               FNPTR(glLinkProgram)
#define glShaderSource              FNPTR(glShaderSource)
#define glUniform1f                 FNPTR(glUniform1f)
#define glUniform3fv                FNPTR(glUniform3fv)
#define glUniform4fv                FNPTR(glUniform4fv)
#define glUniformMatrix3fv          FNPTR(glUniformMatrix3fv)
#define glUniformMatrix4fv          FNPTR(glUniformMatrix4fv)
#define glUseProgram                FNPTR(glUseProgram)
#define glViewport                  FNPTR(glViewport)
#define glVertexAttribPointer       FNPTR(glVertexAttribPointer)

#endif // !IMPORTGL_NO_FNPTR_DEFS


#endif // !DISABLE_IMPORTGL


#ifdef __cplusplus
}
#endif


#endif // !IMPORTGL_H_INCLUDED
