]> git.cworth.org Git - apitrace/blobdiff - retrace/glstate.cpp
cli: use $LIB to handle multilib automagically on glibc
[apitrace] / retrace / glstate.cpp
index a07b7f6a528d481aacfe580909e1d3dcbff468a8..8c1bec9f55cd772e98fc8df3624836f482477717 100644 (file)
@@ -77,17 +77,22 @@ Context::Context(void) {
             glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
             for (GLint i = 0; i < num_extensions; ++i) {
                const char *extension = (const char *)glGetStringi(GL_EXTENSIONS, i);
-               if (extension &&
-                   strcmp(extension, "ARB_sampler_objects")) {
-                   ARB_sampler_objects = true;
+               if (extension) {
+                   if (strcmp(extension, "GL_ARB_sampler_objects") == 0) {
+                       ARB_sampler_objects = true;
+                   } else if (strcmp(extension, "GL_KHR_debug") == 0) {
+                       KHR_debug = true;
+                   }
                }
             }
         } else {
             const char *extensions = (const char *)glGetString(GL_EXTENSIONS);
-            if (glws::checkExtension("ARB_sampler_objects", extensions)) {
-                ARB_sampler_objects = true;
-            }
+            ARB_sampler_objects = glws::checkExtension("GL_ARB_sampler_objects", extensions);
+            KHR_debug = glws::checkExtension("GL_KHR_debug", extensions);
         }
+    } else {
+        const char *extensions = (const char *)glGetString(GL_EXTENSIONS);
+        KHR_debug = glws::checkExtension("GL_KHR_debug", extensions);
     }
 }
 
@@ -147,6 +152,39 @@ Context::restorePixelPackState(void) {
 }
 
 
+/**
+ * Dump a GL_KHR_debug object label.
+ */
+void
+dumpObjectLabel(JSONWriter &json, Context &context, GLenum identifier, GLuint name, const char *member)
+{
+    if (!name) {
+        return;
+    }
+
+    if (!context.KHR_debug) {
+        return;
+    }
+
+    GLsizei length = 0;
+    glGetObjectLabel(identifier, name, 0, &length, NULL);
+    if (!length) {
+        return;
+    }
+
+    char *label = (char *)malloc(length + 1);
+    if (!label) {
+        return;
+    }
+
+    glGetObjectLabel(identifier, name, length + 1, NULL, label);
+
+    json.writeStringMember(member, label);
+
+    free(label);
+}
+
+
 static const GLenum bindings[] = {
     GL_DRAW_BUFFER,
     GL_READ_BUFFER,