From bb137371e35032755e40e2599e26a722e2f14ca9 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 28 Mar 2015 13:56:16 +0000 Subject: [PATCH] Set up event browser QTreeWidget and allow browsing through the frame --- qrenderdoc/CustomPaintWidget.cpp | 5 - qrenderdoc/EventBrowser.cpp | 78 +++++++++++++ qrenderdoc/EventBrowser.h | 7 ++ qrenderdoc/EventBrowser.ui | 190 +++++++++++++++++++++++++++++-- qrenderdoc/MainWindow.cpp | 9 ++ qrenderdoc/MainWindow.ui | 13 ++- qrenderdoc/TextureViewer.cpp | 13 ++- qrenderdoc/TextureViewer.h | 2 + 8 files changed, 295 insertions(+), 22 deletions(-) diff --git a/qrenderdoc/CustomPaintWidget.cpp b/qrenderdoc/CustomPaintWidget.cpp index 137dfcc24..398133fc8 100644 --- a/qrenderdoc/CustomPaintWidget.cpp +++ b/qrenderdoc/CustomPaintWidget.cpp @@ -4,7 +4,6 @@ #include "renderdoc_replay.h" extern ReplayOutput *out; -extern TextureDisplay d; CustomPaintWidget::CustomPaintWidget(QWidget *parent) : QWidget(parent) { @@ -18,10 +17,6 @@ CustomPaintWidget::~CustomPaintWidget() void CustomPaintWidget::paintEvent(QPaintEvent *e) { - static float t = 0.0f; - t += 0.01f; - d.scale = 1.5f + sinf(t); - ReplayOutput_SetTextureDisplay(out, d); ReplayOutput_Display(out); } diff --git a/qrenderdoc/EventBrowser.cpp b/qrenderdoc/EventBrowser.cpp index 545058c68..0d81cd413 100644 --- a/qrenderdoc/EventBrowser.cpp +++ b/qrenderdoc/EventBrowser.cpp @@ -1,14 +1,92 @@ #include "EventBrowser.h" #include "ui_EventBrowser.h" +#include "renderdoc_replay.h" + +extern ReplayOutput *out; +extern ReplayRenderer *renderer; +extern TextureDisplay d; +extern QWidget *texviewer; + +uint AddDrawcalls(QTreeWidgetItem *parent, const rdctype::array &draws) +{ + uint lastEID = 0; + + for(int32_t i=0; i < draws.count; i++) + { + QTreeWidgetItem *child = new QTreeWidgetItem(parent, QStringList{QString(draws[i].name.elems), QString("%1").arg(draws[i].eventID), "0.0"}); + lastEID = AddDrawcalls(child, draws[i].children); + if(lastEID == 0) lastEID = draws[i].eventID; + child->setData(0, Qt::UserRole, QVariant(lastEID)); + } + + return lastEID; +} EventBrowser::EventBrowser(QWidget *parent) : QFrame(parent), ui(new Ui::EventBrowser) { ui->setupUi(this); + + rdctype::array draws; + ReplayRenderer_GetDrawcalls(renderer, 0, &draws); + + rdctype::array frameInfo; + ReplayRenderer_GetFrameInfo(renderer, &frameInfo); + + QTreeWidgetItem *frame = new QTreeWidgetItem((QTreeWidget *)NULL, QStringList{QString("Frame #%1").arg(frameInfo[0].frameNumber), "", ""}); + + QTreeWidgetItem *framestart = new QTreeWidgetItem(frame, QStringList{"Frame Start", "0", "0.0"}); + framestart->setData(0, Qt::UserRole, QVariant(0)); + + uint lastEID = AddDrawcalls(frame, draws); + frame->setData(0, Qt::UserRole, QVariant(lastEID)); + + ui->events->insertTopLevelItem(0, frame); + + ui->events->expandItem(frame); + + ui->events->header()->resizeSection(1, 80); + + ui->events->header()->setSectionResizeMode(0, QHeaderView::Stretch); + ui->events->header()->setSectionResizeMode(1, QHeaderView::Interactive); + ui->events->header()->setSectionResizeMode(2, QHeaderView::Interactive); + + // we set up the name column first, EID second, so that the name column gets the + // expand/collapse widgets. Then we need to put them back in order + ui->events->header()->moveSection(0, 1); + + // Qt doesn't allow moving the column with the expand/collapse widgets, so this + // becomes quickly infuriating to rearrange, just disable until that can be fixed. + ui->events->header()->setSectionsMovable(false); } EventBrowser::~EventBrowser() { delete ui; } + +void EventBrowser::on_find_clicked() +{ +} + +void EventBrowser::on_gotoEID_clicked() +{ +} + +void EventBrowser::on_events_itemSelectionChanged() +{ + if(ui->events->selectedItems().empty()) return; + + uint EID = ui->events->selectedItems()[0]->data(0, Qt::UserRole).toUInt(); + + ReplayRenderer_SetFrameEvent(renderer, 0, EID); + + D3D11PipelineState state; + ReplayRenderer_GetD3D11PipelineState(renderer, &state); + + d.texid = state.m_OM.RenderTargets[0].Resource; + ReplayOutput_SetTextureDisplay(out, d); + + texviewer->update(); +} diff --git a/qrenderdoc/EventBrowser.h b/qrenderdoc/EventBrowser.h index c40ff16a5..898b2a17c 100644 --- a/qrenderdoc/EventBrowser.h +++ b/qrenderdoc/EventBrowser.h @@ -15,6 +15,13 @@ class EventBrowser : public QFrame explicit EventBrowser(QWidget *parent = 0); ~EventBrowser(); + private slots: + void on_find_clicked(); + + void on_gotoEID_clicked(); + + void on_events_itemSelectionChanged(); + private: Ui::EventBrowser *ui; }; diff --git a/qrenderdoc/EventBrowser.ui b/qrenderdoc/EventBrowser.ui index a707a1753..9b61f24cf 100644 --- a/qrenderdoc/EventBrowser.ui +++ b/qrenderdoc/EventBrowser.ui @@ -6,8 +6,8 @@ 0 0 - 620 - 527 + 662 + 590 @@ -19,16 +19,190 @@ QFrame::Raised - - - - - Placeholder for Event Browser + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 3 + + QLayout::SetDefaultConstraint + + + 6 + + + + + + 0 + 0 + + + + Controls + + + + + + + Qt::Vertical + + + + + + + + + + + :/Resources/find.png:/Resources/find.png + + + Ctrl+F + + + false + + + false + + + true + + + + + + + + + + + :/Resources/flag_green.png:/Resources/flag_green.png + + + true + + + + + + + + + + + :/Resources/time.png:/Resources/time.png + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 1 + + + Qt::ScrollBarAlwaysOn + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::NoEditTriggers + + + true + + + 12 + + + true + + + true + + + true + + + false + + + false + + + false + + + + Name + + + + + EID + + + + + + + + + + + Duration + + - + + + diff --git a/qrenderdoc/MainWindow.cpp b/qrenderdoc/MainWindow.cpp index 6120d8e66..86bd56bdf 100644 --- a/qrenderdoc/MainWindow.cpp +++ b/qrenderdoc/MainWindow.cpp @@ -2,6 +2,10 @@ #include "EventBrowser.h" #include "TextureViewer.h" #include "ui_MainWindow.h" +#include "renderdoc_replay.h" + +ReplayRenderer *renderer = NULL; +QWidget *texviewer = NULL; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -9,12 +13,17 @@ MainWindow::MainWindow(QWidget *parent) : { ui->setupUi(this); + float progress = 0.0f; + RENDERDOC_CreateReplayRenderer("T:\\renderdoc\\archive_renderdoc_captures\\deferred_plusplus.rdc", &progress, &renderer); + EventBrowser *eventbrowser = new EventBrowser(); ui->toolWindowManager->addToolWindow(eventbrowser, ToolWindowManager::EmptySpace); TextureViewer *textureviewer = new TextureViewer(); + texviewer = textureviewer->renderSurf(); + ui->toolWindowManager->addToolWindow(textureviewer, ToolWindowManager::AreaReference(ToolWindowManager::RightOf, ui->toolWindowManager->areaOf(eventbrowser))); ui->toolWindowManager->setRubberBandLineWidth(50); diff --git a/qrenderdoc/MainWindow.ui b/qrenderdoc/MainWindow.ui index c44e08d23..f7697ddf2 100644 --- a/qrenderdoc/MainWindow.ui +++ b/qrenderdoc/MainWindow.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 975 + 622 @@ -37,7 +37,7 @@ 0 0 - 400 + 975 18 @@ -367,6 +367,13 @@ + + + ToolWindowManager + QWidget +
toolwindowmanager.h
+
+
diff --git a/qrenderdoc/TextureViewer.cpp b/qrenderdoc/TextureViewer.cpp index 20aff1ff9..409ca38f6 100644 --- a/qrenderdoc/TextureViewer.cpp +++ b/qrenderdoc/TextureViewer.cpp @@ -3,6 +3,7 @@ #include "renderdoc_replay.h" +extern ReplayRenderer *renderer; ReplayOutput *out = NULL; TextureDisplay d; @@ -12,11 +13,6 @@ TextureViewer::TextureViewer(QWidget *parent) : { ui->setupUi(this); - ReplayRenderer *renderer = NULL; - - float progress = 0.0f; - RENDERDOC_CreateReplayRenderer("T:\\renderdoc\\archive_renderdoc_captures\\deferred_plusplus.rdc", &progress, &renderer); - rdctype::array texs; ReplayRenderer_GetTextures(renderer, &texs); @@ -34,7 +30,7 @@ TextureViewer::TextureViewer(QWidget *parent) : d.FlipY = false; d.rangemin = 0.0f; d.rangemax = 1.0f; - d.scale = 1.0f; + d.scale = -1.0f; d.offx = 0.0f; d.offy = 0.0f; d.sliceFace = 0; @@ -59,6 +55,11 @@ TextureViewer::TextureViewer(QWidget *parent) : ReplayRenderer_SetFrameEvent(renderer, 0, 10000000+rand()%1000); } +QWidget *TextureViewer::renderSurf() +{ + return ui->framerender; +} + TextureViewer::~TextureViewer() { delete ui; diff --git a/qrenderdoc/TextureViewer.h b/qrenderdoc/TextureViewer.h index ef709461c..04abb50a1 100644 --- a/qrenderdoc/TextureViewer.h +++ b/qrenderdoc/TextureViewer.h @@ -15,6 +15,8 @@ class TextureViewer : public QFrame explicit TextureViewer(QWidget *parent = 0); ~TextureViewer(); + QWidget *renderSurf(); + private: Ui::TextureViewer *ui; };