From 04b4b52f90a047630ab009e576aa490fe8d0468e Mon Sep 17 00:00:00 2001
From: =?utf8?q?Jos=C3=A9=20Fonseca?= <jose.r.fonseca@gmail.com>
Date: Wed, 13 Apr 2011 11:12:20 +0100
Subject: [PATCH] Dump ARB fragment/vertex programs too.

---
 glenum.py  |  2 +-
 glstate.py | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/glenum.py b/glenum.py
index 72e85b1..4a40b74 100644
--- a/glenum.py
+++ b/glenum.py
@@ -1250,7 +1250,7 @@ GLenum = Enum("GLenum", [
     "GL_SLICE_ACCUM_SUN",                # 0x85CC
     "GL_QUAD_MESH_SUN",                  # 0x8614
     "GL_TRIANGLE_MESH_SUN",              # 0x8615
-    "GL_VERTEX_PROGRAM_NV",              # 0x8620
+    "GL_VERTEX_PROGRAM_ARB",             # 0x8620
     "GL_VERTEX_STATE_PROGRAM_NV",        # 0x8621
     "GL_VERTEX_ATTRIB_ARRAY_ENABLED",    # 0x8622
     "GL_VERTEX_ATTRIB_ARRAY_SIZE",       # 0x8623
diff --git a/glstate.py b/glstate.py
index 7bd658b..27860b4 100644
--- a/glstate.py
+++ b/glstate.py
@@ -3104,6 +3104,31 @@ writeCurrentProgram(JSONWriter &json)
     }
     delete [] shaders;
 }
+
+static inline void
+writeArbProgram(JSONWriter &json, GLenum target)
+{
+    if (!glIsEnabled(target)) {
+        return;
+    }
+
+    GLint program_length = 0;
+    glGetProgramivARB(target, GL_PROGRAM_LENGTH_ARB, &program_length);
+    if (!program_length) {
+        return;
+    }
+
+    GLchar *source = new GLchar[program_length + 1];
+    source[0] = 0;
+    glGetProgramStringARB(target, GL_PROGRAM_STRING_ARB, source);
+    source[program_length] = 0;
+
+    json.beginMember(enum_string(target));
+    json.writeString(source);
+    json.endMember();
+
+    delete [] source;
+}
 '''
 
         # texture image
@@ -3314,6 +3339,8 @@ writeDrawBufferImage(JSONWriter &json, GLenum format)
         print '    json.beginMember("shaders");'
         print '    json.beginObject();'
         print '    writeCurrentProgram(json);'
+        print '    writeArbProgram(json, GL_FRAGMENT_PROGRAM_ARB);'
+        print '    writeArbProgram(json, GL_VERTEX_PROGRAM_ARB);'
         print '    json.endObject();'
         print '    json.endMember(); //shaders'
         print
-- 
2.45.2