diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index dd95614d5..82c75bc87 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -24,6 +24,7 @@ #include "TextureViewer.h" #include +#include #include "Code/CaptureContext.h" #include "Widgets/ResourcePreview.h" #include "FlowLayout.h" @@ -1772,6 +1773,11 @@ void TextureViewer::OnLogfileLoaded() WId renderID = ui->render->winId(); WId contextID = ui->pixelContext->winId(); + m_TexDisplay.darkBackgroundColour = + FloatVector(darkBack.redF(), darkBack.greenF(), darkBack.blueF(), 1.0f); + m_TexDisplay.lightBackgroundColour = + FloatVector(lightBack.redF(), lightBack.greenF(), lightBack.blueF(), 1.0f); + m_Ctx->Renderer()->BlockInvoke([renderID, contextID, this](IReplayRenderer *r) { m_Output = r->CreateOutput(m_Ctx->m_CurWinSystem, m_Ctx->FillWindowingData(renderID), eOutputType_TexDisplay); @@ -1911,6 +1917,42 @@ void TextureViewer::OnEventSelected(uint32_t eventID) INVOKE_MEMFN(RT_UpdateAndDisplay); } +QVariant TextureViewer::persistData() +{ + QVariantMap state = ui->dockarea->saveState(); + + state["darkBack"] = darkBack; + state["lightBack"] = lightBack; + + return state; +} + +void TextureViewer::setPersistData(const QVariant &persistData) +{ + QVariantMap state = persistData.toMap(); + + darkBack = state["darkBack"].value(); + lightBack = state["lightBack"].value(); + + if(darkBack != lightBack) + { + ui->backcolorPick->setChecked(false); + ui->checkerBack->setChecked(true); + } + else + { + ui->backcolorPick->setChecked(true); + ui->checkerBack->setChecked(false); + } + + m_TexDisplay.darkBackgroundColour = + FloatVector(darkBack.redF(), darkBack.greenF(), darkBack.blueF(), 1.0f); + m_TexDisplay.lightBackgroundColour = + FloatVector(lightBack.redF(), lightBack.greenF(), lightBack.blueF(), 1.0f); + + ui->dockarea->restoreState(state); +} + float TextureViewer::GetFitScale() { FetchTexture *texptr = m_Ctx->GetTexture(m_TexDisplay.texid); @@ -2060,6 +2102,8 @@ void TextureViewer::on_backcolorPick_clicked() m_TexDisplay.darkBackgroundColour = m_TexDisplay.lightBackgroundColour = FloatVector(col.redF(), col.greenF(), col.blueF(), 1.0f); + darkBack = lightBack = col; + ui->backcolorPick->setChecked(true); ui->checkerBack->setChecked(false); @@ -2080,6 +2124,14 @@ void TextureViewer::on_checkerBack_clicked() m_TexDisplay.lightBackgroundColour = FloatVector(0.81f, 0.81f, 0.81f, 1.0f); m_TexDisplay.darkBackgroundColour = FloatVector(0.57f, 0.57f, 0.57f, 1.0f); + darkBack = QColor::fromRgb(int(m_TexDisplay.darkBackgroundColour.x * 255.0f), + int(m_TexDisplay.darkBackgroundColour.y * 255.0f), + int(m_TexDisplay.darkBackgroundColour.z * 255.0f)); + + lightBack = QColor::fromRgb(int(m_TexDisplay.lightBackgroundColour.x * 255.0f), + int(m_TexDisplay.lightBackgroundColour.y * 255.0f), + int(m_TexDisplay.lightBackgroundColour.z * 255.0f)); + INVOKE_MEMFN(RT_UpdateAndDisplay); if(m_Output == NULL) diff --git a/qrenderdoc/Windows/TextureViewer.h b/qrenderdoc/Windows/TextureViewer.h index fc20e8178..848174af7 100644 --- a/qrenderdoc/Windows/TextureViewer.h +++ b/qrenderdoc/Windows/TextureViewer.h @@ -117,6 +117,8 @@ class TextureViewer : public QFrame, public ILogViewerForm private: Q_OBJECT + Q_PROPERTY(QVariant persistData READ persistData WRITE setPersistData DESIGNABLE false SCRIPTABLE false) + public: explicit TextureViewer(CaptureContext *ctx, QWidget *parent = 0); ~TextureViewer(); @@ -125,6 +127,8 @@ public: void OnLogfileClosed(); void OnEventSelected(uint32_t eventID); + QVariant persistData(); + void setPersistData(const QVariant &persistData); private slots: // automatic slots @@ -216,6 +220,9 @@ private: PixelValue m_CurPixelValue; PixelValue m_CurHoverValue; + QColor darkBack; + QColor lightBack; + int m_HighWaterStatusLength = 0; int m_PrevFirstArraySlice = -1; int m_PrevHighestMip = -1;