From f0116c4c08ebb2fe1620f9446b7318d33efe83c9 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 1 Jun 2017 15:22:22 +0100 Subject: [PATCH] Remap topology diagrams to Base/Text palette colours instead of b/w --- .../D3D11PipelineStateViewer.cpp | 22 +------ .../D3D12PipelineStateViewer.cpp | 22 +------ .../PipelineState/GLPipelineStateViewer.cpp | 24 +------ .../PipelineState/PipelineStateViewer.cpp | 64 ++++++++++++++++++- .../PipelineState/PipelineStateViewer.h | 3 + .../VulkanPipelineStateViewer.cpp | 24 +------ 6 files changed, 72 insertions(+), 87 deletions(-) diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index 7a257e2bb..a6a3d6847 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -1307,27 +1307,7 @@ void D3D11PipelineStateViewer::setState() ui->topology->setText(ToQStr(topo)); } - switch(topo) - { - case Topology::PointList: ui->topologyDiagram->setPixmap(Pixmaps::topo_pointlist()); break; - case Topology::LineList: ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist()); break; - case Topology::LineStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip()); break; - case Topology::TriangleList: ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist()); break; - case Topology::TriangleStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip()); break; - case Topology::LineList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist_adj()); - break; - case Topology::LineStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip_adj()); - break; - case Topology::TriangleList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist_adj()); - break; - case Topology::TriangleStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip_adj()); - break; - default: ui->topologyDiagram->setPixmap(Pixmaps::topo_patch()); break; - } + m_Common.setTopologyDiagram(ui->topologyDiagram, topo); bool ibufferUsed = draw && (draw->flags & DrawFlags::UseIBuffer); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index 804a20028..33e1191f7 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -1336,27 +1336,7 @@ void D3D12PipelineStateViewer::setState() ui->topology->setText(ToQStr(topo)); } - switch(topo) - { - case Topology::PointList: ui->topologyDiagram->setPixmap(Pixmaps::topo_pointlist()); break; - case Topology::LineList: ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist()); break; - case Topology::LineStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip()); break; - case Topology::TriangleList: ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist()); break; - case Topology::TriangleStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip()); break; - case Topology::LineList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist_adj()); - break; - case Topology::LineStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip_adj()); - break; - case Topology::TriangleList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist_adj()); - break; - case Topology::TriangleStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip_adj()); - break; - default: ui->topologyDiagram->setPixmap(Pixmaps::topo_patch()); break; - } + m_Common.setTopologyDiagram(ui->topologyDiagram, topo); bool ibufferUsed = draw && (draw->flags & DrawFlags::UseIBuffer); diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 735564c2d..8b0c74c2a 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -1214,6 +1214,8 @@ void GLPipelineStateViewer::setState() ui->topology->setText(ToQStr(topo)); } + m_Common.setTopologyDiagram(ui->topologyDiagram, topo); + bool ibufferUsed = draw && (draw->flags & DrawFlags::UseIBuffer); if(ibufferUsed) @@ -1230,28 +1232,6 @@ void GLPipelineStateViewer::setState() ui->primRestart->setVisible(false); } - switch(topo) - { - case Topology::PointList: ui->topologyDiagram->setPixmap(Pixmaps::topo_pointlist()); break; - case Topology::LineList: ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist()); break; - case Topology::LineStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip()); break; - case Topology::TriangleList: ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist()); break; - case Topology::TriangleStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip()); break; - case Topology::LineList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist_adj()); - break; - case Topology::LineStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip_adj()); - break; - case Topology::TriangleList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist_adj()); - break; - case Topology::TriangleStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip_adj()); - break; - default: ui->topologyDiagram->setPixmap(Pixmaps::topo_patch()); break; - } - vs = ui->viBuffers->verticalScrollBar()->value(); ui->viBuffers->setUpdatesEnabled(false); ui->viBuffers->clear(); diff --git a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp index 3a440e4df..e2404aaea 100644 --- a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp @@ -423,11 +423,73 @@ void PipelineStateViewer::endHTMLExport(QXmlStreamWriter *xml) delete xml; } +void PipelineStateViewer::setTopologyDiagram(QLabel *diagram, Topology topo) +{ + int idx = qMin((int)topo, (int)Topology::PatchList); + + if(m_TopoPixmaps[idx].isNull()) + { + QImage im; + switch(topo) + { + case Topology::PointList: im = Pixmaps::topo_pointlist().toImage(); break; + case Topology::LineList: im = Pixmaps::topo_linelist().toImage(); break; + case Topology::LineStrip: im = Pixmaps::topo_linestrip().toImage(); break; + case Topology::TriangleList: im = Pixmaps::topo_trilist().toImage(); break; + case Topology::TriangleStrip: im = Pixmaps::topo_tristrip().toImage(); break; + case Topology::LineList_Adj: im = Pixmaps::topo_linelist_adj().toImage(); break; + case Topology::LineStrip_Adj: im = Pixmaps::topo_linestrip_adj().toImage(); break; + case Topology::TriangleList_Adj: im = Pixmaps::topo_trilist_adj().toImage(); break; + case Topology::TriangleStrip_Adj: im = Pixmaps::topo_tristrip_adj().toImage(); break; + default: im = Pixmaps::topo_patch().toImage(); break; + } + + im = im.convertToFormat(QImage::Format_ARGB32); + + // convert the colors - black maps to Text (foreground) and white maps to Base (background) + QColor white = diagram->palette().color(QPalette::Active, QPalette::Base); + QColor black = diagram->palette().color(QPalette::Active, QPalette::Text); + + const float br = black.redF(); + const float bg = black.greenF(); + const float bb = black.blueF(); + + const float wr = white.redF(); + const float wg = white.greenF(); + const float wb = white.blueF(); + + for(int y = 0; y < im.height(); y++) + { + QRgb *line = (QRgb *)im.scanLine(y); + + for(int x = 0; x < im.width(); x++) + { + // delta of 0 is black, delta of 255 is white + const float delta = float(qRed(*line)); + const float bd = 255.0f - delta; + const float wd = delta; + + const int r = int(br * bd + wr * wd); + const int g = int(bg * bd + wg * wd); + const int b = int(bb * bd + wb * wd); + + *line = qRgba(r, g, b, qAlpha(*line)); + + line++; + } + } + + m_TopoPixmaps[idx] = QPixmap::fromImage(im); + } + + diagram->setPixmap(m_TopoPixmaps[idx]); +} + void PipelineStateViewer::setMeshViewPixmap(RDLabel *meshView) { QImage meshIcon = Pixmaps::wireframe_mesh().toImage(); QImage colSwapped(meshIcon.size(), QImage::Format_ARGB32); - colSwapped.fill(palette().color(QPalette::WindowText)); + colSwapped.fill(meshView->palette().color(QPalette::WindowText)); for(int y = 0; y < meshIcon.height(); y++) { diff --git a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.h index bfec2e344..48d752246 100644 --- a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.h @@ -70,6 +70,7 @@ public: void EditShader(ShaderStage shaderType, ResourceId id, const ShaderReflection *shaderDetails, const QString &entryFunc, const QStringMap &files, const QString &mainfile); + void setTopologyDiagram(QLabel *diagram, Topology topo); void setMeshViewPixmap(RDLabel *meshView); QXmlStreamWriter *beginHTMLExport(); @@ -82,6 +83,8 @@ private: Ui::PipelineStateViewer *ui; ICaptureContext &m_Ctx; + QPixmap m_TopoPixmaps[(int)Topology::PatchList + 1]; + void setToD3D11(); void setToD3D12(); void setToGL(); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 54404cd06..4a3a3e6ec 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -1520,29 +1520,9 @@ void VulkanPipelineStateViewer::setState() ui->topology->setText(ToQStr(topo)); } - ui->primRestart->setVisible(state.IA.primitiveRestartEnable); + m_Common.setTopologyDiagram(ui->topologyDiagram, topo); - switch(topo) - { - case Topology::PointList: ui->topologyDiagram->setPixmap(Pixmaps::topo_pointlist()); break; - case Topology::LineList: ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist()); break; - case Topology::LineStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip()); break; - case Topology::TriangleList: ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist()); break; - case Topology::TriangleStrip: ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip()); break; - case Topology::LineList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linelist_adj()); - break; - case Topology::LineStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_linestrip_adj()); - break; - case Topology::TriangleList_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_trilist_adj()); - break; - case Topology::TriangleStrip_Adj: - ui->topologyDiagram->setPixmap(Pixmaps::topo_tristrip_adj()); - break; - default: ui->topologyDiagram->setPixmap(Pixmaps::topo_patch()); break; - } + ui->primRestart->setVisible(state.IA.primitiveRestartEnable); vs = ui->viBuffers->verticalScrollBar()->value(); ui->viBuffers->setUpdatesEnabled(false);