00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef OPENGLEXTENSIONS_H
00022 #define OPENGLEXTENSIONS_H
00023
00024 #if defined(_MSC_VER)
00025 #include <windows.h>
00026 #endif
00027
00028
00029
00030
00031
00032 #define GL_GLEXT_PROTOTYPES 1
00033 #define GLX_GLXEXT_PROTOTYPES 1
00034
00035 #if defined(__APPLE__) && !defined (VMDMESA)
00036 #include <OpenGL/gl.h>
00037 #include <OpenGL/glu.h>
00038 #else
00039 #include <GL/gl.h>
00040 #include <GL/glu.h>
00041 #endif
00042
00043
00044
00045
00046 #if (defined(__linux) || defined(_MSC_VER)) && !defined(VMDMESA)
00047 #include <GL/glext.h>
00048 #endif
00049 #if defined(__APPLE__) && !defined(VMDMESA)
00050 #include <OpenGL/glext.h>
00051 #endif
00052
00053
00054 #ifndef APIENTRY
00055 #define APIENTRY
00056 #endif
00057 #ifndef GLAPI
00058 #define GLAPI extern
00059 #endif
00060
00061
00062 #if 1 && defined(GL_ARB_shader_objects)
00063 #define VMDUSEOPENGLSHADER 1
00064 #endif
00065
00066
00067 typedef void (APIENTRY *VMDGLXextFuncPtr)(void);
00068
00069
00070
00071
00072
00073 #if defined(_MSC_VER) || defined(__APPLE__) || defined(__irix) || (!defined(ARCH_SOLARIS2) && !defined(ARCH_SOLARIS2_64))
00074
00075 #define VMDUSEGETPROCADDRESS 1
00076 #define GLLOCKARRAYSEXT ext->p_glLockArraysEXT
00077 #define GLUNLOCKARRAYSEXT ext->p_glUnlockArraysEXT
00078 #define GLMULTIDRAWELEMENTSEXT ext->p_glMultiDrawElementsEXT
00079 #define GLPOINTPARAMETERFARB ext->p_glPointParameterfARB
00080 #define GLPOINTPARAMETERFVARB ext->p_glPointParameterfvARB
00081
00082
00083 #define GLCREATESHADEROBJECTARB ext->p_glCreateShaderObjectARB
00084 #define GLCREATEPROGRAMOBJECTARB ext->p_glCreateProgramObjectARB
00085 #define GLUSEPROGRAMOBJECTARB ext->p_glUseProgramObjectARB
00086 #define GLDETACHOBJECTARB ext->p_glDetachObjectARB
00087 #define GLGETINFOLOGARB ext->p_glGetInfoLogARB
00088 #define GLGETOBJECTPARAMETERIVARB ext->p_glGetObjectParameterivARB
00089 #define GLLINKPROGRAMARB ext->p_glLinkProgramARB
00090 #define GLDELETEOBJECTARB ext->p_glDeleteObjectARB
00091 #define GLATTACHOBJECTARB ext->p_glAttachObjectARB
00092 #define GLCOMPILESHADERARB ext->p_glCompileShaderARB
00093 #define GLSHADERSOURCEARB ext->p_glShaderSourceARB
00094 #define GLGETUNIFORMLOCATIONARB ext->p_glGetUniformLocationARB
00095 #define GLUNIFORM1IARB ext->p_glUniform1iARB
00096 #define GLUNIFORM1FVARB ext->p_glUniform1fvARB
00097 #define GLUNIFORM2FVARB ext->p_glUniform2fvARB
00098 #define GLUNIFORM3FVARB ext->p_glUniform3fvARB
00099 #define GLUNIFORM4FVARB ext->p_glUniform4fvARB
00100
00101 #else
00102
00103 #define GLLOCKARRAYSEXT glLockArraysEXT
00104 #define GLUNLOCKARRAYSEXT glUnlockArraysEXT
00105 #define GLMULTIDRAWELEMENTSEXT glMultiDrawElementsEXT
00106 #define GLPOINTPARAMETERFARB glPointParameterfARB
00107 #define GLPOINTPARAMETERFVARB glPointParameterfvARB
00108
00109
00110 #define GLCREATESHADEROBJECTARB glCreateShaderObjectARB
00111 #define GLCREATEPROGRAMOBJECTARB glCreateProgramObjectARB
00112 #define GLUSEPROGRAMOBJECTARB glUseProgramObjectARB
00113 #define GLDETACHOBJECTARB glDetachObjectARB
00114 #define GLGETINFOLOGARB glGetInfoLogARB
00115 #define GLGETOBJECTPARAMETERIVARB glGetObjectParameterivARB
00116 #define GLLINKPROGRAMARB glLinkProgramARB
00117 #define GLDELETEOBJECTARB glDeleteObjectARB
00118 #define GLATTACHOBJECTARB glAttachObjectARB
00119 #define GLCOMPILESHADERARB glCompileShaderARB
00120 #define GLSHADERSOURCEARB glShaderSourceARB
00121 #define GLGETUNIFORMLOCATIONARB glGetUniformLocationARB
00122 #define GLUNIFORM1IARB glUniform1iARB
00123 #define GLUNIFORM1FVARB glUniform1fvARB
00124 #define GLUNIFORM2FVARB glUniform2fvARB
00125 #define GLUNIFORM3FVARB glUniform3fvARB
00126 #define GLUNIFORM4FVARB glUniform4fvARB
00127
00128 #endif
00129
00130
00131
00132
00133 #if defined(VMDUSEGETPROCADDRESS) && !defined(__linux) && !defined(__APPLE__)
00134 #define GLTEXIMAGE3D ext->p_glTexImage3D
00135 #else
00136 #define GLTEXIMAGE3D glTexImage3D
00137 #endif
00138
00139
00142 class OpenGLExtensions {
00143 public:
00144
00145 int hasstereo;
00146 int stereodrawforced;
00147 int hasmultisample;
00148 int nummultisamples;
00149 int hasstencilbuffer;
00150 int hastex2d;
00151 int hastex3d;
00152 int hasmultidrawext;
00153 int hascompiledvertexarrayext;
00154 int hasrescalenormalext;
00155 GLint multitextureunits;
00156 int hasglarbtexnonpoweroftwo;
00157 int hasglpointparametersext;
00158 int hasglpointspritearb;
00159 int hasglshadinglangarb;
00160 int hasglshaderobjectsarb;
00161 int hasglvertexshaderarb;
00162 int hasglfragmentshaderarb;
00163 int hasglgeometryshader4arb;
00164 int hasglsampleshadingarb;
00165
00166
00167 void (APIENTRY *p_glLockArraysEXT)(GLint, GLsizei);
00168 void (APIENTRY *p_glUnlockArraysEXT)(void);
00169 void (APIENTRY *p_glMultiDrawElementsEXT)(GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
00170 void (APIENTRY *p_glGlobalAlphaFactorfSUN)(GLfloat);
00171 void (APIENTRY *p_glPointParameterfARB)(GLenum, GLfloat);
00172 void (APIENTRY *p_glPointParameterfvARB)(GLenum, const GLfloat *);
00173 void (APIENTRY *p_glTexImage3D)(GLenum, GLint, GLint,
00174 GLsizei, GLsizei, GLsizei, GLint,
00175 GLenum, GLenum, const GLvoid *);
00176
00177
00178
00179
00180
00181 #if defined(GL_ARB_shader_objects)
00182
00183 GLhandleARB (APIENTRY *p_glCreateShaderObjectARB)(GLenum shaderType);
00184 GLhandleARB (APIENTRY *p_glCreateProgramObjectARB)(void);
00185 void (APIENTRY *p_glUseProgramObjectARB)(GLhandleARB programObj);
00186 void (APIENTRY *p_glDetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj);
00187 void (APIENTRY *p_glGetInfoLogARB)(GLhandleARB obj,GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
00188 void (APIENTRY *p_glGetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint *params);
00189 void (APIENTRY *p_glLinkProgramARB)(GLhandleARB programObj);
00190 void (APIENTRY *p_glDeleteObjectARB)(GLhandleARB obj);
00191 void (APIENTRY *p_glAttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj);
00192 void (APIENTRY *p_glCompileShaderARB)(GLhandleARB shaderObj);
00193 void (APIENTRY *p_glShaderSourceARB)(GLhandleARB shaderObj, GLsizei count, const GLcharARB **strings, const GLint *length);
00194 GLint (APIENTRY *p_glGetUniformLocationARB)(GLhandleARB programObject, const GLcharARB *name);
00195 void (APIENTRY *p_glUniform1iARB)(GLint location, GLint v0);
00196 void (APIENTRY *p_glUniform1fvARB)(GLint location, GLsizei count, GLfloat *value);
00197 void (APIENTRY *p_glUniform2fvARB)(GLint location, GLsizei count, GLfloat *value);
00198 void (APIENTRY *p_glUniform3fvARB)(GLint location, GLsizei count, GLfloat *value);
00199 void (APIENTRY *p_glUniform4fvARB)(GLint location, GLsizei count, GLfloat *value);
00200 #endif
00201
00202 enum rendenum { ATI, NVIDIA, MSOFTGDI, MESAGL, WIREGL, GENERIC };
00203
00204
00205 int oglmajor;
00206 int oglminor;
00207 int oglrelease;
00208 rendenum oglrenderer;
00209
00210 public:
00211 OpenGLExtensions(void);
00212 virtual ~OpenGLExtensions(void);
00213 void find_renderer(void);
00214 void find_extensions(void);
00215 int vmdQueryExtension(const char *extname);
00216 void vmdQueryGLVersion(int *major, int *minor, int *release);
00217 VMDGLXextFuncPtr vmdGetProcAddress(const char *);
00218 void PrintExtensions(void);
00219 };
00220
00221 #endif
00222