Set up event browser QTreeWidget and allow browsing through the frame

This commit is contained in:
baldurk
2015-03-28 13:56:16 +00:00
parent a96167a110
commit bb137371e3
8 changed files with 295 additions and 22 deletions
-5
View File
@@ -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);
}
+78
View File
@@ -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<FetchDrawcall> &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<FetchDrawcall> draws;
ReplayRenderer_GetDrawcalls(renderer, 0, &draws);
rdctype::array<FetchFrameInfo> 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();
}
+7
View File
@@ -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;
};
+182 -8
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>620</width>
<height>527</height>
<width>662</width>
<height>590</height>
</rect>
</property>
<property name="windowTitle">
@@ -19,16 +19,190 @@
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Placeholder for Event Browser</string>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>3</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Controls</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="find">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<normaloff>:/Resources/find.png</normaloff>:/Resources/find.png</iconset>
</property>
<property name="shortcut">
<string>Ctrl+F</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="autoRepeat">
<bool>false</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="gotoEID">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<normaloff>:/Resources/flag_green.png</normaloff>:/Resources/flag_green.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="timeDraws">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<normaloff>:/Resources/time.png</normaloff>:/Resources/time.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTreeWidget" name="events">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="midLineWidth">
<number>1</number>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="indentation">
<number>12</number>
</property>
<property name="rootIsDecorated">
<bool>true</bool>
</property>
<property name="uniformRowHeights">
<bool>true</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<property name="headerHidden">
<bool>false</bool>
</property>
<attribute name="headerCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>EID</string>
</property>
<property name="toolTip">
<string/>
</property>
<property name="whatsThis">
<string/>
</property>
</column>
<column>
<property name="text">
<string>Duration</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="resources.qrc"/>
</resources>
<connections/>
</ui>
+9
View File
@@ -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);
+10 -3
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>975</width>
<height>622</height>
</rect>
</property>
<property name="windowTitle">
@@ -37,7 +37,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<width>975</width>
<height>18</height>
</rect>
</property>
@@ -367,6 +367,13 @@
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>ToolWindowManager</class>
<extends>QWidget</extends>
<header>toolwindowmanager.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
+7 -6
View File
@@ -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<FetchTexture> 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;
+2
View File
@@ -15,6 +15,8 @@ class TextureViewer : public QFrame
explicit TextureViewer(QWidget *parent = 0);
~TextureViewer();
QWidget *renderSurf();
private:
Ui::TextureViewer *ui;
};