diff --git a/qrenderdoc/Code/Interface/QRDInterface.cpp b/qrenderdoc/Code/Interface/QRDInterface.cpp index 9854b0721..c2faafeb0 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.cpp +++ b/qrenderdoc/Code/Interface/QRDInterface.cpp @@ -73,6 +73,8 @@ CaptureSettings::CaptureSettings() { inject = false; autoStart = false; + queuedFrameCap = 0; + numQueuedFrames = 0; RENDERDOC_GetDefaultCaptureOptions(&options); } @@ -106,6 +108,9 @@ CaptureSettings::operator QVariant() const opts[lit("debugOutputMute")] = options.debugOutputMute; ret[lit("options")] = opts; + ret[lit("queuedFrameCap")] = queuedFrameCap; + ret[lit("numQueuedFrames")] = numQueuedFrames; + return ret; } @@ -144,6 +149,15 @@ CaptureSettings::CaptureSettings(const QVariant &v) options.refAllResources = opts[lit("refAllResources")].toBool(); options.captureAllCmdLists = opts[lit("captureAllCmdLists")].toBool(); options.debugOutputMute = opts[lit("debugOutputMute")].toBool(); + + if(data.contains(lit("queuedFrameCap"))) + queuedFrameCap = data[lit("queuedFrameCap")].toUInt(); + else + queuedFrameCap = 0; + if(data.contains(lit("numQueuedFrames"))) + numQueuedFrames = data[lit("numQueuedFrames")].toUInt(); + else + numQueuedFrames = 0; } rdcstr configFilePath(const rdcstr &filename) diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index e38d5c4da..d453ef043 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -117,6 +117,10 @@ struct CaptureSettings "A ``list`` of :class:`~renderdoc.EnvironmentModification` with environment changes to " "apply."); rdcarray environment; + DOCUMENT("The number of queued frames to capture, or 0 if no frames are queued to be captured."); + uint32_t numQueuedFrames; + DOCUMENT("The first queued frame to capture. Ignored if :data:`numQueuedFrames` is 0."); + uint32_t queuedFrameCap; }; DECLARE_REFLECTION_STRUCT(CaptureSettings); diff --git a/qrenderdoc/Code/pyrenderdoc/qrenderdoc_stub.cpp b/qrenderdoc/Code/pyrenderdoc/qrenderdoc_stub.cpp index ffdc67eae..a7fa9ea58 100644 --- a/qrenderdoc/Code/pyrenderdoc/qrenderdoc_stub.cpp +++ b/qrenderdoc/Code/pyrenderdoc/qrenderdoc_stub.cpp @@ -38,6 +38,8 @@ CaptureSettings::CaptureSettings() { inject = false; autoStart = false; + queuedFrameCap = 0; + numQueuedFrames = 0; RENDERDOC_GetDefaultCaptureOptions(&options); } diff --git a/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp b/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp index f10cadbfe..adb682d5a 100644 --- a/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp @@ -909,6 +909,19 @@ void CaptureDialog::SetSettings(CaptureSettings settings) // force flush this state on_CaptureCallstacks_toggled(ui->CaptureCallstacks->isChecked()); + if(settings.numQueuedFrames > 0) + { + ui->queuedFrame->setValue(settings.queuedFrameCap); + ui->numFrames->setValue(settings.numQueuedFrames); + ui->queueFrameCap->setChecked(true); + } + else + { + ui->queuedFrame->setValue(0); + ui->numFrames->setValue(0); + ui->queueFrameCap->setChecked(false); + } + if(settings.autoStart) { TriggerCapture(); @@ -940,6 +953,12 @@ CaptureSettings CaptureDialog::Settings() ret.options.delayForDebugger = (uint32_t)ui->DelayForDebugger->value(); ret.options.verifyBufferAccess = ui->VerifyBufferAccess->isChecked(); + if(ui->queueFrameCap->isChecked()) + { + ret.queuedFrameCap = (uint32_t)ui->queuedFrame->value(); + ret.numQueuedFrames = (uint32_t)ui->numFrames->value(); + } + return ret; }