/*
 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code 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 GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

#ifndef OGLFuncs_h_Included
#define OGLFuncs_h_Included

#ifdef MACOSX
#include <dlfcn.h>
#endif
#include "jni.h"
#include "J2D_GL/gl.h"
#include "J2D_GL/glext.h"
#include "OGLFuncMacros.h"
#include "OGLFuncs_md.h"
#include "Trace.h"

jboolean OGLFuncs_OpenLibrary();
void     OGLFuncs_CloseLibrary();
jboolean OGLFuncs_InitPlatformFuncs();
jboolean OGLFuncs_InitBaseFuncs();
jboolean OGLFuncs_InitExtFuncs();

/**
 * Core OpenGL 1.1 function typedefs
 */
typedef void (GLAPIENTRY *glAlphaFuncType)(GLenum func, GLclampf ref);
typedef GLboolean (GLAPIENTRY *glAreTexturesResidentType)(GLsizei n, const GLuint *textures, GLboolean *residences);
typedef void (GLAPIENTRY *glBeginType)(GLenum mode);
typedef void (GLAPIENTRY *glBindTextureType)(GLenum target, GLuint texture);
typedef void (GLAPIENTRY *glBitmapType)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
typedef void (GLAPIENTRY *glBlendFuncType)(GLenum sfactor, GLenum dfactor);
typedef void (GLAPIENTRY *glClearType)(GLbitfield mask);
typedef void (GLAPIENTRY *glClearColorType)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef void (GLAPIENTRY *glClearDepthType)(GLclampd depth);
typedef void (GLAPIENTRY *glColor3ubType)(GLubyte red, GLubyte green, GLubyte blue);
typedef void (GLAPIENTRY *glColor4fType)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
typedef void (GLAPIENTRY *glColor4ubType)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
typedef void (GLAPIENTRY *glColorMaskType)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
typedef void (GLAPIENTRY *glColorPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (GLAPIENTRY *glCopyPixelsType)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
typedef void (GLAPIENTRY *glCopyTexSubImage2DType)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (GLAPIENTRY *glDeleteTexturesType)(GLsizei n, const GLuint *textures);
typedef void (GLAPIENTRY *glDepthFuncType)(GLenum func);
typedef void (GLAPIENTRY *glDisableType)(GLenum cap);
typedef void (GLAPIENTRY *glDisableClientStateType)(GLenum array);
typedef void (GLAPIENTRY *glDrawArraysType)(GLenum mode, GLint first, GLsizei count);
typedef void (GLAPIENTRY *glDrawBufferType)(GLenum mode);
typedef void (GLAPIENTRY *glDrawPixelsType)(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (GLAPIENTRY *glEnableType)(GLenum cap);
typedef void (GLAPIENTRY *glEnableClientStateType)(GLenum array);
typedef void (GLAPIENTRY *glEndType)(void);
typedef void (GLAPIENTRY *glFinishType)(void);
typedef void (GLAPIENTRY *glFlushType)(void);
typedef void (GLAPIENTRY *glGenTexturesType)(GLsizei n, GLuint *textures);
typedef void (GLAPIENTRY *glGetBooleanvType)(GLenum pname, GLboolean *params);
typedef void (GLAPIENTRY *glGetDoublevType)(GLenum pname, GLdouble *params);
typedef GLenum (GLAPIENTRY *glGetErrorType)(void);
typedef void (GLAPIENTRY *glGetFloatvType)(GLenum pname, GLfloat *params);
typedef void (GLAPIENTRY *glGetIntegervType)(GLenum pname, GLint *params);
typedef const GLubyte * (GLAPIENTRY *glGetStringType)(GLenum name);
typedef void (GLAPIENTRY *glGetTexLevelParameterivType)(GLenum target, GLint level, GLenum pname, GLint *params);
typedef void (GLAPIENTRY *glHintType)(GLenum target, GLenum mode);
typedef void (GLAPIENTRY *glInterleavedArraysType)(GLenum format, GLsizei stride, const GLvoid *pointer);
typedef GLboolean (GLAPIENTRY *glIsEnabledType)(GLenum cap);
typedef GLboolean (GLAPIENTRY *glIsTextureType)(GLuint texture);
typedef void (GLAPIENTRY *glLoadIdentityType)(void);
typedef void (GLAPIENTRY *glLoadMatrixdType)(const GLdouble *m);
typedef void (GLAPIENTRY *glLogicOpType)(GLenum opcode);
typedef void (GLAPIENTRY *glMatrixModeType)(GLenum mode);
typedef void (GLAPIENTRY *glOrthoType)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
typedef void (GLAPIENTRY *glPixelStoreiType)(GLenum pname, GLint param);
typedef void (GLAPIENTRY *glPixelTransferfType)(GLenum pname, GLfloat param);
typedef void (GLAPIENTRY *glPixelZoomType)(GLfloat xfactor, GLfloat yfactor);
typedef void (GLAPIENTRY *glPolygonOffsetType)(GLfloat factor, GLfloat units);
typedef void (GLAPIENTRY *glPopAttribType)(void);
typedef void (GLAPIENTRY *glPopClientAttribType)(void);
typedef void (GLAPIENTRY *glPopMatrixType)(void);
typedef void (GLAPIENTRY *glPrioritizeTexturesType)(GLsizei n, const GLuint *textures, const GLclampf *priorities);
typedef void (GLAPIENTRY *glPushAttribType)(GLbitfield);
typedef void (GLAPIENTRY *glPushClientAttribType)(GLbitfield);
typedef void (GLAPIENTRY *glPushMatrixType)(void);
typedef void (GLAPIENTRY *glRasterPos2iType)(GLint x, GLint y);
typedef void (GLAPIENTRY *glReadBufferType)(GLenum mode);
typedef void (GLAPIENTRY *glReadPixelsType)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
typedef void (GLAPIENTRY *glRectiType)(GLint x1, GLint y1, GLint x2, GLint y2);
typedef void (GLAPIENTRY *glScalefType)(GLfloat x, GLfloat y, GLfloat z);
typedef void (GLAPIENTRY *glScissorType)(GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (GLAPIENTRY *glTexCoord2dType)(GLdouble s, GLdouble t);
typedef void (GLAPIENTRY *glTexCoord2fType)(GLfloat s, GLfloat t);
typedef void (GLAPIENTRY *glTexCoordPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (GLAPIENTRY *glTexEnviType)(GLenum target, GLenum pname, GLint param);
typedef void (GLAPIENTRY *glTexGeniType)(GLenum coord, GLenum pname, GLint param);
typedef void (GLAPIENTRY *glTexGendvType)(GLenum coord, GLenum pname, const GLdouble *params);
typedef void (GLAPIENTRY *glTexImage1DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (GLAPIENTRY *glTexImage2DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (GLAPIENTRY *glTexParameteriType)(GLenum target, GLenum pname, GLint param);
typedef void (GLAPIENTRY *glTexSubImage1DType)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (GLAPIENTRY *glTexSubImage2DType)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (GLAPIENTRY *glTranslatefType)(GLfloat x, GLfloat y, GLfloat z);
typedef void (GLAPIENTRY *glVertex2dType)(GLdouble x, GLdouble y);
typedef void (GLAPIENTRY *glVertex2fType)(GLfloat x, GLfloat y);
typedef void (GLAPIENTRY *glVertex2iType)(GLint x, GLint y);
typedef void (GLAPIENTRY *glVertexPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (GLAPIENTRY *glViewportType)(GLint x, GLint y, GLsizei width, GLsizei height);

/**
 * OpenGL 1.2 and extension function typedefs (functions that were added in
 * the 1.2 spec and later need to be loaded on Windows as if they were
 * extensions, which is why they are called out separately here)
 */
typedef void (GLAPIENTRY *glActiveTextureARBType)(GLenum texture);
typedef void (GLAPIENTRY *glClientActiveTextureARBType)(GLenum texture);
typedef void (GLAPIENTRY *glMultiTexCoord2fARBType)(GLenum texture, GLfloat s, GLfloat t);
typedef void (GLAPIENTRY *glTexImage3DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);

/**
 * GL_EXT_framebuffer_object function typedefs
 */
typedef void (GLAPIENTRY *glBindRenderbufferEXTType)(GLenum, GLuint);
typedef void (GLAPIENTRY *glDeleteRenderbuffersEXTType)(GLsizei, const GLuint *);
typedef void (GLAPIENTRY *glGenRenderbuffersEXTType)(GLsizei, GLuint *);
typedef void (GLAPIENTRY *glRenderbufferStorageEXTType)(GLenum, GLenum, GLsizei, GLsizei);
typedef void (GLAPIENTRY *glBindFramebufferEXTType)(GLenum, GLuint);
typedef void (GLAPIENTRY *glDeleteFramebuffersEXTType)(GLsizei, const GLuint *);
typedef void (GLAPIENTRY *glGenFramebuffersEXTType)(GLsizei, GLuint *);
typedef GLenum (GLAPIENTRY *glCheckFramebufferStatusEXTType)(GLenum);
typedef void (GLAPIENTRY *glFramebufferTexture2DEXTType)(GLenum, GLenum, GLenum, GLuint, GLint);
typedef void (GLAPIENTRY *glFramebufferRenderbufferEXTType)(GLenum, GLenum, GLenum, GLuint);

/**
 * GL_ARB_fragment_shader extension function typedefs
 */
typedef GLhandleARB (GLAPIENTRY *glCreateShaderObjectARBType)(GLenum);
typedef void (GLAPIENTRY *glShaderSourceARBType)(GLhandleARB, GLsizei, const GLcharARB* *, const GLint *);
typedef void (GLAPIENTRY *glCompileShaderARBType)(GLhandleARB);
typedef void (GLAPIENTRY *glUseProgramObjectARBType)(GLhandleARB);
typedef void (GLAPIENTRY *glUniform1iARBType)(GLint, GLint);
typedef void (GLAPIENTRY *glUniform1fARBType)(GLint, GLfloat);
typedef void (GLAPIENTRY *glUniform1fvARBType)(GLint, GLsizei, const GLfloat *);
typedef void (GLAPIENTRY *glUniform2fARBType)(GLint, GLfloat, GLfloat);
typedef void (GLAPIENTRY *glUniform3fARBType)(GLint, GLfloat, GLfloat, GLfloat);
typedef void (GLAPIENTRY *glUniform3fvARBType)(GLint, GLsizei, const GLfloat *);
typedef void (GLAPIENTRY *glUniform4fARBType)(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
typedef void (GLAPIENTRY *glUniform4fvARBType)(GLint, GLsizei, const GLfloat *);
typedef GLint (GLAPIENTRY *glGetUniformLocationARBType)(GLhandleARB, const GLcharARB *);
typedef void (GLAPIENTRY *glGetInfoLogARBType)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
typedef void (GLAPIENTRY *glGetProgramivARBType)(GLenum, GLenum, GLint *);
typedef void (GLAPIENTRY *glGetObjectParameterivARBType)(GLhandleARB, GLenum, GLint *);
typedef GLhandleARB (GLAPIENTRY *glCreateProgramObjectARBType)(void);
typedef void (GLAPIENTRY *glAttachObjectARBType)(GLhandleARB, GLhandleARB);
typedef void (GLAPIENTRY *glLinkProgramARBType)(GLhandleARB);
typedef void (GLAPIENTRY *glDeleteObjectARBType)(GLhandleARB);

/**
 * GL_NV_texture_barrier extension function typedef's
 */
typedef void (GLAPIENTRY *glTextureBarrierNVType) (void);

/**
 * REMIND: this caused an internal error in the MS compiler!?!?
 *
 *#define OGL_CHECK_FUNC_ERR(f) \
 *    J2dTrace1(J2D_TRACE_ERROR, "could not load function: %s", #f)
 */

#define OGL_CHECK_FUNC_ERR(f) \
    J2dRlsTraceLn(J2D_TRACE_ERROR, #f)

#define OGL_INIT_FUNC(f) \
    OGL_J2D_MANGLE(f) = (OGL_FUNC_TYPE(f)) OGL_GET_PROC_ADDRESS(f)

#define OGL_INIT_AND_CHECK_FUNC(f) \
    OGL_INIT_FUNC(f); \
    if (OGL_J2D_MANGLE(f) == NULL) { \
        OGL_CHECK_FUNC_ERR(f); \
        return JNI_FALSE; \
    }

#define OGL_INIT_EXT_FUNC(f) \
    OGL_J2D_MANGLE(f) = (OGL_FUNC_TYPE(f)) OGL_GET_EXT_PROC_ADDRESS(f)

#define OGL_INIT_AND_CHECK_EXT_FUNC(f) \
    OGL_INIT_EXT_FUNC(f); \
    if (OGL_J2D_MANGLE(f) == NULL) { \
        OGL_CHECK_FUNC_ERR(f); \
        return JNI_FALSE; \
    }

#define OGL_EXPRESS_BASE_FUNCS(action) \
    OGL_##action##_FUNC(glAlphaFunc); \
    OGL_##action##_FUNC(glAreTexturesResident); \
    OGL_##action##_FUNC(glBegin); \
    OGL_##action##_FUNC(glBindTexture); \
    OGL_##action##_FUNC(glBitmap); \
    OGL_##action##_FUNC(glBlendFunc); \
    OGL_##action##_FUNC(glClear); \
    OGL_##action##_FUNC(glClearColor); \
    OGL_##action##_FUNC(glClearDepth); \
    OGL_##action##_FUNC(glColor3ub); \
    OGL_##action##_FUNC(glColor4f); \
    OGL_##action##_FUNC(glColor4ub); \
    OGL_##action##_FUNC(glColorMask); \
    OGL_##action##_FUNC(glColorPointer); \
    OGL_##action##_FUNC(glCopyPixels); \
    OGL_##action##_FUNC(glCopyTexSubImage2D); \
    OGL_##action##_FUNC(glDeleteTextures); \
    OGL_##action##_FUNC(glDepthFunc); \
    OGL_##action##_FUNC(glDisable); \
    OGL_##action##_FUNC(glDisableClientState); \
    OGL_##action##_FUNC(glDrawArrays); \
    OGL_##action##_FUNC(glDrawBuffer); \
    OGL_##action##_FUNC(glDrawPixels); \
    OGL_##action##_FUNC(glEnable); \
    OGL_##action##_FUNC(glEnableClientState); \
    OGL_##action##_FUNC(glEnd); \
    OGL_##action##_FUNC(glFinish); \
    OGL_##action##_FUNC(glFlush); \
    OGL_##action##_FUNC(glGenTextures); \
    OGL_##action##_FUNC(glGetBooleanv); \
    OGL_##action##_FUNC(glGetDoublev); \
    OGL_##action##_FUNC(glGetError); \
    OGL_##action##_FUNC(glGetFloatv); \
    OGL_##action##_FUNC(glGetIntegerv); \
    OGL_##action##_FUNC(glGetString); \
    OGL_##action##_FUNC(glGetTexLevelParameteriv); \
    OGL_##action##_FUNC(glHint); \
    OGL_##action##_FUNC(glInterleavedArrays); \
    OGL_##action##_FUNC(glIsEnabled); \
    OGL_##action##_FUNC(glIsTexture); \
    OGL_##action##_FUNC(glLoadIdentity); \
    OGL_##action##_FUNC(glLoadMatrixd); \
    OGL_##action##_FUNC(glLogicOp); \
    OGL_##action##_FUNC(glMatrixMode); \
    OGL_##action##_FUNC(glOrtho); \
    OGL_##action##_FUNC(glPixelStorei); \
    OGL_##action##_FUNC(glPixelTransferf); \
    OGL_##action##_FUNC(glPixelZoom); \
    OGL_##action##_FUNC(glPolygonOffset); \
    OGL_##action##_FUNC(glPopAttrib); \
    OGL_##action##_FUNC(glPopClientAttrib); \
    OGL_##action##_FUNC(glPopMatrix); \
    OGL_##action##_FUNC(glPrioritizeTextures); \
    OGL_##action##_FUNC(glPushAttrib); \
    OGL_##action##_FUNC(glPushClientAttrib); \
    OGL_##action##_FUNC(glPushMatrix); \
    OGL_##action##_FUNC(glRasterPos2i); \
    OGL_##action##_FUNC(glReadBuffer); \
    OGL_##action##_FUNC(glReadPixels); \
    OGL_##action##_FUNC(glRecti); \
    OGL_##action##_FUNC(glScalef); \
    OGL_##action##_FUNC(glScissor); \
    OGL_##action##_FUNC(glTexCoord2d); \
    OGL_##action##_FUNC(glTexCoord2f); \
    OGL_##action##_FUNC(glTexCoordPointer); \
    OGL_##action##_FUNC(glTexEnvi); \
    OGL_##action##_FUNC(glTexGeni); \
    OGL_##action##_FUNC(glTexGendv); \
    OGL_##action##_FUNC(glTexImage1D); \
    OGL_##action##_FUNC(glTexImage2D); \
    OGL_##action##_FUNC(glTexParameteri); \
    OGL_##action##_FUNC(glTexSubImage1D); \
    OGL_##action##_FUNC(glTexSubImage2D); \
    OGL_##action##_FUNC(glTranslatef); \
    OGL_##action##_FUNC(glVertex2d); \
    OGL_##action##_FUNC(glVertex2f); \
    OGL_##action##_FUNC(glVertex2i); \
    OGL_##action##_FUNC(glVertexPointer); \
    OGL_##action##_FUNC(glViewport);

#define OGL_EXPRESS_EXT_FUNCS(action) \
    OGL_##action##_EXT_FUNC(glActiveTextureARB); \
    OGL_##action##_EXT_FUNC(glClientActiveTextureARB); \
    OGL_##action##_EXT_FUNC(glMultiTexCoord2fARB); \
    OGL_##action##_EXT_FUNC(glTexImage3D); \
    OGL_##action##_EXT_FUNC(glBindRenderbufferEXT); \
    OGL_##action##_EXT_FUNC(glDeleteRenderbuffersEXT); \
    OGL_##action##_EXT_FUNC(glGenRenderbuffersEXT); \
    OGL_##action##_EXT_FUNC(glRenderbufferStorageEXT); \
    OGL_##action##_EXT_FUNC(glBindFramebufferEXT); \
    OGL_##action##_EXT_FUNC(glDeleteFramebuffersEXT); \
    OGL_##action##_EXT_FUNC(glGenFramebuffersEXT); \
    OGL_##action##_EXT_FUNC(glCheckFramebufferStatusEXT); \
    OGL_##action##_EXT_FUNC(glFramebufferTexture2DEXT); \
    OGL_##action##_EXT_FUNC(glFramebufferRenderbufferEXT); \
    OGL_##action##_EXT_FUNC(glCreateProgramObjectARB); \
    OGL_##action##_EXT_FUNC(glAttachObjectARB); \
    OGL_##action##_EXT_FUNC(glLinkProgramARB); \
    OGL_##action##_EXT_FUNC(glCreateShaderObjectARB); \
    OGL_##action##_EXT_FUNC(glShaderSourceARB); \
    OGL_##action##_EXT_FUNC(glCompileShaderARB); \
    OGL_##action##_EXT_FUNC(glUseProgramObjectARB); \
    OGL_##action##_EXT_FUNC(glUniform1iARB); \
    OGL_##action##_EXT_FUNC(glUniform1fARB); \
    OGL_##action##_EXT_FUNC(glUniform1fvARB); \
    OGL_##action##_EXT_FUNC(glUniform2fARB); \
    OGL_##action##_EXT_FUNC(glUniform3fARB); \
    OGL_##action##_EXT_FUNC(glUniform3fvARB); \
    OGL_##action##_EXT_FUNC(glUniform4fARB); \
    OGL_##action##_EXT_FUNC(glUniform4fvARB); \
    OGL_##action##_EXT_FUNC(glGetUniformLocationARB); \
    OGL_##action##_EXT_FUNC(glGetProgramivARB); \
    OGL_##action##_EXT_FUNC(glGetInfoLogARB); \
    OGL_##action##_EXT_FUNC(glGetObjectParameterivARB); \
    OGL_##action##_EXT_FUNC(glDeleteObjectARB); \
    OGL_##action##_EXT_FUNC(glTextureBarrierNV);

#define OGL_EXPRESS_ALL_FUNCS(action) \
    OGL_EXPRESS_BASE_FUNCS(action) \
    OGL_EXPRESS_EXT_FUNCS(action) \
    OGL_EXPRESS_PLATFORM_FUNCS(action) \
    OGL_EXPRESS_PLATFORM_EXT_FUNCS(action)

OGL_EXPRESS_ALL_FUNCS(EXTERN)

#endif /* OGLFuncs_h_Included */
