From: José Fonseca <jfonseca@vmware.com>
Date: Thu, 12 May 2011 16:21:34 +0000 (+0100)
Subject: Dump shader objects too.
X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=d2fa66f9a906d5f1414d8392b731ff364aa8a8b1;p=apitrace

Dump shader objects too.
---

diff --git a/glstate.py b/glstate.py
index 34405a5..68437c1 100644
--- a/glstate.py
+++ b/glstate.py
@@ -315,6 +315,37 @@ writeShader(JSONWriter &json, GLuint shader)
     delete [] source;
 }
 
+static void
+writeShaderObj(JSONWriter &json, GLhandleARB shaderObj)
+{
+    if (!shaderObj) {
+        return;
+    }
+
+    GLint shader_type = 0;
+    glGetObjectParameterivARB(shaderObj, GL_OBJECT_TYPE_ARB, &shader_type);
+    if (!shader_type) {
+        return;
+    }
+
+    GLint source_length = 0;
+    glGetObjectParameterivARB(shaderObj, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &source_length);
+    if (!source_length) {
+        return;
+    }
+
+    GLcharARB *source = new GLcharARB[source_length];
+    GLsizei length = 0;
+    source[0] = 0;
+    glGetShaderSource(shaderObj, source_length, &length, source);
+
+    json.beginMember(enum_string(shader_type));
+    json.writeString(source);
+    json.endMember();
+
+    delete [] source;
+}
+
 static inline void
 writeCurrentProgram(JSONWriter &json)
 {
@@ -339,6 +370,29 @@ writeCurrentProgram(JSONWriter &json)
     delete [] shaders;
 }
 
+static inline void
+writeCurrentProgramObj(JSONWriter &json)
+{
+    GLhandleARB programObj = glGetHandleARB(GL_PROGRAM_OBJECT_ARB);
+    if (!programObj) {
+        return;
+    }
+
+    GLint attached_shaders = 0;
+    glGetProgramivARB(programObj, GL_OBJECT_ATTACHED_OBJECTS_ARB, &attached_shaders);
+    if (!attached_shaders) {
+        return;
+    }
+
+    GLhandleARB *shaderObjs = new GLhandleARB[attached_shaders];
+    GLsizei count = 0;
+    glGetAttachedObjectsARB(programObj, attached_shaders, &count, shaderObjs);
+    for (GLsizei i = 0; i < count; ++ i) {
+       writeShaderObj(json, shaderObjs[i]);
+    }
+    delete [] shaderObjs;
+}
+
 static inline void
 writeArbProgram(JSONWriter &json, GLenum target)
 {