]> git.cworth.org Git - apitrace/commitdiff
Show shader type in the combo box.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Wed, 13 Apr 2011 09:37:13 +0000 (10:37 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Wed, 13 Apr 2011 09:37:48 +0000 (10:37 +0100)
glstate.py
gui/apitracecall.cpp
gui/apitracecall.h
gui/mainwindow.cpp
gui/shaderssourcewidget.cpp
gui/shaderssourcewidget.h

index 9f683933223a1682392eb232af9540cfcf05ea8c..e142f6bef73dfc72e750ce7b3c8e4d95ea6cd867 100644 (file)
@@ -3009,48 +3009,79 @@ class StateDumper:
         print '#include "glretrace.hpp"'
         print
 
-        print 'static void'
-        print 'writeEnum(JSONWriter &json, GLenum pname)'
+        print 'static const char *'
+        print '_enum_string(GLenum pname)'
         print '{'
         print '    switch(pname) {'
         for name in GLenum.values:
             print '    case %s:' % name
-            print '        json.writeString("%s");' % name
-            print '        break;'
+            print '        return "%s";' % name
         print '    default:'
-        print '        json.writeNumber(pname);'
+        print '        return NULL;'
         print '    }'
         print '}'
         print
 
-        # shaders
-        print 'static void'
-        print 'writeShader(JSONWriter &json, GLuint shader)'
+        print 'static const char *'
+        print 'enum_string(GLenum pname)'
         print '{'
-        print '    if (!shader) {'
-        print '        json.writeNull();'
-        print '        return;'
+        print '    const char *s = _enum_string(pname);'
+        print '    if (s) {'
+        print '        return s;'
+        print '    } else {'
+        print '        static char buf[16];'
+        print '        snprintf(buf, sizeof buf, "0x%04x", pname);'
+        print '        return buf;'
         print '    }'
+        print '}'
         print
-        print '    json.beginObject();'
-        print '    GLint source_length = 0;'
-        print '    glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &source_length);'
-        print '    json.beginMember("source");'
-        print '    if (source_length) {'
-        print '        GLchar *source = new GLchar[source_length];'
-        print '        GLsizei length = 0;'
-        print '        source[0] = 0;'
-        print '        glGetShaderSource(shader, source_length, &length, source);'
-        print '        json.writeString(source);'
-        print '        delete [] source;'
+
+        print 'static inline void'
+        print 'writeEnum(JSONWriter &json, GLenum pname)'
+        print '{'
+        print '    const char *s = _enum_string(pname);'
+        print '    if (s) {'
+        print '        json.writeString(s);'
         print '    } else {'
-        print '        json.writeNull();'
+        print '        json.writeNumber(pname);'
         print '    }'
-        print '    json.endMember(); // source'
-        print '    json.endObject();'
         print '}'
         print
 
+        # shaders
+        print '''
+static void
+writeShader(JSONWriter &json, GLuint shader)
+{
+    if (!shader) {
+        return;
+    }
+
+    GLint shader_type = 0;
+    glGetShaderiv(shader, GL_SHADER_TYPE, &shader_type);
+    if (!shader_type) {
+        return;
+    }
+
+    GLint source_length = 0;
+    glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &source_length);
+    if (!source_length) {
+        return;
+    }
+
+    GLchar *source = new GLchar[source_length];
+    GLsizei length = 0;
+    source[0] = 0;
+    glGetShaderSource(shader, source_length, &length, source);
+
+    json.beginMember(enum_string(shader_type));
+    json.writeString(source);
+    json.endMember();
+
+    delete [] source;
+}
+'''
+
         # programs
         print 'static inline void'
         print 'writeProgram(JSONWriter &json, GLuint program)'
@@ -3064,7 +3095,7 @@ class StateDumper:
         print '    json.beginMember("attached_shaders");'
         print '    GLint attached_shaders = 0;'
         print '    glGetProgramiv(program, GL_ATTACHED_SHADERS, &attached_shaders);'
-        print '    json.beginArray();'
+        print '    json.beginObject();'
         print '    if (attached_shaders) {'
         print '        GLuint *shaders = new GLuint[attached_shaders];'
         print '        GLsizei count = 0;'
@@ -3074,7 +3105,7 @@ class StateDumper:
         print '        }'
         print '        delete [] shaders;'
         print '    }'
-        print '    json.endArray();'
+        print '    json.endObject();'
         print '    json.endMember();'
         print '    json.endObject();'
         print '}'
index fcc61cc7494c0c7e6736effb9f15fa047c76c1e5..871dfde7760b4ecf66668130419d254ff591c48c 100644 (file)
@@ -432,21 +432,21 @@ ApiTraceState::ApiTraceState(const QVariantMap &parsedJson)
     m_parameters = parsedJson[QLatin1String("parameters")].toMap();
     QVariantMap currentProgram =
         parsedJson[QLatin1String("current_program")].toMap();
-    QVariantList attachedShaders =
-        currentProgram[QLatin1String("attached_shaders")].toList();
+    QVariantMap attachedShaders =
+        currentProgram[QLatin1String("attached_shaders")].toMap();
+    QVariantMap::const_iterator itr;
 
 
-    for (int i = 0; i < attachedShaders.count(); ++i) {
-        QVariantMap var = attachedShaders[i].toMap();
-        m_shaderSources.append(
-            var[QLatin1String("source")].toString());
+    for (itr = attachedShaders.constBegin(); itr != attachedShaders.constEnd(); ++itr) {
+        QString type = itr.key();
+        QString source = itr.value().toString();
+        m_shaderSources[type] = source;
     }
 
     QVariantList textureUnits =
         parsedJson[QLatin1String("textures")].toList();
     for (int i = 0; i < textureUnits.count(); ++i) {
         QVariantMap unit = textureUnits[i].toMap();
-        QVariantMap::const_iterator itr;
         for (itr = unit.constBegin(); itr != unit.constEnd(); ++itr) {
             QVariantMap target = itr.value().toMap();
             if (target.count()) {
@@ -485,7 +485,6 @@ ApiTraceState::ApiTraceState(const QVariantMap &parsedJson)
 
     QVariantMap fbos =
         parsedJson[QLatin1String("framebuffer")].toMap();
-    QVariantMap::const_iterator itr;
     for (itr = fbos.constBegin(); itr != fbos.constEnd(); ++itr) {
         QVariantMap buffer = itr.value().toMap();
         QSize size(buffer[QLatin1String("__width__")].toInt(),
@@ -515,7 +514,7 @@ QVariantMap ApiTraceState::parameters() const
     return m_parameters;
 }
 
-QStringList ApiTraceState::shaderSources() const
+QMap<QString, QString> ApiTraceState::shaderSources() const
 {
     return m_shaderSources;
 }
index 975c3f6bfc9e51f21cd2cdcafec71ecc701d87f8..db5d38d3539bfecc1d0f0570d8bae8ac107e13ff 100644 (file)
@@ -110,13 +110,13 @@ public:
 
     bool isEmpty() const;
     QVariantMap parameters() const;
-    QStringList shaderSources() const;
+    QMap<QString, QString> shaderSources() const;
     QList<ApiTexture> textures() const;
     QList<ApiFramebuffer> framebuffers() const;
 
 private:
     QVariantMap m_parameters;
-    QStringList m_shaderSources;
+    QMap<QString, QString> m_shaderSources;
     QList<ApiTexture> m_textures;
     QList<ApiFramebuffer> m_framebuffers;
 };
index 8269bfdf786fc617a2b5a83b75bacc5acbc093f7..7c954d70b7bc84f06fec033749c8cbc8f0efad05 100644 (file)
@@ -343,7 +343,7 @@ void MainWindow::fillStateForFrame()
     }
     m_ui.stateTreeWidget->insertTopLevelItems(0, items);
 
-    QStringList shaderSources = state.shaderSources();
+    QMap<QString, QString> shaderSources = state.shaderSources();
     if (shaderSources.isEmpty()) {
         m_sourcesWidget->setShaders(shaderSources);
     } else {
index 5003dda11752d8bf435982cc854df39c7552007b..88ed1b6c137207180dce0108ae9a362b63acfc78 100644 (file)
@@ -11,11 +11,11 @@ ShadersSourceWidget::ShadersSourceWidget(QWidget *parent)
 
     m_ui.verticalLayout->addWidget(m_edit);
 
-    connect(m_ui.shadersCB, SIGNAL(currentIndexChanged(int)),
-            SLOT(changeShader(int)));
+    connect(m_ui.shadersCB, SIGNAL(currentIndexChanged(const QString &)),
+            SLOT(changeShader(const QString &)));
 }
 
-void ShadersSourceWidget::setShaders(const QStringList &sources)
+void ShadersSourceWidget::setShaders(const QMap<QString, QString> &sources)
 {
     m_sources = sources;
 
@@ -32,18 +32,16 @@ void ShadersSourceWidget::setShaders(const QStringList &sources)
     m_ui.shadersCB->setEnabled(true);
     m_edit->setEnabled(true);
 
-    for (int i = 0; i < m_sources.count(); ++i) {
-        QString source = m_sources[i];
-        m_ui.shadersCB->insertItem(
-            i,
-            tr("Shader %1").arg(i));
+    QMap<QString, QString>::const_iterator itr;
+    for (itr = m_sources.constBegin(); itr != m_sources.constEnd(); ++itr) {
+        m_ui.shadersCB->addItem(itr.key());
     }
     m_ui.shadersCB->setCurrentIndex(0);
 }
 
-void ShadersSourceWidget::changeShader(int idx)
+void ShadersSourceWidget::changeShader(const QString &key)
 {
-    m_edit->setPlainText(m_sources.value(idx));
+    m_edit->setPlainText(m_sources.value(key));
 }
 
 #include "shaderssourcewidget.moc"
index c4bc3eb39ad784d235b84750703cab28105ee4c3..9a5c322818402668a16c00a65cabd8b65c56f39f 100644 (file)
@@ -13,13 +13,13 @@ public:
     ShadersSourceWidget(QWidget *parent=0);
 
 public slots:
-    void setShaders(const QStringList &sources);
+    void setShaders(const QMap<QString, QString> &sources);
 
 private slots:
-    void changeShader(int idx);
+    void changeShader(const QString &key);
 private:
     Ui::ShadersSourceWidget m_ui;
-    QStringList m_sources;
+    QMap<QString, QString> m_sources;
     GLSLEdit *m_edit;
 };