mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 17:10:47 +00:00
Set up event browser QTreeWidget and allow browsing through the frame
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -15,6 +15,8 @@ class TextureViewer : public QFrame
|
||||
explicit TextureViewer(QWidget *parent = 0);
|
||||
~TextureViewer();
|
||||
|
||||
QWidget *renderSurf();
|
||||
|
||||
private:
|
||||
Ui::TextureViewer *ui;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user