Path: blob/master/src/java.desktop/share/native/common/java2d/opengl/OGLFuncs.h
41159 views
/*1* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#ifndef OGLFuncs_h_Included26#define OGLFuncs_h_Included2728#ifdef MACOSX29#include <dlfcn.h>30#endif31#include "jni.h"32#include "J2D_GL/gl.h"33#include "J2D_GL/glext.h"34#include "OGLFuncMacros.h"35#include "OGLFuncs_md.h"36#include "Trace.h"3738jboolean OGLFuncs_OpenLibrary();39void OGLFuncs_CloseLibrary();40jboolean OGLFuncs_InitPlatformFuncs();41jboolean OGLFuncs_InitBaseFuncs();42jboolean OGLFuncs_InitExtFuncs();4344/**45* Core OpenGL 1.1 function typedefs46*/47typedef void (GLAPIENTRY *glAlphaFuncType)(GLenum func, GLclampf ref);48typedef GLboolean (GLAPIENTRY *glAreTexturesResidentType)(GLsizei n, const GLuint *textures, GLboolean *residences);49typedef void (GLAPIENTRY *glBeginType)(GLenum mode);50typedef void (GLAPIENTRY *glBindTextureType)(GLenum target, GLuint texture);51typedef void (GLAPIENTRY *glBitmapType)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);52typedef void (GLAPIENTRY *glBlendFuncType)(GLenum sfactor, GLenum dfactor);53typedef void (GLAPIENTRY *glClearType)(GLbitfield mask);54typedef void (GLAPIENTRY *glClearColorType)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);55typedef void (GLAPIENTRY *glClearDepthType)(GLclampd depth);56typedef void (GLAPIENTRY *glColor3ubType)(GLubyte red, GLubyte green, GLubyte blue);57typedef void (GLAPIENTRY *glColor4fType)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);58typedef void (GLAPIENTRY *glColor4ubType)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);59typedef void (GLAPIENTRY *glColorMaskType)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);60typedef void (GLAPIENTRY *glColorPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);61typedef void (GLAPIENTRY *glCopyPixelsType)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);62typedef void (GLAPIENTRY *glCopyTexSubImage2DType)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);63typedef void (GLAPIENTRY *glDeleteTexturesType)(GLsizei n, const GLuint *textures);64typedef void (GLAPIENTRY *glDepthFuncType)(GLenum func);65typedef void (GLAPIENTRY *glDisableType)(GLenum cap);66typedef void (GLAPIENTRY *glDisableClientStateType)(GLenum array);67typedef void (GLAPIENTRY *glDrawArraysType)(GLenum mode, GLint first, GLsizei count);68typedef void (GLAPIENTRY *glDrawBufferType)(GLenum mode);69typedef void (GLAPIENTRY *glDrawPixelsType)(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);70typedef void (GLAPIENTRY *glEnableType)(GLenum cap);71typedef void (GLAPIENTRY *glEnableClientStateType)(GLenum array);72typedef void (GLAPIENTRY *glEndType)(void);73typedef void (GLAPIENTRY *glFinishType)(void);74typedef void (GLAPIENTRY *glFlushType)(void);75typedef void (GLAPIENTRY *glGenTexturesType)(GLsizei n, GLuint *textures);76typedef void (GLAPIENTRY *glGetBooleanvType)(GLenum pname, GLboolean *params);77typedef void (GLAPIENTRY *glGetDoublevType)(GLenum pname, GLdouble *params);78typedef GLenum (GLAPIENTRY *glGetErrorType)(void);79typedef void (GLAPIENTRY *glGetFloatvType)(GLenum pname, GLfloat *params);80typedef void (GLAPIENTRY *glGetIntegervType)(GLenum pname, GLint *params);81typedef const GLubyte * (GLAPIENTRY *glGetStringType)(GLenum name);82typedef void (GLAPIENTRY *glGetTexLevelParameterivType)(GLenum target, GLint level, GLenum pname, GLint *params);83typedef void (GLAPIENTRY *glHintType)(GLenum target, GLenum mode);84typedef void (GLAPIENTRY *glInterleavedArraysType)(GLenum format, GLsizei stride, const GLvoid *pointer);85typedef GLboolean (GLAPIENTRY *glIsEnabledType)(GLenum cap);86typedef GLboolean (GLAPIENTRY *glIsTextureType)(GLuint texture);87typedef void (GLAPIENTRY *glLoadIdentityType)(void);88typedef void (GLAPIENTRY *glLoadMatrixdType)(const GLdouble *m);89typedef void (GLAPIENTRY *glLogicOpType)(GLenum opcode);90typedef void (GLAPIENTRY *glMatrixModeType)(GLenum mode);91typedef void (GLAPIENTRY *glOrthoType)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);92typedef void (GLAPIENTRY *glPixelStoreiType)(GLenum pname, GLint param);93typedef void (GLAPIENTRY *glPixelTransferfType)(GLenum pname, GLfloat param);94typedef void (GLAPIENTRY *glPixelZoomType)(GLfloat xfactor, GLfloat yfactor);95typedef void (GLAPIENTRY *glPolygonOffsetType)(GLfloat factor, GLfloat units);96typedef void (GLAPIENTRY *glPopAttribType)(void);97typedef void (GLAPIENTRY *glPopClientAttribType)(void);98typedef void (GLAPIENTRY *glPopMatrixType)(void);99typedef void (GLAPIENTRY *glPrioritizeTexturesType)(GLsizei n, const GLuint *textures, const GLclampf *priorities);100typedef void (GLAPIENTRY *glPushAttribType)(GLbitfield);101typedef void (GLAPIENTRY *glPushClientAttribType)(GLbitfield);102typedef void (GLAPIENTRY *glPushMatrixType)(void);103typedef void (GLAPIENTRY *glRasterPos2iType)(GLint x, GLint y);104typedef void (GLAPIENTRY *glReadBufferType)(GLenum mode);105typedef void (GLAPIENTRY *glReadPixelsType)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);106typedef void (GLAPIENTRY *glRectiType)(GLint x1, GLint y1, GLint x2, GLint y2);107typedef void (GLAPIENTRY *glScalefType)(GLfloat x, GLfloat y, GLfloat z);108typedef void (GLAPIENTRY *glScissorType)(GLint x, GLint y, GLsizei width, GLsizei height);109typedef void (GLAPIENTRY *glTexCoord2dType)(GLdouble s, GLdouble t);110typedef void (GLAPIENTRY *glTexCoord2fType)(GLfloat s, GLfloat t);111typedef void (GLAPIENTRY *glTexCoordPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);112typedef void (GLAPIENTRY *glTexEnviType)(GLenum target, GLenum pname, GLint param);113typedef void (GLAPIENTRY *glTexGeniType)(GLenum coord, GLenum pname, GLint param);114typedef void (GLAPIENTRY *glTexGendvType)(GLenum coord, GLenum pname, const GLdouble *params);115typedef void (GLAPIENTRY *glTexImage1DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);116typedef void (GLAPIENTRY *glTexImage2DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);117typedef void (GLAPIENTRY *glTexParameteriType)(GLenum target, GLenum pname, GLint param);118typedef void (GLAPIENTRY *glTexSubImage1DType)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);119typedef void (GLAPIENTRY *glTexSubImage2DType)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);120typedef void (GLAPIENTRY *glTranslatefType)(GLfloat x, GLfloat y, GLfloat z);121typedef void (GLAPIENTRY *glVertex2dType)(GLdouble x, GLdouble y);122typedef void (GLAPIENTRY *glVertex2fType)(GLfloat x, GLfloat y);123typedef void (GLAPIENTRY *glVertex2iType)(GLint x, GLint y);124typedef void (GLAPIENTRY *glVertexPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);125typedef void (GLAPIENTRY *glViewportType)(GLint x, GLint y, GLsizei width, GLsizei height);126127/**128* OpenGL 1.2 and extension function typedefs (functions that were added in129* the 1.2 spec and later need to be loaded on Windows as if they were130* extensions, which is why they are called out separately here)131*/132typedef void (GLAPIENTRY *glActiveTextureARBType)(GLenum texture);133typedef void (GLAPIENTRY *glMultiTexCoord2fARBType)(GLenum texture, GLfloat s, GLfloat t);134typedef void (GLAPIENTRY *glTexImage3DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);135136/**137* GL_EXT_framebuffer_object function typedefs138*/139typedef void (GLAPIENTRY *glBindRenderbufferEXTType)(GLenum, GLuint);140typedef void (GLAPIENTRY *glDeleteRenderbuffersEXTType)(GLsizei, const GLuint *);141typedef void (GLAPIENTRY *glGenRenderbuffersEXTType)(GLsizei, GLuint *);142typedef void (GLAPIENTRY *glRenderbufferStorageEXTType)(GLenum, GLenum, GLsizei, GLsizei);143typedef void (GLAPIENTRY *glBindFramebufferEXTType)(GLenum, GLuint);144typedef void (GLAPIENTRY *glDeleteFramebuffersEXTType)(GLsizei, const GLuint *);145typedef void (GLAPIENTRY *glGenFramebuffersEXTType)(GLsizei, GLuint *);146typedef GLenum (GLAPIENTRY *glCheckFramebufferStatusEXTType)(GLenum);147typedef void (GLAPIENTRY *glFramebufferTexture2DEXTType)(GLenum, GLenum, GLenum, GLuint, GLint);148typedef void (GLAPIENTRY *glFramebufferRenderbufferEXTType)(GLenum, GLenum, GLenum, GLuint);149150/**151* GL_ARB_fragment_shader extension function typedefs152*/153typedef GLhandleARB (GLAPIENTRY *glCreateShaderObjectARBType)(GLenum);154typedef void (GLAPIENTRY *glShaderSourceARBType)(GLhandleARB, GLsizei, const GLcharARB* *, const GLint *);155typedef void (GLAPIENTRY *glCompileShaderARBType)(GLhandleARB);156typedef void (GLAPIENTRY *glUseProgramObjectARBType)(GLhandleARB);157typedef void (GLAPIENTRY *glUniform1iARBType)(GLint, GLint);158typedef void (GLAPIENTRY *glUniform1fARBType)(GLint, GLfloat);159typedef void (GLAPIENTRY *glUniform1fvARBType)(GLint, GLsizei, const GLfloat *);160typedef void (GLAPIENTRY *glUniform2fARBType)(GLint, GLfloat, GLfloat);161typedef void (GLAPIENTRY *glUniform3fARBType)(GLint, GLfloat, GLfloat, GLfloat);162typedef void (GLAPIENTRY *glUniform3fvARBType)(GLint, GLsizei, const GLfloat *);163typedef void (GLAPIENTRY *glUniform4fARBType)(GLint, GLfloat, GLfloat, GLfloat, GLfloat);164typedef void (GLAPIENTRY *glUniform4fvARBType)(GLint, GLsizei, const GLfloat *);165typedef GLint (GLAPIENTRY *glGetUniformLocationARBType)(GLhandleARB, const GLcharARB *);166typedef void (GLAPIENTRY *glGetInfoLogARBType)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *);167typedef void (GLAPIENTRY *glGetProgramivARBType)(GLenum, GLenum, GLint *);168typedef void (GLAPIENTRY *glGetObjectParameterivARBType)(GLhandleARB, GLenum, GLint *);169typedef GLhandleARB (GLAPIENTRY *glCreateProgramObjectARBType)(void);170typedef void (GLAPIENTRY *glAttachObjectARBType)(GLhandleARB, GLhandleARB);171typedef void (GLAPIENTRY *glLinkProgramARBType)(GLhandleARB);172typedef void (GLAPIENTRY *glDeleteObjectARBType)(GLhandleARB);173174/**175* GL_NV_texture_barrier extension function typedef's176*/177typedef void (GLAPIENTRY *glTextureBarrierNVType) (void);178179/**180* REMIND: this caused an internal error in the MS compiler!?!?181*182*#define OGL_CHECK_FUNC_ERR(f) \183* J2dTrace1(J2D_TRACE_ERROR, "could not load function: %s", #f)184*/185186#define OGL_CHECK_FUNC_ERR(f) \187J2dRlsTraceLn(J2D_TRACE_ERROR, #f)188189#define OGL_INIT_FUNC(f) \190OGL_J2D_MANGLE(f) = (OGL_FUNC_TYPE(f)) OGL_GET_PROC_ADDRESS(f)191192#define OGL_INIT_AND_CHECK_FUNC(f) \193OGL_INIT_FUNC(f); \194if (OGL_J2D_MANGLE(f) == NULL) { \195OGL_CHECK_FUNC_ERR(f); \196return JNI_FALSE; \197}198199#define OGL_INIT_EXT_FUNC(f) \200OGL_J2D_MANGLE(f) = (OGL_FUNC_TYPE(f)) OGL_GET_EXT_PROC_ADDRESS(f)201202#define OGL_INIT_AND_CHECK_EXT_FUNC(f) \203OGL_INIT_EXT_FUNC(f); \204if (OGL_J2D_MANGLE(f) == NULL) { \205OGL_CHECK_FUNC_ERR(f); \206return JNI_FALSE; \207}208209#define OGL_EXPRESS_BASE_FUNCS(action) \210OGL_##action##_FUNC(glAlphaFunc); \211OGL_##action##_FUNC(glAreTexturesResident); \212OGL_##action##_FUNC(glBegin); \213OGL_##action##_FUNC(glBindTexture); \214OGL_##action##_FUNC(glBitmap); \215OGL_##action##_FUNC(glBlendFunc); \216OGL_##action##_FUNC(glClear); \217OGL_##action##_FUNC(glClearColor); \218OGL_##action##_FUNC(glClearDepth); \219OGL_##action##_FUNC(glColor3ub); \220OGL_##action##_FUNC(glColor4f); \221OGL_##action##_FUNC(glColor4ub); \222OGL_##action##_FUNC(glColorMask); \223OGL_##action##_FUNC(glColorPointer); \224OGL_##action##_FUNC(glCopyPixels); \225OGL_##action##_FUNC(glCopyTexSubImage2D); \226OGL_##action##_FUNC(glDeleteTextures); \227OGL_##action##_FUNC(glDepthFunc); \228OGL_##action##_FUNC(glDisable); \229OGL_##action##_FUNC(glDisableClientState); \230OGL_##action##_FUNC(glDrawArrays); \231OGL_##action##_FUNC(glDrawBuffer); \232OGL_##action##_FUNC(glDrawPixels); \233OGL_##action##_FUNC(glEnable); \234OGL_##action##_FUNC(glEnableClientState); \235OGL_##action##_FUNC(glEnd); \236OGL_##action##_FUNC(glFinish); \237OGL_##action##_FUNC(glFlush); \238OGL_##action##_FUNC(glGenTextures); \239OGL_##action##_FUNC(glGetBooleanv); \240OGL_##action##_FUNC(glGetDoublev); \241OGL_##action##_FUNC(glGetError); \242OGL_##action##_FUNC(glGetFloatv); \243OGL_##action##_FUNC(glGetIntegerv); \244OGL_##action##_FUNC(glGetString); \245OGL_##action##_FUNC(glGetTexLevelParameteriv); \246OGL_##action##_FUNC(glHint); \247OGL_##action##_FUNC(glInterleavedArrays); \248OGL_##action##_FUNC(glIsEnabled); \249OGL_##action##_FUNC(glIsTexture); \250OGL_##action##_FUNC(glLoadIdentity); \251OGL_##action##_FUNC(glLoadMatrixd); \252OGL_##action##_FUNC(glLogicOp); \253OGL_##action##_FUNC(glMatrixMode); \254OGL_##action##_FUNC(glOrtho); \255OGL_##action##_FUNC(glPixelStorei); \256OGL_##action##_FUNC(glPixelTransferf); \257OGL_##action##_FUNC(glPixelZoom); \258OGL_##action##_FUNC(glPolygonOffset); \259OGL_##action##_FUNC(glPopAttrib); \260OGL_##action##_FUNC(glPopClientAttrib); \261OGL_##action##_FUNC(glPopMatrix); \262OGL_##action##_FUNC(glPrioritizeTextures); \263OGL_##action##_FUNC(glPushAttrib); \264OGL_##action##_FUNC(glPushClientAttrib); \265OGL_##action##_FUNC(glPushMatrix); \266OGL_##action##_FUNC(glRasterPos2i); \267OGL_##action##_FUNC(glReadBuffer); \268OGL_##action##_FUNC(glReadPixels); \269OGL_##action##_FUNC(glRecti); \270OGL_##action##_FUNC(glScalef); \271OGL_##action##_FUNC(glScissor); \272OGL_##action##_FUNC(glTexCoord2d); \273OGL_##action##_FUNC(glTexCoord2f); \274OGL_##action##_FUNC(glTexCoordPointer); \275OGL_##action##_FUNC(glTexEnvi); \276OGL_##action##_FUNC(glTexGeni); \277OGL_##action##_FUNC(glTexGendv); \278OGL_##action##_FUNC(glTexImage1D); \279OGL_##action##_FUNC(glTexImage2D); \280OGL_##action##_FUNC(glTexParameteri); \281OGL_##action##_FUNC(glTexSubImage1D); \282OGL_##action##_FUNC(glTexSubImage2D); \283OGL_##action##_FUNC(glTranslatef); \284OGL_##action##_FUNC(glVertex2d); \285OGL_##action##_FUNC(glVertex2f); \286OGL_##action##_FUNC(glVertex2i); \287OGL_##action##_FUNC(glVertexPointer); \288OGL_##action##_FUNC(glViewport);289290#define OGL_EXPRESS_EXT_FUNCS(action) \291OGL_##action##_EXT_FUNC(glActiveTextureARB); \292OGL_##action##_EXT_FUNC(glMultiTexCoord2fARB); \293OGL_##action##_EXT_FUNC(glTexImage3D); \294OGL_##action##_EXT_FUNC(glBindRenderbufferEXT); \295OGL_##action##_EXT_FUNC(glDeleteRenderbuffersEXT); \296OGL_##action##_EXT_FUNC(glGenRenderbuffersEXT); \297OGL_##action##_EXT_FUNC(glRenderbufferStorageEXT); \298OGL_##action##_EXT_FUNC(glBindFramebufferEXT); \299OGL_##action##_EXT_FUNC(glDeleteFramebuffersEXT); \300OGL_##action##_EXT_FUNC(glGenFramebuffersEXT); \301OGL_##action##_EXT_FUNC(glCheckFramebufferStatusEXT); \302OGL_##action##_EXT_FUNC(glFramebufferTexture2DEXT); \303OGL_##action##_EXT_FUNC(glFramebufferRenderbufferEXT); \304OGL_##action##_EXT_FUNC(glCreateProgramObjectARB); \305OGL_##action##_EXT_FUNC(glAttachObjectARB); \306OGL_##action##_EXT_FUNC(glLinkProgramARB); \307OGL_##action##_EXT_FUNC(glCreateShaderObjectARB); \308OGL_##action##_EXT_FUNC(glShaderSourceARB); \309OGL_##action##_EXT_FUNC(glCompileShaderARB); \310OGL_##action##_EXT_FUNC(glUseProgramObjectARB); \311OGL_##action##_EXT_FUNC(glUniform1iARB); \312OGL_##action##_EXT_FUNC(glUniform1fARB); \313OGL_##action##_EXT_FUNC(glUniform1fvARB); \314OGL_##action##_EXT_FUNC(glUniform2fARB); \315OGL_##action##_EXT_FUNC(glUniform3fARB); \316OGL_##action##_EXT_FUNC(glUniform3fvARB); \317OGL_##action##_EXT_FUNC(glUniform4fARB); \318OGL_##action##_EXT_FUNC(glUniform4fvARB); \319OGL_##action##_EXT_FUNC(glGetUniformLocationARB); \320OGL_##action##_EXT_FUNC(glGetProgramivARB); \321OGL_##action##_EXT_FUNC(glGetInfoLogARB); \322OGL_##action##_EXT_FUNC(glGetObjectParameterivARB); \323OGL_##action##_EXT_FUNC(glDeleteObjectARB); \324OGL_##action##_EXT_FUNC(glTextureBarrierNV);325326#define OGL_EXPRESS_ALL_FUNCS(action) \327OGL_EXPRESS_BASE_FUNCS(action) \328OGL_EXPRESS_EXT_FUNCS(action) \329OGL_EXPRESS_PLATFORM_FUNCS(action) \330OGL_EXPRESS_PLATFORM_EXT_FUNCS(action)331332OGL_EXPRESS_ALL_FUNCS(EXTERN)333334#endif /* OGLFuncs_h_Included */335336337