Expose replay options to the UI

* The defaults can be configured from the settings menu, and there's a new "Open
  Capture with Options" menu option to open a capture with different options
  temporarily.
This commit is contained in:
baldurk
2019-08-26 19:12:43 +01:00
parent b4a3fb4490
commit 6203909791
16 changed files with 632 additions and 4 deletions
@@ -666,3 +666,32 @@ BugReport::operator QVariant() const
return map;
}
ReplayOptions::ReplayOptions(const QVariant &var)
{
QVariantMap map = var.toMap();
if(map.contains(lit("apiValidation")))
apiValidation = map[lit("apiValidation")].toBool();
if(map.contains(lit("forceGPUVendor")))
forceGPUVendor = (GPUVendor)map[lit("forceGPUVendor")].toUInt();
if(map.contains(lit("forceGPUDeviceID")))
forceGPUDeviceID = map[lit("forceGPUDeviceID")].toUInt();
if(map.contains(lit("forceGPUDriverName")))
forceGPUDriverName = map[lit("forceGPUDriverName")].toString();
if(map.contains(lit("optimisation")))
optimisation = (ReplayOptimisationLevel)map[lit("optimisation")].toUInt();
}
ReplayOptions::operator QVariant() const
{
QVariantMap map;
map[lit("apiValidation")] = apiValidation;
map[lit("forceGPUVendor")] = (uint32_t)forceGPUVendor;
map[lit("forceGPUDeviceID")] = forceGPUDeviceID;
map[lit("forceGPUDriverName")] = forceGPUDriverName;
map[lit("optimisation")] = (uint32_t)optimisation;
return map;
}
@@ -294,6 +294,8 @@ DECLARE_REFLECTION_STRUCT(BugReport);
\
CONFIG_SETTING_VAL(public, QString, rdcstr, DefaultCaptureSaveDirectory, "") \
\
CONFIG_SETTING(public, QVariant, ReplayOptions, DefaultReplayOptions) \
\
CONFIG_SETTING_VAL(public, bool, bool, TextureViewer_ResetRange, false) \
\
CONFIG_SETTING_VAL(public, bool, bool, TextureViewer_PerTexSettings, true) \
@@ -491,6 +493,11 @@ For more information about some of these settings that are user-facing see
The default path to save captures in, when browsing to save a temporary capture somewhere.
.. data:: DefaultReplayOptions
A :class:`ReplayOptions` containing the configured default replay options to use in most scenarios
when no specific options are given.
.. data:: TextureViewer_ResetRange
``True`` if the :class:`TextureViewer` should reset the visible range when a new texture is
+4
View File
@@ -717,6 +717,10 @@ QSize RDStyle::sizeFromContents(ContentsType type, const QStyleOption *opt, cons
const QStyleOptionMenuItem *menuitem = qstyleoption_cast<const QStyleOptionMenuItem *>(opt);
// add more room for items with shortcuts
if(menuitem->text.contains(QLatin1Char('\t')))
ret.setWidth(ret.width() + 4 * Constants::MenuBarMargin);
// add room for an icon
if(menuitem->maxIconWidth)
ret.setWidth(ret.width() + Constants::MenuBarMargin + menuitem->maxIconWidth);
@@ -0,0 +1,218 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016-2019 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "ReplayOptionsSelector.h"
#include "Code/QRDUtils.h"
#include "ui_ReplayOptionsSelector.h"
ReplayOptionsSelector::ReplayOptionsSelector(ICaptureContext &ctx, bool actions, QWidget *parent)
: m_Ctx(ctx), QWidget(parent), ui(new Ui::ReplayOptionsSelector)
{
ui->setupUi(this);
if(!actions)
{
ui->captureFileFrame->hide();
ui->buttonsFrame->hide();
}
QObject::connect(ui->open, &QPushButton::clicked, this, &ReplayOptionsSelector::opened);
QObject::connect(ui->cancel, &QPushButton::clicked, this, &ReplayOptionsSelector::canceled);
// try to use the remote capture access to enumerate remote GPUs, but if it's not available open a
// local capture access
ICaptureFile *dummy = RENDERDOC_OpenCaptureFile();
ICaptureAccess *capture = m_Ctx.Replay().GetCaptureAccess();
if(!capture)
capture = dummy;
// fetch available GPUs
m_GPUs = capture->GetAvailableGPUs();
dummy->Shutdown();
// this is always available
ui->gpuOverride->addItem(tr("Default GPU selection"));
for(const GPUDevice &dev : m_GPUs)
{
QString apis;
for(size_t i = 0; i < dev.apis.size(); i++)
{
apis += ToQStr(dev.apis[i]);
if(i + 1 < dev.apis.size())
apis += lit(", ");
}
QString vendor = ToQStr(dev.vendor);
QString name = dev.name;
// if the name already contains the vendor, don't display it twice
if(name.contains(vendor, Qt::CaseInsensitive))
ui->gpuOverride->addItem(QFormatStr("%1 [%2]").arg(name).arg(apis));
else
ui->gpuOverride->addItem(QFormatStr("%1 %2 [%3]").arg(vendor).arg(name).arg(apis));
}
for(ReplayOptimisationLevel level : values<ReplayOptimisationLevel>())
ui->replayOptimisation->addItem(ToQStr(level));
// set default options
{
const ReplayOptions &opts = m_Ctx.Config().DefaultReplayOptions;
ui->replayAPIValidation->setChecked(opts.apiValidation);
ui->replayOptimisation->setCurrentIndex((int)opts.optimisation);
int bestIndex = -1;
if(opts.forceGPUVendor == GPUVendor::Unknown && opts.forceGPUDeviceID == 0 &&
opts.forceGPUDriverName.empty())
{
// no forcing active
bestIndex = -1;
}
else
{
// if the options are trying to force a GPU, pick the closest one we can find and use it
bestIndex = 0;
for(int i = 0; i < m_GPUs.count(); i++)
{
// if this is a closer vendor match than the current best, use it
if(opts.forceGPUVendor == m_GPUs[i].vendor && opts.forceGPUVendor != m_GPUs[bestIndex].vendor)
{
bestIndex = i;
continue;
}
else if(m_GPUs[i].vendor != opts.forceGPUVendor)
{
continue;
}
// if this is a closer device match, use it
if(opts.forceGPUDeviceID == m_GPUs[i].deviceID &&
opts.forceGPUDeviceID != m_GPUs[bestIndex].deviceID)
{
bestIndex = i;
continue;
}
else if(m_GPUs[i].deviceID != opts.forceGPUDeviceID)
{
continue;
}
// if this is a closer driver match, use it
if(opts.forceGPUDriverName == m_GPUs[i].driver &&
opts.forceGPUDriverName != m_GPUs[bestIndex].driver)
{
bestIndex = i;
continue;
}
}
}
if(bestIndex >= 0 && bestIndex < m_GPUs.count())
ui->gpuOverride->setCurrentIndex(bestIndex + 1);
else
ui->gpuOverride->setCurrentIndex(0);
}
// add recent capture files as options in the dropdown
for(rdcstr file : m_Ctx.Config().RecentCaptureFiles)
ui->captureFile->insertItem(0, file);
// default to the last opened file
ui->captureFile->setCurrentIndex(0);
}
ReplayOptionsSelector::~ReplayOptionsSelector()
{
delete ui;
}
QString ReplayOptionsSelector::filename()
{
return ui->captureFile->currentText();
}
ReplayOptions ReplayOptionsSelector::options()
{
ReplayOptions opts;
opts.apiValidation = ui->replayAPIValidation->isChecked();
opts.optimisation = (ReplayOptimisationLevel)ui->replayOptimisation->currentIndex();
int gpuChoice = ui->gpuOverride->currentIndex();
if(gpuChoice > 0 && gpuChoice - 1 < m_GPUs.count())
{
const GPUDevice &gpu = m_GPUs[gpuChoice - 1];
opts.forceGPUVendor = gpu.vendor;
opts.forceGPUDeviceID = gpu.deviceID;
opts.forceGPUDriverName = gpu.driver;
}
return opts;
}
void ReplayOptionsSelector::on_saveDefaults_clicked()
{
m_Ctx.Config().DefaultReplayOptions = options();
m_Ctx.Config().Save();
}
void ReplayOptionsSelector::on_captureFileBrowse_clicked()
{
QString initDir;
QFileInfo f(ui->captureFile->currentText());
QDir dir = f.dir();
if(f.isAbsolute() && dir.exists())
{
initDir = dir.absolutePath();
}
else if(!m_Ctx.Config().LastCaptureFilePath.isEmpty())
{
initDir = m_Ctx.Config().LastCaptureFilePath;
}
QString filename = RDDialog::getOpenFileName(this, tr("Select capture to open"), initDir,
tr("Capture Files (*.rdc);;All Files (*)"));
if(!filename.isEmpty())
ui->captureFile->setCurrentText(filename);
}
void ReplayOptionsSelector::keyPressEvent(QKeyEvent *e)
{
if(e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)
{
opened();
return;
}
QWidget::keyPressEvent(e);
}
@@ -0,0 +1,61 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016-2019 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QWidget>
#include "Code/Interface/QRDInterface.h"
namespace Ui
{
class ReplayOptionsSelector;
}
class ReplayOptionsSelector : public QWidget
{
Q_OBJECT
public:
explicit ReplayOptionsSelector(ICaptureContext &ctx, bool actions, QWidget *parent = 0);
~ReplayOptionsSelector();
QString filename();
ReplayOptions options();
signals:
void canceled();
void opened();
private slots:
// automatic slots
void on_saveDefaults_clicked();
void on_captureFileBrowse_clicked();
private:
void keyPressEvent(QKeyEvent *e);
Ui::ReplayOptionsSelector *ui;
ICaptureContext &m_Ctx;
rdcarray<GPUDevice> m_GPUs;
};
+191
View File
@@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ReplayOptionsSelector</class>
<widget class="QWidget" name="ReplayOptionsSelector">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>680</width>
<height>268</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Use API Validation on replay:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="replayAPIValidation">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>GPU Selection Override:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="gpuOverride"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Replay optimisation level:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="replayOptimisation"/>
</item>
<item row="0" column="0" colspan="2">
<widget class="QFrame" name="captureFileFrame">
<layout class="QHBoxLayout" name="captureFileLayout">
<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>
<widget class="QLabel" name="captureFileLabel">
<property name="text">
<string>Capture File:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="captureFile">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToMinimumContentsLength</enum>
</property>
<property name="minimumContentsLength">
<number>30</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="captureFileBrowse">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QFrame" name="buttonsFrame">
<layout class="QHBoxLayout" name="buttonsLayout">
<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>
<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>
<item>
<widget class="QPushButton" name="saveDefaults">
<property name="text">
<string>Save Defaults</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="open">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancel">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+1 -1
View File
@@ -760,7 +760,7 @@ void LiveCapture::openCapture(Capture *cap)
return;
}
m_Main->LoadCapture(cap->path, ReplayOptions(), !cap->saved, cap->local);
m_Main->LoadCapture(cap->path, m_Ctx.Config().DefaultReplayOptions, !cap->saved, cap->local);
}
bool LiveCapture::saveCapture(Capture *cap, QString path)
@@ -30,6 +30,7 @@
#include "Code/QRDUtils.h"
#include "Styles/StyleData.h"
#include "Widgets/OrderedListEditor.h"
#include "Widgets/ReplayOptionsSelector.h"
#include "CaptureDialog.h"
#include "ui_SettingsDialog.h"
@@ -38,6 +39,10 @@ SettingsDialog::SettingsDialog(ICaptureContext &ctx, QWidget *parent)
{
ui->setupUi(this);
m_ReplayOptions = new ReplayOptionsSelector(m_Ctx, false, this);
ui->replayOptionsLayout->insertWidget(0, m_ReplayOptions);
QString styleChooseTooltip = ui->UIStyle->toolTip();
for(int i = 0; i < StyleData::numAvailable; i++)
@@ -192,6 +197,9 @@ SettingsDialog::SettingsDialog(ICaptureContext &ctx, QWidget *parent)
SettingsDialog::~SettingsDialog()
{
m_Ctx.Config().DefaultReplayOptions = m_ReplayOptions->options();
m_Ctx.Config().Save();
delete ui;
}
@@ -34,6 +34,7 @@ class SettingsDialog;
class QTableWidgetItem;
class QListWidgetItem;
struct ShaderProcessingTool;
class ReplayOptionsSelector;
struct ICaptureContext;
@@ -119,6 +120,8 @@ private:
void addProcessor(const ShaderProcessingTool &disasm);
bool editTool(int existing, ShaderProcessingTool &disasm);
ReplayOptionsSelector *m_ReplayOptions;
ICaptureContext &m_Ctx;
bool m_Init = false;
};
@@ -551,6 +551,35 @@ After interop is enabled you will need to reload any capture.</string>
</item>
</layout>
</widget>
<widget class="QWidget" name="replayTab">
<attribute name="title">
<string>Replay</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="groupBox_10">
<property name="title">
<string>Default Replay Options</string>
</property>
<layout class="QVBoxLayout" name="replayOptionsLayout">
<item>
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>414</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="textureTab">
<attribute name="title">
<string>Texture Viewer</string>
+40 -3
View File
@@ -39,6 +39,7 @@
#include "Code/QRDUtils.h"
#include "Code/Resources.h"
#include "Widgets/Extended/RDLabel.h"
#include "Widgets/ReplayOptionsSelector.h"
#include "Windows/Dialogs/AboutDialog.h"
#include "Windows/Dialogs/CaptureDialog.h"
#include "Windows/Dialogs/CrashDialog.h"
@@ -445,6 +446,42 @@ void MainWindow::on_action_Open_Capture_triggered()
LoadFromFilename(filename, false);
}
void MainWindow::on_action_Open_Capture_with_Options_triggered()
{
if(!PromptCloseCapture())
return;
ReplayOptionsSelector *replayOptions = new ReplayOptionsSelector(m_Ctx, true, this);
QDialog openWithOptions;
openWithOptions.setWindowFlags(openWithOptions.windowFlags() & ~Qt::WindowContextHelpButtonHint);
openWithOptions.setWindowIcon(windowIcon());
openWithOptions.setWindowTitle(tr("Open Capture with Options"));
openWithOptions.setSizeGripEnabled(false);
openWithOptions.setModal(true);
QVBoxLayout l;
l.addWidget(replayOptions);
l.setMargin(3);
l.setSizeConstraint(QLayout::SetFixedSize);
openWithOptions.setLayout(&l);
QObject::connect(replayOptions, &ReplayOptionsSelector::canceled, &openWithOptions,
&QDialog::reject);
QObject::connect(replayOptions, &ReplayOptionsSelector::opened, &openWithOptions, &QDialog::accept);
if(RDDialog::show(&openWithOptions) != QDialog::Accepted)
return;
QString filename = replayOptions->filename();
if(filename.isEmpty())
return;
LoadCapture(filename, replayOptions->options(), false, true);
}
void MainWindow::importCapture(const CaptureFileFormat &fmt)
{
if(!PromptCloseCapture())
@@ -487,7 +524,7 @@ void MainWindow::LoadFromFilename(const QString &filename, bool temporary)
if(ext == lit("rdc"))
{
LoadCapture(filename, ReplayOptions(), temporary, true);
LoadCapture(filename, m_Ctx.Config().DefaultReplayOptions, temporary, true);
}
else if(ext == lit("cap"))
{
@@ -500,7 +537,7 @@ void MainWindow::LoadFromFilename(const QString &filename, bool temporary)
else
{
// not a recognised filetype, see if we can load it anyway
LoadCapture(filename, ReplayOptions(), temporary, true);
LoadCapture(filename, m_Ctx.Config().DefaultReplayOptions, temporary, true);
}
}
@@ -1507,7 +1544,7 @@ void MainWindow::recentCaptureFile(const QString &filename)
{
if(QFileInfo::exists(filename))
{
LoadCapture(filename, ReplayOptions(), false, true);
LoadCapture(filename, m_Ctx.Config().DefaultReplayOptions, false, true);
}
else
{
+1
View File
@@ -117,6 +117,7 @@ private slots:
void on_action_Exit_triggered();
void on_action_About_triggered();
void on_action_Open_Capture_triggered();
void on_action_Open_Capture_with_Options_triggered();
void on_action_Save_Capture_Inplace_triggered();
void on_action_Save_Capture_As_triggered();
void on_action_Close_Capture_triggered();
+9
View File
@@ -102,6 +102,7 @@
<addaction name="action_Inject_into_Process"/>
<addaction name="separator"/>
<addaction name="action_Open_Capture"/>
<addaction name="action_Open_Capture_with_Options"/>
<addaction name="action_Save_Capture_Inplace"/>
<addaction name="action_Save_Capture_As"/>
<addaction name="action_Close_Capture"/>
@@ -506,6 +507,14 @@
<string>Dia&amp;gnostic Log</string>
</property>
</action>
<action name="action_Open_Capture_with_Options">
<property name="text">
<string>Open Capture with Options</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+O</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
+3
View File
@@ -196,6 +196,7 @@ SOURCES += Code/qrenderdoc.cpp \
Widgets/CustomPaintWidget.cpp \
Widgets/ResourcePreview.cpp \
Widgets/ThumbnailStrip.cpp \
Widgets/ReplayOptionsSelector.cpp \
Widgets/TextureGoto.cpp \
Widgets/RangeHistogram.cpp \
Widgets/CollapseGroupBox.cpp \
@@ -273,6 +274,7 @@ HEADERS += Code/CaptureContext.h \
Widgets/CustomPaintWidget.h \
Widgets/ResourcePreview.h \
Widgets/ThumbnailStrip.h \
Widgets/ReplayOptionsSelector.h \
Widgets/TextureGoto.h \
Widgets/RangeHistogram.h \
Widgets/CollapseGroupBox.h \
@@ -324,6 +326,7 @@ FORMS += Windows/Dialogs/AboutDialog.ui \
Windows/TextureViewer.ui \
Widgets/ResourcePreview.ui \
Widgets/ThumbnailStrip.ui \
Widgets/ReplayOptionsSelector.ui \
Windows/Dialogs/TextureSaveDialog.ui \
Windows/Dialogs/CaptureDialog.ui \
Windows/Dialogs/LiveCapture.ui \
+15
View File
@@ -663,6 +663,7 @@
<ClCompile Include="$(IntDir)generated\moc_TextureViewer.cpp" />
<ClCompile Include="$(IntDir)generated\moc_TipsDialog.cpp" />
<ClCompile Include="$(IntDir)generated\moc_ThumbnailStrip.cpp" />
<ClCompile Include="$(IntDir)generated\moc_ReplayOptionsSelector.cpp" />
<ClCompile Include="$(IntDir)generated\moc_ToolWindowManager.cpp" />
<ClCompile Include="$(IntDir)generated\moc_ToolWindowManagerArea.cpp" />
<ClCompile Include="$(IntDir)generated\moc_ToolWindowManagerSplitter.cpp" />
@@ -707,6 +708,7 @@
<ClCompile Include="Widgets\ResourcePreview.cpp" />
<ClCompile Include="Widgets\TextureGoto.cpp" />
<ClCompile Include="Widgets\ThumbnailStrip.cpp" />
<ClCompile Include="Widgets\ReplayOptionsSelector.cpp" />
<ClCompile Include="Widgets\OrderedListEditor.cpp" />
<ClCompile Include="Code\CaptureContext.cpp" />
<ClCompile Include="Styles\RDStyle\RDStyle.cpp" />
@@ -956,6 +958,7 @@
<ClInclude Include="$(IntDir)generated\ui_TipsDialog.h" />
<ClInclude Include="$(IntDir)generated\ui_TextureViewer.h" />
<ClInclude Include="$(IntDir)generated\ui_ThumbnailStrip.h" />
<ClInclude Include="$(IntDir)generated\ui_ReplayOptionsSelector.h" />
<ClInclude Include="$(IntDir)generated\ui_VirtualFileDialog.h" />
<ClInclude Include="$(IntDir)generated\ui_VulkanPipelineStateViewer.h" />
<ClInclude Include="Code\RGPInterop.h" />
@@ -1120,6 +1123,12 @@
<Message>MOC %(Filename).h</Message>
<Outputs>$(IntDir)generated\moc_%(Filename).cpp</Outputs>
</CustomBuild>
<CustomBuild Include="Widgets\ReplayOptionsSelector.h">
<AdditionalInputs>%(Fullpath);$(ProjectDir)3rdparty\qt\$(Platform)\bin\moc.exe;%(AdditionalInputs)</AdditionalInputs>
<Command>"$(ProjectDir)3rdparty\qt\$(Platform)\bin\moc.exe" -DUNICODE -DWIN32 -DWIN64 -D_WIN32 -D_WIN64 -DRENDERDOC_PLATFORM_WIN32 -DSCINTILLA_QT=1 -DSCI_LEXER=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1900 -I"$(ProjectDir)." -I"$(SolutionDir)\renderdoc\api\replay" -I"$(ProjectDir)3rdparty\qt\$(Platform)\mkspecs/win32-msvc2015" -I"$(ProjectDir)3rdparty\qt\include" -I"$(ProjectDir)3rdparty\qt\include\QtWidgets" -I"$(ProjectDir)3rdparty\qt\include\QtGui" -I"$(ProjectDir)3rdparty\qt\include\QtCore" "%(Fullpath)" -o "$(IntDir)generated\moc_%(Filename).cpp"</Command>
<Message>MOC %(Filename).h</Message>
<Outputs>$(IntDir)generated\moc_%(Filename).cpp</Outputs>
</CustomBuild>
<CustomBuild Include="Widgets\OrderedListEditor.h">
<AdditionalInputs>%(Fullpath);$(ProjectDir)3rdparty\qt\$(Platform)\bin\moc.exe;%(AdditionalInputs)</AdditionalInputs>
<Command>"$(ProjectDir)3rdparty\qt\$(Platform)\bin\moc.exe" -DUNICODE -DWIN32 -DWIN64 -D_WIN32 -D_WIN64 -DRENDERDOC_PLATFORM_WIN32 -DSCINTILLA_QT=1 -DSCI_LEXER=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1900 -I"$(ProjectDir)." -I"$(SolutionDir)\renderdoc\api\replay" -I"$(ProjectDir)3rdparty\qt\$(Platform)\mkspecs/win32-msvc2015" -I"$(ProjectDir)3rdparty\qt\include" -I"$(ProjectDir)3rdparty\qt\include\QtWidgets" -I"$(ProjectDir)3rdparty\qt\include\QtGui" -I"$(ProjectDir)3rdparty\qt\include\QtCore" "%(Fullpath)" -o "$(IntDir)generated\moc_%(Filename).cpp"</Command>
@@ -1384,6 +1393,12 @@
<Message>UIC %(Filename).ui</Message>
<Outputs>$(IntDir)generated\ui_%(Filename).h</Outputs>
</CustomBuild>
<CustomBuild Include="Widgets\ReplayOptionsSelector.ui">
<AdditionalInputs>%(Fullpath);$(ProjectDir)3rdparty\qt\$(Platform)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Command>"$(ProjectDir)3rdparty\qt\$(Platform)\bin\uic.exe" "%(Fullpath)" -o "$(IntDir)generated\ui_%(Filename).h"</Command>
<Message>UIC %(Filename).ui</Message>
<Outputs>$(IntDir)generated\ui_%(Filename).h</Outputs>
</CustomBuild>
<CustomBuild Include="Windows\APIInspector.ui">
<AdditionalInputs>%(Fullpath);$(ProjectDir)3rdparty\qt\$(Platform)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
<Command>"$(ProjectDir)3rdparty\qt\$(Platform)\bin\uic.exe" "%(Fullpath)" -o "$(IntDir)generated\ui_%(Filename).h"</Command>
@@ -723,6 +723,12 @@
<ClCompile Include="$(IntDir)generated\moc_LogView.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="Widgets\ReplayOptionsSelector.cpp">
<Filter>Widgets</Filter>
</ClCompile>
<ClCompile Include="$(IntDir)generated\moc_ReplayOptionsSelector.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="3rdparty\flowlayout\FlowLayout.h">
@@ -1079,6 +1085,9 @@
<ClInclude Include="$(IntDir)generated\ui_LogView.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="$(IntDir)generated\ui_ReplayOptionsSelector.h">
<Filter>Generated Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="Code\pyrenderdoc\pyconversion.h">
@@ -1466,6 +1475,10 @@
<CustomBuild Include="Windows\LogView.h">
<Filter>Windows</Filter>
</CustomBuild>
<CustomBuild Include="Widgets\ReplayOptionsSelector.h">
<Filter>Widgets</Filter>
</CustomBuild>
<CustomBuild Include="Widgets\ReplayOptionsSelector.ui" />
</ItemGroup>
<ItemGroup>
<Image Include="Resources\action.png">