Browse Source

Update glext to make more recent GL functionality available

rdb 10 years ago
parent
commit
62cefcab8b

+ 1 - 0
panda/src/glgsg/glgsg.h

@@ -84,6 +84,7 @@
   #include <GL/gl.h>
 #endif
 
+#undef __glext_h_
 #undef GL_GLEXT_VERSION
 #include "panda_glext.h"
 

+ 44 - 7
panda/src/glstuff/glGraphicsStateGuardian_src.cxx

@@ -546,19 +546,19 @@ reset() {
   _use_object_labels = false;
 #ifndef OPENGLES_1
   if (gl_debug) {
-    PFNGLDEBUGMESSAGECALLBACKPROC _glDebugMessageCallback;
+    PFNGLDEBUGMESSAGECALLBACKPROC_P _glDebugMessageCallback;
     PFNGLDEBUGMESSAGECONTROLPROC _glDebugMessageControl;
 
     if (is_at_least_gl_version(4, 3) || has_extension("GL_KHR_debug")) {
 #ifdef OPENGLES
-      _glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)
+      _glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC_P)
         get_extension_func("glDebugMessageCallbackKHR");
       _glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)
         get_extension_func("glDebugMessageControlKHR");
       _glObjectLabel = (PFNGLOBJECTLABELPROC)
         get_extension_func("glObjectLabelKHR");
 #else
-      _glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)
+      _glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC_P)
         get_extension_func("glDebugMessageCallback");
       _glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)
         get_extension_func("glDebugMessageControl");
@@ -571,7 +571,7 @@ reset() {
 
 #ifndef OPENGLES
     } else if (has_extension("GL_ARB_debug_output")) {
-      _glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)
+      _glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC_P)
         get_extension_func("glDebugMessageCallbackARB");
       _glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)
         get_extension_func("glDebugMessageControlARB");
@@ -591,7 +591,7 @@ reset() {
                              0, NULL, GLCAT.is_debug());
 
       // Enable the callback.
-      _glDebugMessageCallback((GLDEBUGPROC) &debug_callback, (void*)this);
+      _glDebugMessageCallback((GLDEBUGPROC_P) &debug_callback, (void*)this);
       if (gl_debug_synchronous) {
         glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
       }
@@ -1214,6 +1214,13 @@ reset() {
       get_extension_func("glBufferSubData");
     _glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)
       get_extension_func("glDeleteBuffers");
+
+#ifndef OPENGLES
+    _glMapBuffer = (PFNGLMAPBUFFERPROC)
+      get_extension_func("glMapBuffer");
+    _glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)
+      get_extension_func("glUnmapBuffer");
+#endif
   }
 #ifndef OPENGLES_1
   else if (has_extension("GL_ARB_vertex_buffer_object")) {
@@ -1229,6 +1236,10 @@ reset() {
       get_extension_func("glBufferSubDataARB");
     _glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)
       get_extension_func("glDeleteBuffersARB");
+    _glMapBuffer = (PFNGLMAPBUFFERPROC)
+      get_extension_func("glMapBufferARB");
+    _glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)
+      get_extension_func("glUnmapBufferARB");
   }
 #endif  // OPENGLES_1
 
@@ -1243,6 +1254,31 @@ reset() {
   }
 #endif
 
+#ifndef OPENGLES
+  // Check for various advanced buffer management features.
+  if (is_at_least_gl_version(3, 0) || has_extension("GL_ARB_map_buffer_range")) {
+    _glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)
+      get_extension_func("glMapBufferRange");
+  } else {
+    _glMapBufferRange = NULL;
+  }
+
+  if (is_at_least_gl_version(4, 4) || has_extension("GL_ARB_buffer_storage")) {
+    _glBufferStorage = (PFNGLBUFFERSTORAGEPROC)
+      get_extension_func("glBufferStorage");
+
+    if (_glBufferStorage != NULL) {
+      _supports_buffer_storage = true;
+    } else {
+      GLCAT.warning()
+        << "Buffer storage advertised as supported by OpenGL runtime, but "
+           "could not get pointers to extension function.\n";
+    }
+  } else {
+    _supports_buffer_storage = false;
+  }
+#endif
+
   _supports_vao = false;
 
   if (is_at_least_gl_version(3, 0) || has_extension("GL_ARB_vertex_array_object")) {
@@ -1557,11 +1593,12 @@ reset() {
        get_extension_func("glGetActiveUniformBlockiv");
     _glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)
        get_extension_func("glGetActiveUniformBlockName");
+
+    _glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)
+      get_extension_func("glBindBufferBase");
   } else {
     _supports_uniform_buffers = false;
   }
-#else
-  _supports_uniform_buffers = false;
 #endif
 
   // Check whether we support geometry instancing and instanced vertex attribs.

+ 14 - 3
panda/src/glstuff/glGraphicsStateGuardian_src.h

@@ -58,8 +58,8 @@ typedef double GLdouble;
 // declare these typedefs.
 #if !defined( __EDG__ ) || defined( __INTEL_COMPILER )  // Protect the following from the Tau instrumentor and expose it for the intel compiler.
 typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
-typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
-typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROC_P)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const GLvoid *userParam);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC_P) (GLDEBUGPROC_P callback, const void *userParam);
 typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
 typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
 typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
@@ -640,7 +640,6 @@ protected:
   GLint _max_image_units;
   bool _supports_multi_bind;
   bool _supports_get_program_binary;
-  bool _supports_uniform_buffers;
 
 #ifdef OPENGLES
   bool _supports_depth24;
@@ -734,6 +733,18 @@ public:
   PFNGLBUFFERSUBDATAPROC _glBufferSubData;
   PFNGLDELETEBUFFERSPROC _glDeleteBuffers;
 
+#ifndef OPENGLES
+  PFNGLMAPBUFFERPROC _glMapBuffer;
+  PFNGLUNMAPBUFFERPROC _glUnmapBuffer;
+  PFNGLMAPBUFFERRANGEPROC _glMapBufferRange;
+
+  bool _supports_uniform_buffers;
+  PFNGLBINDBUFFERBASEPROC _glBindBufferBase;
+
+  bool _supports_buffer_storage;
+  PFNGLBUFFERSTORAGEPROC _glBufferStorage;
+#endif
+
   PFNGLBLENDEQUATIONPROC _glBlendEquation;
   PFNGLBLENDCOLORPROC _glBlendColor;
 

File diff suppressed because it is too large
+ 5765 - 10241
panda/src/glstuff/panda_glext.h


Some files were not shown because too many files changed in this diff