Remap topology diagrams to Base/Text palette colours instead of b/w

This commit is contained in:
baldurk
2017-06-01 15:22:22 +01:00
parent 2ddfc40182
commit f0116c4c08
6 changed files with 72 additions and 87 deletions
@@ -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);
@@ -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);
@@ -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();
@@ -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++)
{
@@ -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();
@@ -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);