Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

OpenGLExtensions.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *cr                                                                       
00003  *cr            (C) Copyright 1995-2011 The Board of Trustees of the           
00004  *cr                        University of Illinois                       
00005  *cr                         All Rights Reserved                        
00006  *cr                                                                   
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  * RCS INFORMATION:
00011  *
00012  *      $RCSfile: OpenGLExtensions.h,v $
00013  *      $Author: johns $        $Locker:  $             $State: Exp $
00014  *      $Revision: 1.49 $       $Date: 2011/06/04 03:44:54 $
00015  *
00016  ***************************************************************************
00017  * DESCRIPTION:
00018  *   Class to store and handle enumeration and initialization of OpenGL 
00019  *   extensions and features.
00020  ***************************************************************************/
00021 #ifndef OPENGLEXTENSIONS_H
00022 #define OPENGLEXTENSIONS_H
00023 
00024 #if defined(_MSC_VER)
00025 #include <windows.h>
00026 #endif
00027 
00028 // The Linux OpenGL ABI 1.0 spec requires that we define
00029 // GL_GLEXT_PROTOTYPES before including gl.h or glx.h for extensions
00030 // in order to get prototypes:
00031 //   http://oss.sgi.com/projects/ogl-sample/ABI/index.html
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 // NOTE: you may have to get copies of the latest OpenGL extension headers
00044 // from the OpenGL web site if your Linux machine lacks them:
00045 //   http://oss.sgi.com/projects/ogl-sample/registry/
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 // required for Win32 calling conventions to work correctly
00054 #ifndef APIENTRY
00055 #define APIENTRY
00056 #endif
00057 #ifndef GLAPI
00058 #define GLAPI extern
00059 #endif
00060 
00061 // XXX enable OpenGL Shading Language support if it is available in the headers
00062 #if 1 && defined(GL_ARB_shader_objects)
00063 #define VMDUSEOPENGLSHADER 1
00064 #endif
00065 
00066 // prevent vendor-specific header file clashes
00067 typedef void (APIENTRY *VMDGLXextFuncPtr)(void);
00068 
00069 // XXX Newer OpenGL extensions cause problems on Linux/Windows/Mac because
00070 //     they don't gaurantee runtime linkage, even for ARB extensions.
00071 //     To use them, we must look them up at runtime with vmdProcAddress()
00072 //      which wraps display- and system-dependent methods for doing so.
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 // OpenGL Shader Functions
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 // OpenGL Shader Functions
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 // special case Linux and MacOS X as platforms that fail to use glProcAddress()
00132 // on core functions like glTexImage3D().
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   // OpenGL buffers, extensions, and bonus features found on this display 
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   // OpenGL function pointers
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 // Only enable OpenGL Shader code when we find exensions in the headers
00180 //
00181 #if defined(GL_ARB_shader_objects)
00182   // OpenGL Shader Function Pointers
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   // OpenGL Renderer version information
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 

Generated on Sat May 26 01:48:15 2012 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002