From 0ecc6ca877679805795634df9430d8cdb8cff25a Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 2 May 2017 16:20:37 +0100 Subject: [PATCH] Enable QT_NO_CAST_FROM_ASCII & QT_NO_CAST_TO_ASCII * Added a couple of utility macros to help with the conversion. lit() is paired with tr() for untranslated text. * QFormatStr is more explicitly for non-textual formatting strings. * Both are just #define'd to QStringLiteral() --- qrenderdoc/Code/CaptureContext.cpp | 110 +++-- qrenderdoc/Code/CaptureContext.h | 6 +- qrenderdoc/Code/FormatElement.cpp | 157 +++---- .../Code/Interface/CommonPipelineState.cpp | 122 ++--- .../Code/Interface/PersistantConfig.cpp | 51 +-- qrenderdoc/Code/Interface/PersistantConfig.h | 24 +- qrenderdoc/Code/Interface/QRDInterface.cpp | 90 ++-- qrenderdoc/Code/Interface/QRDInterface.h | 29 +- qrenderdoc/Code/Interface/RemoteHost.cpp | 14 +- qrenderdoc/Code/QRDUtils.cpp | 246 +++++----- qrenderdoc/Code/QRDUtils.h | 11 +- qrenderdoc/Code/ReplayManager.cpp | 16 +- qrenderdoc/Code/ReplayManager.h | 2 + qrenderdoc/Code/Resources.cpp | 11 +- qrenderdoc/Code/pyrenderdoc/PythonContext.cpp | 45 +- qrenderdoc/Code/pyrenderdoc/PythonContext.h | 6 +- qrenderdoc/Code/qrenderdoc.cpp | 51 ++- qrenderdoc/Widgets/BufferFormatSpecifier.cpp | 4 +- qrenderdoc/Windows/APIInspector.cpp | 14 +- qrenderdoc/Windows/BufferViewer.cpp | 90 ++-- qrenderdoc/Windows/BufferViewer.h | 4 +- .../Windows/ConstantBufferPreviewer.cpp | 22 +- qrenderdoc/Windows/DebugMessageView.cpp | 20 +- qrenderdoc/Windows/Dialogs/AboutDialog.cpp | 21 +- qrenderdoc/Windows/Dialogs/CaptureDialog.cpp | 94 ++-- .../Windows/Dialogs/EnvironmentEditor.cpp | 6 +- qrenderdoc/Windows/Dialogs/LiveCapture.cpp | 46 +- .../Windows/Dialogs/OrderedListEditor.cpp | 6 +- qrenderdoc/Windows/Dialogs/RemoteManager.cpp | 26 +- qrenderdoc/Windows/Dialogs/SettingsDialog.cpp | 32 +- .../Windows/Dialogs/SuggestRemoteDialog.cpp | 4 +- .../Windows/Dialogs/TextureSaveDialog.cpp | 22 +- qrenderdoc/Windows/Dialogs/TipsDialog.cpp | 359 ++++++++------- .../Windows/Dialogs/VirtualFileDialog.cpp | 40 +- qrenderdoc/Windows/EventBrowser.cpp | 59 +-- qrenderdoc/Windows/MainWindow.cpp | 121 ++--- qrenderdoc/Windows/MainWindow.h | 2 +- .../D3D11PipelineStateViewer.cpp | 287 ++++++------ .../D3D12PipelineStateViewer.cpp | 295 ++++++------ .../PipelineState/GLPipelineStateViewer.cpp | 423 +++++++++--------- .../PipelineState/PipelineStateViewer.cpp | 60 +-- .../VulkanPipelineStateViewer.cpp | 351 ++++++++------- qrenderdoc/Windows/PixelHistoryView.cpp | 60 +-- qrenderdoc/Windows/PythonShell.cpp | 37 +- qrenderdoc/Windows/ShaderViewer.cpp | 99 ++-- qrenderdoc/Windows/ShaderViewer.h | 2 +- qrenderdoc/Windows/StatisticsViewer.cpp | 180 ++++---- qrenderdoc/Windows/TextureViewer.cpp | 215 ++++----- qrenderdoc/qrenderdoc.pro | 3 + qrenderdoc/qrenderdoc_local.vcxproj | 2 +- 50 files changed, 2076 insertions(+), 1921 deletions(-) diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index 2815fb5d9..b4b46492a 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -59,7 +59,7 @@ CaptureContext::CaptureContext(QString paramFilename, QString remoteHost, uint32 memset(&m_APIProps, 0, sizeof(m_APIProps)); - qApp->setApplicationVersion(RENDERDOC_GetVersionString()); + qApp->setApplicationVersion(QString::fromLatin1(RENDERDOC_GetVersionString())); m_Icon = new QIcon(); m_Icon->addFile(QStringLiteral(":/icon.ico"), QSize(), QIcon::Normal, QIcon::Off); @@ -99,17 +99,19 @@ QString CaptureContext::TempLogFilename(QString appname) QDir dir(folder); - if(folder == "" || !dir.exists()) + if(folder.isEmpty() || !dir.exists()) { dir = QDir(QDir::tempPath()); - dir.mkdir("RenderDoc"); + dir.mkdir(lit("RenderDoc")); - dir = QDir(dir.absoluteFilePath("RenderDoc")); + dir = QDir(dir.absoluteFilePath(lit("RenderDoc"))); } return dir.absoluteFilePath( - appname + "_" + QDateTime::currentDateTimeUtc().toString("yyyy.MM.dd_HH.mm.ss") + ".rdc"); + QFormatStr("%1_%2.rdc") + .arg(appname) + .arg(QDateTime::currentDateTimeUtc().toString(lit("yyyy.MM.dd_HH.mm.ss")))); } void CaptureContext::LoadLogfile(const QString &logFile, const QString &origFilename, @@ -123,9 +125,9 @@ void CaptureContext::LoadLogfile(const QString &logFile, const QString &origFile thread->selfDelete(true); thread->start(); - ShowProgressDialog( - m_MainWindow, QApplication::translate("CaptureContext", "Loading Log: %1").arg(origFilename), - [this]() { return !m_LoadInProgress; }, [this]() { return UpdateLoadProgress(); }); + ShowProgressDialog(m_MainWindow, tr("Loading Log: %1").arg(origFilename), + [this]() { return !m_LoadInProgress; }, + [this]() { return UpdateLoadProgress(); }); m_MainWindow->setProgress(-1.0f); @@ -178,14 +180,14 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString & // if the renderer isn't running, we hit a failure case so display an error message if(!m_Renderer.IsRunning()) { - QString errmsg = "Unknown error message"; - errmsg = ToQStr(m_Renderer.GetCreateStatus()); + QString errmsg = ToQStr(m_Renderer.GetCreateStatus()); - RDDialog::critical(NULL, "Error opening log", - QString("%1\nFailed to open logfile for replay: %2.\n\n" - "Check diagnostic log in Help menu for more details.") - .arg(logFile) - .arg(errmsg)); + QString messageText = tr("%1\nFailed to open logfile for replay: %2.\n\n" + "Check diagnostic log in Help menu for more details.") + .arg(logFile) + .arg(errmsg); + + RDDialog::critical(NULL, tr("Error opening log"), messageText); m_LoadInProgress = false; return; @@ -272,12 +274,11 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString & Config().DegradedLog_LastUpdate = today; RDDialog::critical( - NULL, "Degraded support of log", - QString( - "%1\nThis log opened with degraded support - " - "this could mean missing hardware support caused a fallback to software rendering.\n\n" - "This warning will not appear every time this happens, " - "check debug errors/warnings window for more details.") + NULL, tr("Degraded support of log"), + tr("%1\nThis log opened with degraded support - " + "this could mean missing hardware support caused a fallback to software rendering.\n\n" + "This warning will not appear every time this happens, " + "check debug errors/warnings window for more details.") .arg(origFilename)); } @@ -456,34 +457,23 @@ void CaptureContext::AddFakeProfileMarkers() minOutCount = qMax(1, minOutCount); + QString targets = draws[end].depthOut == ResourceId() ? tr("Targets") : tr("Targets + Depth"); + if(copyOnly) - mark.name = QApplication::translate("CaptureContext", "Copy/Clear Pass #%1") - .arg(copypassID++) - .toUtf8() - .data(); + mark.name = tr("Copy/Clear Pass #%1").arg(copypassID++).toUtf8().data(); else if(draws[refdraw].flags & DrawFlags::Dispatch) - mark.name = QApplication::translate("CaptureContext", "Compute Pass #%1") - .arg(computepassID++) - .toUtf8() - .data(); + mark.name = tr("Compute Pass #%1").arg(computepassID++).toUtf8().data(); else if(maxOutCount == 0) - mark.name = QApplication::translate("CaptureContext", "Depth-only Pass #%1") - .arg(depthpassID++) - .toUtf8() - .data(); + mark.name = tr("Depth-only Pass #%1").arg(depthpassID++).toUtf8().data(); else if(minOutCount == maxOutCount) - mark.name = QApplication::translate("CaptureContext", "Colour Pass #%1 (%2 Targets%3)") - .arg(passID++) - .arg(minOutCount) - .arg(draws[end].depthOut == ResourceId() ? "" : " + Depth") - .toUtf8() - .data(); + mark.name = + tr("Colour Pass #%1 (%2 %3)").arg(passID++).arg(minOutCount).arg(targets).toUtf8().data(); else - mark.name = QApplication::translate("CaptureContext", "Colour Pass #%1 (%2-%3 Targets%4)") + mark.name = tr("Colour Pass #%1 (%2-%3 %4)") .arg(passID++) .arg(minOutCount) .arg(maxOutCount) - .arg(draws[end].depthOut == ResourceId() ? "" : " + Depth") + .arg(targets) .toUtf8() .data(); @@ -518,7 +508,7 @@ void CaptureContext::CloseLogfile() if(!m_LogLoaded) return; - m_LogFile = ""; + m_LogFile = QString(); m_Renderer.CloseThread(); @@ -635,7 +625,7 @@ IEventBrowser *CaptureContext::GetEventBrowser() return m_EventBrowser; m_EventBrowser = new EventBrowser(*this, m_MainWindow); - m_EventBrowser->setObjectName("eventBrowser"); + m_EventBrowser->setObjectName(lit("eventBrowser")); setupDockWindow(m_EventBrowser); return m_EventBrowser; @@ -647,7 +637,7 @@ IAPIInspector *CaptureContext::GetAPIInspector() return m_APIInspector; m_APIInspector = new APIInspector(*this, m_MainWindow); - m_APIInspector->setObjectName("apiInspector"); + m_APIInspector->setObjectName(lit("apiInspector")); setupDockWindow(m_APIInspector); return m_APIInspector; @@ -659,7 +649,7 @@ ITextureViewer *CaptureContext::GetTextureViewer() return m_TextureViewer; m_TextureViewer = new TextureViewer(*this, m_MainWindow); - m_TextureViewer->setObjectName("textureViewer"); + m_TextureViewer->setObjectName(lit("textureViewer")); setupDockWindow(m_TextureViewer); return m_TextureViewer; @@ -671,7 +661,7 @@ IBufferViewer *CaptureContext::GetMeshPreview() return m_MeshPreview; m_MeshPreview = new BufferViewer(*this, true, m_MainWindow); - m_MeshPreview->setObjectName("meshPreview"); + m_MeshPreview->setObjectName(lit("meshPreview")); setupDockWindow(m_MeshPreview); return m_MeshPreview; @@ -683,7 +673,7 @@ IPipelineStateViewer *CaptureContext::GetPipelineViewer() return m_PipelineViewer; m_PipelineViewer = new PipelineStateViewer(*this, m_MainWindow); - m_PipelineViewer->setObjectName("pipelineViewer"); + m_PipelineViewer->setObjectName(lit("pipelineViewer")); setupDockWindow(m_PipelineViewer); return m_PipelineViewer; @@ -706,7 +696,7 @@ ICaptureDialog *CaptureContext::GetCaptureDialog() return m_MainWindow->OnInjectTrigger(PID, env, name, opts, callback); }, m_MainWindow); - m_CaptureDialog->setObjectName("capDialog"); + m_CaptureDialog->setObjectName(lit("capDialog")); m_CaptureDialog->setWindowIcon(*m_Icon); return m_CaptureDialog; @@ -718,7 +708,7 @@ IDebugMessageView *CaptureContext::GetDebugMessageView() return m_DebugMessageView; m_DebugMessageView = new DebugMessageView(*this, m_MainWindow); - m_DebugMessageView->setObjectName("debugMessageView"); + m_DebugMessageView->setObjectName(lit("debugMessageView")); setupDockWindow(m_DebugMessageView); return m_DebugMessageView; @@ -730,7 +720,7 @@ IStatisticsViewer *CaptureContext::GetStatisticsViewer() return m_StatisticsViewer; m_StatisticsViewer = new StatisticsViewer(*this, m_MainWindow); - m_StatisticsViewer->setObjectName("statisticsViewer"); + m_StatisticsViewer->setObjectName(lit("statisticsViewer")); setupDockWindow(m_StatisticsViewer); return m_StatisticsViewer; @@ -742,7 +732,7 @@ IPythonShell *CaptureContext::GetPythonShell() return m_PythonShell; m_PythonShell = new PythonShell(*this, m_MainWindow); - m_PythonShell->setObjectName("pythonShell"); + m_PythonShell->setObjectName(lit("pythonShell")); setupDockWindow(m_PythonShell); return m_PythonShell; @@ -854,39 +844,39 @@ IPixelHistoryView *CaptureContext::ViewPixelHistory(ResourceId texID, int x, int QWidget *CaptureContext::CreateBuiltinWindow(const QString &objectName) { - if(objectName == "textureViewer") + if(objectName == lit("textureViewer")) { return GetTextureViewer()->Widget(); } - else if(objectName == "eventBrowser") + else if(objectName == lit("eventBrowser")) { return GetEventBrowser()->Widget(); } - else if(objectName == "pipelineViewer") + else if(objectName == lit("pipelineViewer")) { return GetPipelineViewer()->Widget(); } - else if(objectName == "meshPreview") + else if(objectName == lit("meshPreview")) { return GetMeshPreview()->Widget(); } - else if(objectName == "apiInspector") + else if(objectName == lit("apiInspector")) { return GetAPIInspector()->Widget(); } - else if(objectName == "capDialog") + else if(objectName == lit("capDialog")) { return GetCaptureDialog()->Widget(); } - else if(objectName == "debugMessageView") + else if(objectName == lit("debugMessageView")) { return GetDebugMessageView()->Widget(); } - else if(objectName == "statisticsViewer") + else if(objectName == lit("statisticsViewer")) { return GetStatisticsViewer()->Widget(); } - else if(objectName == "pythonShell") + else if(objectName == lit("pythonShell")) { return GetPythonShell()->Widget(); } diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index ebd2596ad..eebd593c5 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -52,6 +52,8 @@ QString ConfigFilePath(const QString &filename); class CaptureContext : public ICaptureContext { + Q_DECLARE_TR_FUNCTIONS(CaptureContext); + public: CaptureContext(QString paramFilename, QString remoteHost, uint32_t remoteIdent, bool temp, PersistantConfig &cfg); @@ -162,9 +164,9 @@ public: ShaderStage stage) override; IBufferViewer *ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, - const QString &format = "") override; + const QString &format = QString()) override; IBufferViewer *ViewTextureAsBuffer(uint32_t arrayIdx, uint32_t mip, ResourceId id, - const QString &format = "") override; + const QString &format = QString()) override; IConstantBufferPreviewer *ViewConstantBuffer(ShaderStage stage, uint32_t slot, uint32_t idx) override; diff --git a/qrenderdoc/Code/FormatElement.cpp b/qrenderdoc/Code/FormatElement.cpp index 2f13b09ad..3e0e94683 100644 --- a/qrenderdoc/Code/FormatElement.cpp +++ b/qrenderdoc/Code/FormatElement.cpp @@ -22,6 +22,7 @@ * THE SOFTWARE. ******************************************************************************/ +#include #include #include #include "QRDUtils.h" @@ -112,7 +113,6 @@ static QVariant interpret(const ResourceFormat &f, byte comp) FormatElement::FormatElement() { - name = ""; buffer = 0; offset = 0; perinstance = false; @@ -146,42 +146,42 @@ QList FormatElement::ParseFormatString(const QString &formatStrin // regex doesn't account for trailing or preceeding whitespace, or comments QRegularExpression regExpr( - "^(row_major\\s+)?" // row_major matrix - "(" - "uintten|unormten" - "|floateleven" - "|unormh|unormb" - "|snormh|snormb" - "|bool" // bool is stored as 4-byte int - "|byte|short|int" // signed ints - "|ubyte|ushort|uint" // unsigned ints - "|xbyte|xshort|xint" // hex ints - "|half|float|double" // float types - "|vec|uvec|ivec" // OpenGL vector types - "|mat|umat|imat" // OpenGL matrix types - ")" - "([1-9])?" // might be a vector - "(x[1-9])?" // or a matrix - "(\\s+[A-Za-z_][A-Za-z0-9_]*)?" // get identifier name - "(\\[[0-9]+\\])?" // optional array dimension - "(\\s*:\\s*[A-Za-z_][A-Za-z0-9_]*)?" // optional semantic - "$"); + lit("^(row_major\\s+)?" // row_major matrix + "(" + "uintten|unormten" + "|floateleven" + "|unormh|unormb" + "|snormh|snormb" + "|bool" // bool is stored as 4-byte int + "|byte|short|int" // signed ints + "|ubyte|ushort|uint" // unsigned ints + "|xbyte|xshort|xint" // hex ints + "|half|float|double" // float types + "|vec|uvec|ivec" // OpenGL vector types + "|mat|umat|imat" // OpenGL matrix types + ")" + "([1-9])?" // might be a vector + "(x[1-9])?" // or a matrix + "(\\s+[A-Za-z_][A-Za-z0-9_]*)?" // get identifier name + "(\\[[0-9]+\\])?" // optional array dimension + "(\\s*:\\s*[A-Za-z_][A-Za-z0-9_]*)?" // optional semantic + "$")); bool success = true; - errors = ""; + errors = QString(); QString text = formatString; - text = text.replace("{", "").replace("}", ""); + text = text.replace(lit("{"), QString()).replace(lit("}"), QString()); - QRegularExpression c_comments("/\\*[^*]*\\*+(?:[^*/][^*]*\\*+)*/"); - QRegularExpression cpp_comments("//.*"); - text = text.replace(c_comments, "").replace(cpp_comments, ""); + QRegularExpression c_comments(lit("/\\*[^*]*\\*+(?:[^*/][^*]*\\*+)*/")); + QRegularExpression cpp_comments(lit("//.*")); + text = text.replace(c_comments, QString()).replace(cpp_comments, QString()); uint32_t offset = 0; // get each line and parse it to determine the format the user wanted - for(QString &l : text.split(QChar(';'))) + for(QString &l : text.split(QLatin1Char(';'))) { QString line = l.trimmed(); @@ -192,17 +192,17 @@ QList FormatElement::ParseFormatString(const QString &formatStrin if(!match.hasMatch()) { - errors = "Couldn't parse line:\n" + line; + errors = tr("Couldn't parse line: %1\n").arg(line); success = false; break; } QString basetype = match.captured(2); bool row_major = !match.captured(1).isEmpty(); - QString vectorDim = !match.captured(3).isEmpty() ? match.captured(3) : "1"; - QString matrixDim = !match.captured(4).isEmpty() ? match.captured(4).mid(1) : "1"; - QString name = !match.captured(5).isEmpty() ? match.captured(5).trimmed() : "data"; - QString arrayDim = !match.captured(6).isEmpty() ? match.captured(6).trimmed() : "[1]"; + QString vectorDim = !match.captured(3).isEmpty() ? match.captured(3) : lit("1"); + QString matrixDim = !match.captured(4).isEmpty() ? match.captured(4).mid(1) : lit("1"); + QString name = !match.captured(5).isEmpty() ? match.captured(5).trimmed() : lit("data"); + QString arrayDim = !match.captured(6).isEmpty() ? match.captured(6).trimmed() : lit("[1]"); arrayDim = arrayDim.mid(1, arrayDim.count() - 2); if(!match.captured(4).isEmpty()) @@ -222,7 +222,7 @@ QList FormatElement::ParseFormatString(const QString &formatStrin uint32_t width = 0; // check for square matrix declarations like 'mat4' and 'mat3' - if(basetype == "mat" && !match.captured(4).isEmpty()) + if(basetype == lit("mat") && !match.captured(4).isEmpty()) matrixDim = vectorDim; // calculate format @@ -232,7 +232,7 @@ QList FormatElement::ParseFormatString(const QString &formatStrin count = vectorDim.toUInt(&ok); if(!ok) { - errors = "Invalid vector dimension on line:\n" + line; + errors = tr("Invalid vector dimension on line: %1\n").arg(line); success = false; break; } @@ -247,82 +247,83 @@ QList FormatElement::ParseFormatString(const QString &formatStrin matrixCount = matrixDim.toUInt(&ok); if(!ok) { - errors = "Invalid matrix second dimension on line:\n" + line; + errors = tr("Invalid matrix second dimension on line: %1\n").arg(line); success = false; break; } - if(basetype == "bool") + if(basetype == lit("bool")) { type = CompType::UInt; width = 4; } - else if(basetype == "byte") + else if(basetype == lit("byte")) { type = CompType::SInt; width = 1; } - else if(basetype == "ubyte" || basetype == "xbyte") + else if(basetype == lit("ubyte") || basetype == lit("xbyte")) { type = CompType::UInt; width = 1; } - else if(basetype == "short") + else if(basetype == lit("short")) { type = CompType::SInt; width = 2; } - else if(basetype == "ushort" || basetype == "xshort") + else if(basetype == lit("ushort") || basetype == lit("xshort")) { type = CompType::UInt; width = 2; } - else if(basetype == "int" || basetype == "ivec" || basetype == "imat") + else if(basetype == lit("int") || basetype == lit("ivec") || basetype == lit("imat")) { type = CompType::SInt; width = 4; } - else if(basetype == "uint" || basetype == "xint" || basetype == "uvec" || basetype == "umat") + else if(basetype == lit("uint") || basetype == lit("xint") || basetype == lit("uvec") || + basetype == lit("umat")) { type = CompType::UInt; width = 4; } - else if(basetype == "half") + else if(basetype == lit("half")) { type = CompType::Float; width = 2; } - else if(basetype == "float" || basetype == "vec" || basetype == "mat") + else if(basetype == lit("float") || basetype == lit("vec") || basetype == lit("mat")) { type = CompType::Float; width = 4; } - else if(basetype == "double") + else if(basetype == lit("double")) { type = CompType::Double; width = 8; } - else if(basetype == "unormh") + else if(basetype == lit("unormh")) { type = CompType::UNorm; width = 2; } - else if(basetype == "unormb") + else if(basetype == lit("unormb")) { type = CompType::UNorm; width = 1; } - else if(basetype == "snormh") + else if(basetype == lit("snormh")) { type = CompType::SNorm; width = 2; } - else if(basetype == "snormb") + else if(basetype == lit("snormb")) { type = CompType::SNorm; width = 1; } - else if(basetype == "uintten") + else if(basetype == lit("uintten")) { fmt.compType = CompType::UInt; fmt.compCount = 4 * count; @@ -330,7 +331,7 @@ QList FormatElement::ParseFormatString(const QString &formatStrin fmt.special = true; fmt.specialFormat = SpecialFormat::R10G10B10A2; } - else if(basetype == "unormten") + else if(basetype == lit("unormten")) { fmt.compType = CompType::UInt; fmt.compCount = 4 * count; @@ -338,7 +339,7 @@ QList FormatElement::ParseFormatString(const QString &formatStrin fmt.special = true; fmt.specialFormat = SpecialFormat::R10G10B10A2; } - else if(basetype == "floateleven") + else if(basetype == lit("floateleven")) { fmt.compType = CompType::Float; fmt.compCount = 3 * count; @@ -348,13 +349,13 @@ QList FormatElement::ParseFormatString(const QString &formatStrin } else { - errors = "Unrecognised basic type on line:\n" + line; + errors = tr("Unrecognised basic type on line: %1\n").arg(line); success = false; break; } } - if(basetype == "xint" || basetype == "xshort" || basetype == "xbyte") + if(basetype == lit("xint") || basetype == lit("xshort") || basetype == lit("xbyte")) hex = true; if(fmt.compType == CompType::Typeless) @@ -400,7 +401,7 @@ QList FormatElement::ParseFormatString(const QString &formatStrin for(uint a = 0; a < arrayCount; a++) { - FormatElement elem(QString("%1[%2]").arg(name).arg(a), 0, offset, false, 1, row_major, + FormatElement elem(QFormatStr("%1[%2]").arg(name).arg(a), 0, offset, false, 1, row_major, matrixCount, fmt, hex); elems.push_back(elem); @@ -432,7 +433,7 @@ QList FormatElement::ParseFormatString(const QString &formatStrin if(maxLen > 0 && maxLen < 4) fmt.compByteWidth = 1; - elems.push_back(FormatElement("data", 0, 0, false, 1, false, 1, fmt, true)); + elems.push_back(FormatElement(lit("data"), 0, 0, false, 1, false, 1, fmt, true)); } return elems; @@ -826,22 +827,22 @@ QString TypeString(const ShaderVariable &v) if(v.members.count > 0) { if(v.isStruct) - return "struct"; + return lit("struct"); else - return QString("%1[%2]").arg(TypeString(v.members[0]), v.members.count); + return QFormatStr("%1[%2]").arg(TypeString(v.members[0]), v.members.count); } QString typeStr = ToQStr(v.type); if(v.displayAsHex && v.type == VarType::UInt) - typeStr = "xint"; + typeStr = lit("xint"); if(v.rows == 1 && v.columns == 1) return typeStr; if(v.rows == 1) - return QString("%1%2").arg(typeStr).arg(v.columns); + return QFormatStr("%1%2").arg(typeStr).arg(v.columns); else - return QString("%1%2x%3").arg(typeStr).arg(v.rows).arg(v.columns); + return QFormatStr("%1%2x%3").arg(typeStr).arg(v.rows).arg(v.columns); } template @@ -850,12 +851,18 @@ static QString RowValuesToString(int cols, el x, el y, el z, el w) if(cols == 1) return Formatter::Format(x); else if(cols == 2) - return Formatter::Format(x) + ", " + Formatter::Format(y); + return QFormatStr("%1, %2").arg(Formatter::Format(x)).arg(Formatter::Format(y)); else if(cols == 3) - return Formatter::Format(x) + ", " + Formatter::Format(y) + ", " + Formatter::Format(z); + return QFormatStr("%1, %2, %3, %4") + .arg(Formatter::Format(x)) + .arg(Formatter::Format(y)) + .arg(Formatter::Format(z)); else - return Formatter::Format(x) + ", " + Formatter::Format(y) + ", " + Formatter::Format(z) + ", " + - Formatter::Format(w); + return QFormatStr("%1, %2, %3, %4") + .arg(Formatter::Format(x)) + .arg(Formatter::Format(y)) + .arg(Formatter::Format(z)) + .arg(Formatter::Format(w)); } QString RowString(const ShaderVariable &v, uint32_t row, VarType type) @@ -884,20 +891,20 @@ QString RowString(const ShaderVariable &v, uint32_t row, VarType type) QString VarString(const ShaderVariable &v) { if(v.members.count > 0) - return ""; + return QString(); if(v.rows == 1) return RowString(v, 0); - QString ret = ""; + QString ret; for(int i = 0; i < (int)v.rows; i++) { if(i > 0) - ret += ", "; - ret += "{" + RowString(v, i) + "}"; + ret += lit(", "); + ret += lit("{") + RowString(v, i) + lit("}"); } - return "{ " + ret + " }"; + return lit("{ ") + ret + lit(" }"); } QString RowTypeString(const ShaderVariable &v) @@ -905,21 +912,21 @@ QString RowTypeString(const ShaderVariable &v) if(v.members.count > 0) { if(v.isStruct) - return "struct"; + return lit("struct"); else - return "flibbertygibbet"; + return lit("flibbertygibbet"); } if(v.rows == 0 && v.columns == 0) - return "-"; + return lit("-"); QString typeStr = ToQStr(v.type); if(v.displayAsHex && v.type == VarType::UInt) - typeStr = "xint"; + typeStr = lit("xint"); if(v.columns == 1) return typeStr; - return QString("%1%2").arg(typeStr).arg(v.columns); + return QFormatStr("%1%2").arg(typeStr).arg(v.columns); } diff --git a/qrenderdoc/Code/Interface/CommonPipelineState.cpp b/qrenderdoc/Code/Interface/CommonPipelineState.cpp index 750358b35..febed0c1a 100644 --- a/qrenderdoc/Code/Interface/CommonPipelineState.cpp +++ b/qrenderdoc/Code/Interface/CommonPipelineState.cpp @@ -49,7 +49,7 @@ QString CommonPipelineState::GetResourceLayout(ResourceId id) } } - return "Unknown"; + return lit("Unknown"); } QString CommonPipelineState::Abbrev(ShaderStage stage) @@ -59,12 +59,12 @@ QString CommonPipelineState::Abbrev(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: return "VS"; - case ShaderStage::Hull: return "HS"; - case ShaderStage::Domain: return "DS"; - case ShaderStage::Geometry: return "GS"; - case ShaderStage::Pixel: return "PS"; - case ShaderStage::Compute: return "CS"; + case ShaderStage::Vertex: return lit("VS"); + case ShaderStage::Hull: return lit("HS"); + case ShaderStage::Domain: return lit("DS"); + case ShaderStage::Geometry: return lit("GS"); + case ShaderStage::Pixel: return lit("PS"); + case ShaderStage::Compute: return lit("CS"); default: break; } } @@ -73,17 +73,17 @@ QString CommonPipelineState::Abbrev(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: return "VS"; - case ShaderStage::Tess_Control: return "TCS"; - case ShaderStage::Tess_Eval: return "TES"; - case ShaderStage::Geometry: return "GS"; - case ShaderStage::Fragment: return "FS"; - case ShaderStage::Compute: return "CS"; + case ShaderStage::Vertex: return lit("VS"); + case ShaderStage::Tess_Control: return lit("TCS"); + case ShaderStage::Tess_Eval: return lit("TES"); + case ShaderStage::Geometry: return lit("GS"); + case ShaderStage::Fragment: return lit("FS"); + case ShaderStage::Compute: return lit("CS"); default: break; } } - return "?S"; + return lit("?S"); } QString CommonPipelineState::OutputAbbrev() @@ -91,10 +91,10 @@ QString CommonPipelineState::OutputAbbrev() if(IsLogGL() || (!LogLoaded() && DefaultType == GraphicsAPI::OpenGL) || IsLogVK() || (!LogLoaded() && DefaultType == GraphicsAPI::Vulkan)) { - return "FB"; + return lit("FB"); } - return "RT"; + return lit("RT"); } const D3D11Pipe::Shader &CommonPipelineState::GetD3D11Stage(ShaderStage stage) @@ -178,10 +178,10 @@ QString CommonPipelineState::GetShaderExtension() if(IsLogGL() || (!LogLoaded() && DefaultType == GraphicsAPI::OpenGL) || IsLogVK() || (!LogLoaded() && DefaultType == GraphicsAPI::Vulkan)) { - return "glsl"; + return lit("glsl"); } - return "hlsl"; + return lit("hlsl"); } Viewport CommonPipelineState::GetViewport(int index) @@ -359,12 +359,12 @@ QString CommonPipelineState::GetShaderEntryPoint(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: ret = m_Vulkan->m_VS.entryPoint; break; - case ShaderStage::Tess_Control: ret = m_Vulkan->m_TCS.entryPoint; break; - case ShaderStage::Tess_Eval: ret = m_Vulkan->m_TES.entryPoint; break; - case ShaderStage::Geometry: ret = m_Vulkan->m_GS.entryPoint; break; - case ShaderStage::Fragment: ret = m_Vulkan->m_FS.entryPoint; break; - case ShaderStage::Compute: ret = m_Vulkan->m_CS.entryPoint; break; + case ShaderStage::Vertex: ret = ToQStr(m_Vulkan->m_VS.entryPoint); break; + case ShaderStage::Tess_Control: ret = ToQStr(m_Vulkan->m_TCS.entryPoint); break; + case ShaderStage::Tess_Eval: ret = ToQStr(m_Vulkan->m_TES.entryPoint); break; + case ShaderStage::Geometry: ret = ToQStr(m_Vulkan->m_GS.entryPoint); break; + case ShaderStage::Fragment: ret = ToQStr(m_Vulkan->m_FS.entryPoint); break; + case ShaderStage::Compute: ret = ToQStr(m_Vulkan->m_CS.entryPoint); break; default: break; } } @@ -443,12 +443,12 @@ QString CommonPipelineState::GetShaderName(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: ret = m_D3D11->m_VS.name; break; - case ShaderStage::Domain: ret = m_D3D11->m_DS.name; break; - case ShaderStage::Hull: ret = m_D3D11->m_HS.name; break; - case ShaderStage::Geometry: ret = m_D3D11->m_GS.name; break; - case ShaderStage::Pixel: ret = m_D3D11->m_PS.name; break; - case ShaderStage::Compute: ret = m_D3D11->m_CS.name; break; + case ShaderStage::Vertex: ret = ToQStr(m_D3D11->m_VS.name); break; + case ShaderStage::Domain: ret = ToQStr(m_D3D11->m_DS.name); break; + case ShaderStage::Hull: ret = ToQStr(m_D3D11->m_HS.name); break; + case ShaderStage::Geometry: ret = ToQStr(m_D3D11->m_GS.name); break; + case ShaderStage::Pixel: ret = ToQStr(m_D3D11->m_PS.name); break; + case ShaderStage::Compute: ret = ToQStr(m_D3D11->m_CS.name); break; default: break; } } @@ -456,12 +456,12 @@ QString CommonPipelineState::GetShaderName(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: ret = QString(m_D3D12->name) + " VS"; break; - case ShaderStage::Domain: ret = QString(m_D3D12->name) + " DS"; break; - case ShaderStage::Hull: ret = QString(m_D3D12->name) + " HS"; break; - case ShaderStage::Geometry: ret = QString(m_D3D12->name) + " GS"; break; - case ShaderStage::Pixel: ret = QString(m_D3D12->name) + " PS"; break; - case ShaderStage::Compute: ret = QString(m_D3D12->name) + " CS"; break; + case ShaderStage::Vertex: ret = ToQStr(m_D3D12->name) + lit(" VS"); break; + case ShaderStage::Domain: ret = ToQStr(m_D3D12->name) + lit(" DS"); break; + case ShaderStage::Hull: ret = ToQStr(m_D3D12->name) + lit(" HS"); break; + case ShaderStage::Geometry: ret = ToQStr(m_D3D12->name) + lit(" GS"); break; + case ShaderStage::Pixel: ret = ToQStr(m_D3D12->name) + lit(" PS"); break; + case ShaderStage::Compute: ret = ToQStr(m_D3D12->name) + lit(" CS"); break; default: break; } } @@ -469,12 +469,12 @@ QString CommonPipelineState::GetShaderName(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: ret = m_GL->m_VS.ShaderName; break; - case ShaderStage::Tess_Control: ret = m_GL->m_TCS.ShaderName; break; - case ShaderStage::Tess_Eval: ret = m_GL->m_TES.ShaderName; break; - case ShaderStage::Geometry: ret = m_GL->m_GS.ShaderName; break; - case ShaderStage::Fragment: ret = m_GL->m_FS.ShaderName; break; - case ShaderStage::Compute: ret = m_GL->m_CS.ShaderName; break; + case ShaderStage::Vertex: ret = ToQStr(m_GL->m_VS.ShaderName); break; + case ShaderStage::Tess_Control: ret = ToQStr(m_GL->m_TCS.ShaderName); break; + case ShaderStage::Tess_Eval: ret = ToQStr(m_GL->m_TES.ShaderName); break; + case ShaderStage::Geometry: ret = ToQStr(m_GL->m_GS.ShaderName); break; + case ShaderStage::Fragment: ret = ToQStr(m_GL->m_FS.ShaderName); break; + case ShaderStage::Compute: ret = ToQStr(m_GL->m_CS.ShaderName); break; default: break; } } @@ -482,12 +482,12 @@ QString CommonPipelineState::GetShaderName(ShaderStage stage) { switch(stage) { - case ShaderStage::Vertex: ret = m_Vulkan->m_VS.name; break; - case ShaderStage::Domain: ret = m_Vulkan->m_TCS.name; break; - case ShaderStage::Hull: ret = m_Vulkan->m_TES.name; break; - case ShaderStage::Geometry: ret = m_Vulkan->m_GS.name; break; - case ShaderStage::Pixel: ret = m_Vulkan->m_FS.name; break; - case ShaderStage::Compute: ret = m_Vulkan->m_CS.name; break; + case ShaderStage::Vertex: ret = ToQStr(m_Vulkan->m_VS.name); break; + case ShaderStage::Domain: ret = ToQStr(m_Vulkan->m_TCS.name); break; + case ShaderStage::Hull: ret = ToQStr(m_Vulkan->m_TES.name); break; + case ShaderStage::Geometry: ret = ToQStr(m_Vulkan->m_GS.name); break; + case ShaderStage::Pixel: ret = ToQStr(m_Vulkan->m_FS.name); break; + case ShaderStage::Compute: ret = ToQStr(m_Vulkan->m_CS.name); break; default: break; } } @@ -641,12 +641,12 @@ QVector CommonPipelineState::GetVertexInputs() QVector ret(layouts.count); for(int i = 0; i < layouts.count; i++) { - QString semName(layouts[i].SemanticName); + QString semName = ToQStr(layouts[i].SemanticName); bool needsSemanticIdx = false; for(int j = 0; j < layouts.count; j++) { - if(i != j && !semName.compare(QString(layouts[j].SemanticName), Qt::CaseInsensitive)) + if(i != j && !semName.compare(ToQStr(layouts[j].SemanticName), Qt::CaseInsensitive)) { needsSemanticIdx = true; break; @@ -662,7 +662,8 @@ QVector CommonPipelineState::GetVertexInputs() byteOffs[layouts[i].InputSlot] += layouts[i].Format.compByteWidth * layouts[i].Format.compCount; - ret[i].Name = semName + (needsSemanticIdx ? QString::number(layouts[i].SemanticIndex) : ""); + ret[i].Name = + semName + (needsSemanticIdx ? QString::number(layouts[i].SemanticIndex) : QString()); ret[i].VertexBuffer = (int)layouts[i].InputSlot; ret[i].RelativeByteOffset = offs; ret[i].PerInstance = layouts[i].PerInstance; @@ -676,7 +677,7 @@ QVector CommonPipelineState::GetVertexInputs() rdctype::array &sig = m_D3D11->m_IA.Bytecode->InputSig; for(int ia = 0; ia < sig.count; ia++) { - if(!semName.compare(QString(sig[ia].semanticName), Qt::CaseInsensitive) && + if(!semName.compare(ToQStr(sig[ia].semanticName), Qt::CaseInsensitive) && sig[ia].semanticIndex == layouts[i].SemanticIndex) { ret[i].Used = true; @@ -697,12 +698,12 @@ QVector CommonPipelineState::GetVertexInputs() QVector ret(layouts.count); for(int i = 0; i < layouts.count; i++) { - QString semName(layouts[i].SemanticName); + QString semName = ToQStr(layouts[i].SemanticName); bool needsSemanticIdx = false; for(int j = 0; j < layouts.count; j++) { - if(i != j && !semName.compare(QString(layouts[j].SemanticName), Qt::CaseInsensitive)) + if(i != j && !semName.compare(ToQStr(layouts[j].SemanticName), Qt::CaseInsensitive)) { needsSemanticIdx = true; break; @@ -718,7 +719,8 @@ QVector CommonPipelineState::GetVertexInputs() byteOffs[layouts[i].InputSlot] += layouts[i].Format.compByteWidth * layouts[i].Format.compCount; - ret[i].Name = semName + (needsSemanticIdx ? QString::number(layouts[i].SemanticIndex) : ""); + ret[i].Name = + semName + (needsSemanticIdx ? QString::number(layouts[i].SemanticIndex) : QString()); ret[i].VertexBuffer = (int)layouts[i].InputSlot; ret[i].RelativeByteOffset = offs; ret[i].PerInstance = layouts[i].PerInstance; @@ -732,7 +734,7 @@ QVector CommonPipelineState::GetVertexInputs() rdctype::array &sig = m_D3D12->m_VS.ShaderDetails->InputSig; for(int ia = 0; ia < sig.count; ia++) { - if(!semName.compare(QString(sig[ia].semanticName), Qt::CaseInsensitive) && + if(!semName.compare(ToQStr(sig[ia].semanticName), Qt::CaseInsensitive) && sig[ia].semanticIndex == layouts[i].SemanticIndex) { ret[i].Used = true; @@ -765,7 +767,7 @@ QVector CommonPipelineState::GetVertexInputs() QVector ret(attrs.count); for(int i = 0; i < attrs.count && a < num; i++) { - ret[a].Name = QString("attr%1").arg(i); + ret[a].Name = lit("attr%1").arg(i); memset(&ret[a].GenericValue, 0, sizeof(PixelValue)); ret[a].VertexBuffer = (int)attrs[i].BufferSlot; ret[a].RelativeByteOffset = attrs[i].RelativeOffset; @@ -779,7 +781,7 @@ QVector CommonPipelineState::GetVertexInputs() int attrib = m_GL->m_VS.BindpointMapping.InputAttributes[i]; if(attrib >= 0 && attrib < m_GL->m_VS.ShaderDetails->InputSig.count) - ret[a].Name = m_GL->m_VS.ShaderDetails->InputSig[attrib].varName; + ret[a].Name = ToQStr(m_GL->m_VS.ShaderDetails->InputSig[attrib].varName); if(attrib == -1) continue; @@ -842,7 +844,7 @@ QVector CommonPipelineState::GetVertexInputs() QVector ret(num); for(int i = 0; i < attrs.count && a < num; i++) { - ret[a].Name = QString("attr%1").arg(i); + ret[a].Name = lit("attr%1").arg(i); memset(&ret[a].GenericValue, 0, sizeof(PixelValue)); ret[a].VertexBuffer = (int)attrs[i].binding; ret[a].RelativeByteOffset = attrs[i].byteoffset; @@ -861,7 +863,7 @@ QVector CommonPipelineState::GetVertexInputs() attrib = m_Vulkan->m_VS.BindpointMapping.InputAttributes[attrs[i].location]; if(attrib >= 0 && attrib < m_Vulkan->m_VS.ShaderDetails->InputSig.count) - ret[a].Name = m_Vulkan->m_VS.ShaderDetails->InputSig[attrib].varName; + ret[a].Name = ToQStr(m_Vulkan->m_VS.ShaderDetails->InputSig[attrib].varName); if(attrib == -1) continue; diff --git a/qrenderdoc/Code/Interface/PersistantConfig.cpp b/qrenderdoc/Code/Interface/PersistantConfig.cpp index 67486250a..9335327fb 100644 --- a/qrenderdoc/Code/Interface/PersistantConfig.cpp +++ b/qrenderdoc/Code/Interface/PersistantConfig.cpp @@ -122,7 +122,7 @@ bool PersistantConfig::Deserialize(const QString &filename) bool PersistantConfig::Serialize(const QString &filename) { - if(filename != "") + if(!filename.isEmpty()) m_Filename = filename; QVariantMap values = storeValues(); @@ -144,9 +144,9 @@ QVariantMap PersistantConfig::storeValues() const #undef CONFIG_SETTING #define CONFIG_SETTING_VAL(access, variantType, type, name, defaultValue) \ - ret[#name] = convertToVariant(name); + ret[lit(#name)] = convertToVariant(name); #define CONFIG_SETTING(access, variantType, type, name) \ - ret[#name] = convertToVariant(name); + ret[lit(#name)] = convertToVariant(name); CONFIG_SETTINGS() @@ -159,11 +159,11 @@ void PersistantConfig::applyValues(const QVariantMap &values) #undef CONFIG_SETTING #define CONFIG_SETTING_VAL(access, variantType, type, name, defaultValue) \ - if(values.contains(#name)) \ - name = convertFromVariant(values[#name].value()); + if(values.contains(lit(#name))) \ + name = convertFromVariant(values[lit(#name)].value()); #define CONFIG_SETTING(access, variantType, type, name) \ - if(values.contains(#name)) \ - name = convertFromVariant(values[#name].value()); + if(values.contains(lit(#name))) \ + name = convertFromVariant(values[lit(#name)].value()); CONFIG_SETTINGS() } @@ -172,26 +172,27 @@ void PersistantConfig::AddAndroidHosts() { for(int i = RemoteHosts.count() - 1; i >= 0; i--) { - if(RemoteHosts[i]->Hostname.startsWith("adb:")) + if(RemoteHosts[i]->Hostname.startsWith(lit("adb:"))) delete RemoteHosts.takeAt(i); } - QString adbExePath = QFile::exists(Android_AdbExecutablePath) ? Android_AdbExecutablePath : ""; + QString adbExePath = + QFile::exists(Android_AdbExecutablePath) ? Android_AdbExecutablePath : QString(); // Set the config setting as it will be reused when we start the remoteserver etc. - SetConfigSetting("adbExePath", adbExePath); + SetConfigSetting(lit("adbExePath"), adbExePath); if(adbExePath.isEmpty()) return; // adb path must be non-empty in the Options dialog. - SetConfigSetting("MaxConnectTimeout", QString::number(Android_MaxConnectTimeout)); + SetConfigSetting(lit("MaxConnectTimeout"), QString::number(Android_MaxConnectTimeout)); rdctype::str androidHosts; RENDERDOC_EnumerateAndroidDevices(&androidHosts); - for(const QString &hostName : ToQStr(androidHosts).split(',', QString::SkipEmptyParts)) + for(const QString &hostName : ToQStr(androidHosts).split(QLatin1Char(','), QString::SkipEmptyParts)) { RemoteHost *host = new RemoteHost(); - host->Hostname = "adb:" + hostName; + host->Hostname = lit("adb:") + hostName; RemoteHosts.push_back(host); } } @@ -220,14 +221,14 @@ bool PersistantConfig::Load(const QString &filename) { RemoteHosts.push_back(new RemoteHost(host)); - if(host.Hostname == "localhost") + if(host.Hostname == lit("localhost")) foundLocalhost = true; } if(!foundLocalhost) { RemoteHost *host = new RemoteHost(); - host->Hostname = "localhost"; + host->Hostname = lit("localhost"); RemoteHosts.insert(RemoteHosts.begin(), host); } @@ -290,27 +291,27 @@ QString PersistantConfig::GetConfigSetting(const QString &name) if(ConfigSettings.contains(name)) return ConfigSettings[name]; - return ""; + return QString(); } SPIRVDisassembler::SPIRVDisassembler(const QVariant &var) { QVariantMap map = var.toMap(); - if(map.contains("name")) - name = map["name"].toString(); - if(map.contains("executable")) - executable = map["executable"].toString(); - if(map.contains("args")) - args = map["args"].toString(); + if(map.contains(lit("name"))) + name = map[lit("name")].toString(); + if(map.contains(lit("executable"))) + executable = map[lit("executable")].toString(); + if(map.contains(lit("args"))) + args = map[lit("args")].toString(); } SPIRVDisassembler::operator QVariant() const { QVariantMap map; - map["name"] = name; - map["executable"] = executable; - map["args"] = args; + map[lit("name")] = name; + map[lit("executable")] = executable; + map[lit("args")] = args; return map; } diff --git a/qrenderdoc/Code/Interface/PersistantConfig.h b/qrenderdoc/Code/Interface/PersistantConfig.h index bdc62a6fe..19b45b2ff 100644 --- a/qrenderdoc/Code/Interface/PersistantConfig.h +++ b/qrenderdoc/Code/Interface/PersistantConfig.h @@ -59,19 +59,19 @@ DECLARE_REFLECTION_STRUCT(SPIRVDisassembler); // Note that only public properties should be documented. #define CONFIG_SETTINGS() \ \ - CONFIG_SETTING_VAL(public, QString, QString, LastLogPath, "") \ + CONFIG_SETTING_VAL(public, QString, QString, LastLogPath, QString()) \ \ CONFIG_SETTING(public, QVariantList, QList, RecentLogFiles) \ \ - CONFIG_SETTING_VAL(public, QString, QString, LastCapturePath, "") \ + CONFIG_SETTING_VAL(public, QString, QString, LastCapturePath, QString()) \ \ - CONFIG_SETTING_VAL(public, QString, QString, LastCaptureExe, "") \ + CONFIG_SETTING_VAL(public, QString, QString, LastCaptureExe, QString()) \ \ CONFIG_SETTING(public, QVariantList, QList, RecentCaptureSettings) \ \ - CONFIG_SETTING_VAL(public, QString, QString, TemporaryCaptureDirectory, "") \ + CONFIG_SETTING_VAL(public, QString, QString, TemporaryCaptureDirectory, QString()) \ \ - CONFIG_SETTING_VAL(public, QString, QString, DefaultCaptureSaveDirectory, "") \ + CONFIG_SETTING_VAL(public, QString, QString, DefaultCaptureSaveDirectory, QString()) \ \ CONFIG_SETTING_VAL(public, bool, bool, TextureViewer_ResetRange, false) \ \ @@ -105,7 +105,7 @@ DECLARE_REFLECTION_STRUCT(SPIRVDisassembler); \ CONFIG_SETTING_VAL(public, bool, bool, Font_PreferMonospaced, false) \ \ - CONFIG_SETTING_VAL(public, QString, QString, Android_AdbExecutablePath, "") \ + CONFIG_SETTING_VAL(public, QString, QString, Android_AdbExecutablePath, QString()) \ \ CONFIG_SETTING_VAL(public, int, int, Android_MaxConnectTimeout, 30) \ \ @@ -113,7 +113,7 @@ DECLARE_REFLECTION_STRUCT(SPIRVDisassembler); \ CONFIG_SETTING_VAL(public, bool, bool, CheckUpdate_UpdateAvailable, false) \ \ - CONFIG_SETTING_VAL(public, QString, QString, CheckUpdate_UpdateResponse, "") \ + CONFIG_SETTING_VAL(public, QString, QString, CheckUpdate_UpdateResponse, QString()) \ \ CONFIG_SETTING_VAL(public, QDateTime, QDateTime, CheckUpdate_LastUpdate, \ QDateTime(QDate(2012, 06, 27), QTime(0, 0, 0))) \ @@ -166,15 +166,15 @@ DOCUMENT(R"(Gets the suffix for a time unit. inline QString UnitSuffix(TimeUnit unit) { if(unit == TimeUnit::Seconds) - return "s"; + return lit("s"); else if(unit == TimeUnit::Milliseconds) - return "ms"; + return lit("ms"); else if(unit == TimeUnit::Microseconds) - return "µs"; + return lit("µs"); else if(unit == TimeUnit::Nanoseconds) - return "ns"; + return lit("ns"); - return "s"; + return lit("s"); } DOCUMENT(R"(Checks if a given file is in a list. If it is, then it's shuffled to the end. If it's diff --git a/qrenderdoc/Code/Interface/QRDInterface.cpp b/qrenderdoc/Code/Interface/QRDInterface.cpp index b7720d64e..e6b8319a1 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.cpp +++ b/qrenderdoc/Code/Interface/QRDInterface.cpp @@ -7,10 +7,10 @@ QVariant EnvModToVariant(const EnvironmentModification &env) { QVariantMap ret; - ret["variable"] = ToQStr(env.name); - ret["value"] = ToQStr(env.value); - ret["type"] = ToQStr(env.mod); - ret["separator"] = ToQStr(env.sep); + ret[lit("variable")] = ToQStr(env.name); + ret[lit("value")] = ToQStr(env.value); + ret[lit("type")] = ToQStr(env.mod); + ret[lit("separator")] = ToQStr(env.sep); return ret; } @@ -20,10 +20,10 @@ EnvironmentModification EnvModFromVariant(const QVariant &v) EnvironmentModification ret; - ret.name = data["variable"].toString().toUtf8().data(); - ret.value = data["value"].toString().toUtf8().data(); + ret.name = data[lit("variable")].toString().toUtf8().data(); + ret.value = data[lit("value")].toString().toUtf8().data(); - QString t = data["type"].toString(); + QString t = data[lit("type")].toString(); if(t == ToQStr(EnvMod::Append)) ret.mod = EnvMod::Append; @@ -32,7 +32,7 @@ EnvironmentModification EnvModFromVariant(const QVariant &v) else ret.mod = EnvMod::Set; - QString s = data["separator"].toString(); + QString s = data[lit("separator")].toString(); if(s == ToQStr(EnvSep::SemiColon)) ret.sep = EnvSep::SemiColon; @@ -57,31 +57,31 @@ CaptureSettings::operator QVariant() const { QVariantMap ret; - ret["AutoStart"] = AutoStart; + ret[lit("AutoStart")] = AutoStart; - ret["Executable"] = Executable; - ret["WorkingDir"] = WorkingDir; - ret["CmdLine"] = CmdLine; + ret[lit("Executable")] = Executable; + ret[lit("WorkingDir")] = WorkingDir; + ret[lit("CmdLine")] = CmdLine; QVariantList env; for(int i = 0; i < Environment.size(); i++) env.push_back(EnvModToVariant(Environment[i])); - ret["Environment"] = env; + ret[lit("Environment")] = env; QVariantMap opts; - opts["AllowVSync"] = Options.AllowVSync; - opts["AllowFullscreen"] = Options.AllowFullscreen; - opts["APIValidation"] = Options.APIValidation; - opts["CaptureCallstacks"] = Options.CaptureCallstacks; - opts["CaptureCallstacksOnlyDraws"] = Options.CaptureCallstacksOnlyDraws; - opts["DelayForDebugger"] = Options.DelayForDebugger; - opts["VerifyMapWrites"] = Options.VerifyMapWrites; - opts["HookIntoChildren"] = Options.HookIntoChildren; - opts["RefAllResources"] = Options.RefAllResources; - opts["SaveAllInitials"] = Options.SaveAllInitials; - opts["CaptureAllCmdLists"] = Options.CaptureAllCmdLists; - opts["DebugOutputMute"] = Options.DebugOutputMute; - ret["Options"] = opts; + opts[lit("AllowVSync")] = Options.AllowVSync; + opts[lit("AllowFullscreen")] = Options.AllowFullscreen; + opts[lit("APIValidation")] = Options.APIValidation; + opts[lit("CaptureCallstacks")] = Options.CaptureCallstacks; + opts[lit("CaptureCallstacksOnlyDraws")] = Options.CaptureCallstacksOnlyDraws; + opts[lit("DelayForDebugger")] = Options.DelayForDebugger; + opts[lit("VerifyMapWrites")] = Options.VerifyMapWrites; + opts[lit("HookIntoChildren")] = Options.HookIntoChildren; + opts[lit("RefAllResources")] = Options.RefAllResources; + opts[lit("SaveAllInitials")] = Options.SaveAllInitials; + opts[lit("CaptureAllCmdLists")] = Options.CaptureAllCmdLists; + opts[lit("DebugOutputMute")] = Options.DebugOutputMute; + ret[lit("Options")] = opts; return ret; } @@ -90,33 +90,33 @@ CaptureSettings::CaptureSettings(const QVariant &v) { QVariantMap data = v.toMap(); - AutoStart = data["AutoStart"].toBool(); + AutoStart = data[lit("AutoStart")].toBool(); - Executable = data["Executable"].toString(); - WorkingDir = data["WorkingDir"].toString(); - CmdLine = data["CmdLine"].toString(); + Executable = data[lit("Executable")].toString(); + WorkingDir = data[lit("WorkingDir")].toString(); + CmdLine = data[lit("CmdLine")].toString(); - QVariantList env = data["Environment"].toList(); + QVariantList env = data[lit("Environment")].toList(); for(int i = 0; i < env.size(); i++) { EnvironmentModification e = EnvModFromVariant(env[i]); Environment.push_back(e); } - QVariantMap opts = data["Options"].toMap(); + QVariantMap opts = data[lit("Options")].toMap(); - Options.AllowVSync = opts["AllowVSync"].toBool(); - Options.AllowFullscreen = opts["AllowFullscreen"].toBool(); - Options.APIValidation = opts["APIValidation"].toBool(); - Options.CaptureCallstacks = opts["CaptureCallstacks"].toBool(); - Options.CaptureCallstacksOnlyDraws = opts["CaptureCallstacksOnlyDraws"].toBool(); - Options.DelayForDebugger = opts["DelayForDebugger"].toUInt(); - Options.VerifyMapWrites = opts["VerifyMapWrites"].toBool(); - Options.HookIntoChildren = opts["HookIntoChildren"].toBool(); - Options.RefAllResources = opts["RefAllResources"].toBool(); - Options.SaveAllInitials = opts["SaveAllInitials"].toBool(); - Options.CaptureAllCmdLists = opts["CaptureAllCmdLists"].toBool(); - Options.DebugOutputMute = opts["DebugOutputMute"].toBool(); + Options.AllowVSync = opts[lit("AllowVSync")].toBool(); + Options.AllowFullscreen = opts[lit("AllowFullscreen")].toBool(); + Options.APIValidation = opts[lit("APIValidation")].toBool(); + Options.CaptureCallstacks = opts[lit("CaptureCallstacks")].toBool(); + Options.CaptureCallstacksOnlyDraws = opts[lit("CaptureCallstacksOnlyDraws")].toBool(); + Options.DelayForDebugger = opts[lit("DelayForDebugger")].toUInt(); + Options.VerifyMapWrites = opts[lit("VerifyMapWrites")].toBool(); + Options.HookIntoChildren = opts[lit("HookIntoChildren")].toBool(); + Options.RefAllResources = opts[lit("RefAllResources")].toBool(); + Options.SaveAllInitials = opts[lit("SaveAllInitials")].toBool(); + Options.CaptureAllCmdLists = opts[lit("CaptureAllCmdLists")].toBool(); + Options.DebugOutputMute = opts[lit("DebugOutputMute")].toBool(); } QString ConfigFilePath(const QString &filename) @@ -125,7 +125,7 @@ QString ConfigFilePath(const QString &filename) QDir dir(path); if(!dir.exists()) - dir.mkdir("."); + dir.mkdir(lit(".")); return QDir::cleanPath(dir.absoluteFilePath(filename)); } diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index 299c98f79..e35f4f328 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -13,6 +13,27 @@ #include +// For string literals - use either tr() for translated strings, lit() for untranslated strings, or +// QFormatStr for the special case of literals without text used to format text with .arg(). +// +// A default constructed QString() should be preferred to "". +// +// Instead of comparisons to "", use .isEmpty() - either !foo.isEmpty() for foo != "" or +// foo.isEmpty() for foo == "". + +// this macro is fairly small/non-namespaced which is generally not good, but it's intended to +// be correspond to the tr() function in QObject, but for string literals. It makes the code a +// little bit more readable. +// +// If you have some text which should not be translated, then it should use lit(). +#define lit(a) QStringLiteral(a) + +// Same as lit() above, but only for formatting strings like QFormatStr("%1: %2[%3]"). +// Note that tr() and lit() can format as well, so if there's text in the format string like +// QFormatStr("Sprocket thingy: %1.%2") then it should use either tr() or lit() depending on whether +// or not it should be translated +#define QFormatStr(fmt) QStringLiteral(fmt) + // we depend on the internal RenderDoc API, but the bindings for that are imported entirely #include "renderdoc_replay.h" @@ -191,7 +212,7 @@ struct IBufferViewer :param str format: Optionally a HLSL/GLSL style formatting string. )"); virtual void ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, - const QString &format = "") = 0; + const QString &format = QString()) = 0; DOCUMENT(R"(In a raw buffer viewer, load the contents from a particular texture resource. :param int arrayIdx: The array slice to load from. @@ -200,7 +221,7 @@ struct IBufferViewer :param str format: Optionally a HLSL/GLSL style formatting string. )"); virtual void ViewTexture(uint32_t arrayIdx, uint32_t mip, ResourceId id, - const QString &format = "") = 0; + const QString &format = QString()) = 0; protected: IBufferViewer() = default; @@ -1159,7 +1180,7 @@ through the execution of a given shader. :rtype: BufferViewer )"); virtual IBufferViewer *ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, - const QString &format = "") = 0; + const QString &format = QString()) = 0; DOCUMENT(R"(Show a new :class:`BufferViewer` window, showing a read-only view of a texture's raw bytes. @@ -1172,7 +1193,7 @@ bytes. :rtype: BufferViewer )"); virtual IBufferViewer *ViewTextureAsBuffer(uint32_t arrayIdx, uint32_t mip, ResourceId id, - const QString &format = "") = 0; + const QString &format = QString()) = 0; DOCUMENT(R"(Show a new :class:`ConstantBufferPreviewer` window, showing a read-only view of a the variables in a constant buffer with their values. diff --git a/qrenderdoc/Code/Interface/RemoteHost.cpp b/qrenderdoc/Code/Interface/RemoteHost.cpp index 4869514d7..1e8c153d7 100644 --- a/qrenderdoc/Code/Interface/RemoteHost.cpp +++ b/qrenderdoc/Code/Interface/RemoteHost.cpp @@ -36,10 +36,10 @@ RemoteHost::RemoteHost() RemoteHost::RemoteHost(const QVariant &var) { QVariantMap map = var.toMap(); - if(map.contains("Hostname")) - Hostname = map["Hostname"].toString(); - if(map.contains("RunCommand")) - RunCommand = map["RunCommand"].toString(); + if(map.contains(lit("Hostname"))) + Hostname = map[lit("Hostname")].toString(); + if(map.contains(lit("RunCommand"))) + RunCommand = map[lit("RunCommand")].toString(); ServerRunning = Connected = Busy = VersionMismatch = false; } @@ -47,15 +47,15 @@ RemoteHost::RemoteHost(const QVariant &var) RemoteHost::operator QVariant() const { QVariantMap map; - map["Hostname"] = Hostname; - map["RunCommand"] = RunCommand; + map[lit("Hostname")] = Hostname; + map[lit("RunCommand")] = RunCommand; return map; } void RemoteHost::CheckStatus() { // special case - this is the local context - if(Hostname == "localhost") + if(Hostname == lit("localhost")) { ServerRunning = false; VersionMismatch = Busy = false; diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index f8a91bd05..e63fd865b 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -43,52 +43,52 @@ QString ToQStr(const ResourceUsage usage, const GraphicsAPI apitype) { switch(usage) { - case ResourceUsage::VertexBuffer: return "Vertex Buffer"; - case ResourceUsage::IndexBuffer: return "Index Buffer"; + case ResourceUsage::VertexBuffer: return lit("Vertex Buffer"); + case ResourceUsage::IndexBuffer: return lit("Index Buffer"); - case ResourceUsage::VS_Constants: return "VS - Constant Buffer"; - case ResourceUsage::GS_Constants: return "GS - Constant Buffer"; - case ResourceUsage::HS_Constants: return "HS - Constant Buffer"; - case ResourceUsage::DS_Constants: return "DS - Constant Buffer"; - case ResourceUsage::CS_Constants: return "CS - Constant Buffer"; - case ResourceUsage::PS_Constants: return "PS - Constant Buffer"; - case ResourceUsage::All_Constants: return "All - Constant Buffer"; + case ResourceUsage::VS_Constants: return lit("VS - Constant Buffer"); + case ResourceUsage::GS_Constants: return lit("GS - Constant Buffer"); + case ResourceUsage::HS_Constants: return lit("HS - Constant Buffer"); + case ResourceUsage::DS_Constants: return lit("DS - Constant Buffer"); + case ResourceUsage::CS_Constants: return lit("CS - Constant Buffer"); + case ResourceUsage::PS_Constants: return lit("PS - Constant Buffer"); + case ResourceUsage::All_Constants: return lit("All - Constant Buffer"); - case ResourceUsage::StreamOut: return "Stream Out"; + case ResourceUsage::StreamOut: return lit("Stream Out"); - case ResourceUsage::VS_Resource: return "VS - Resource"; - case ResourceUsage::GS_Resource: return "GS - Resource"; - case ResourceUsage::HS_Resource: return "HS - Resource"; - case ResourceUsage::DS_Resource: return "DS - Resource"; - case ResourceUsage::CS_Resource: return "CS - Resource"; - case ResourceUsage::PS_Resource: return "PS - Resource"; - case ResourceUsage::All_Resource: return "All - Resource"; + case ResourceUsage::VS_Resource: return lit("VS - Resource"); + case ResourceUsage::GS_Resource: return lit("GS - Resource"); + case ResourceUsage::HS_Resource: return lit("HS - Resource"); + case ResourceUsage::DS_Resource: return lit("DS - Resource"); + case ResourceUsage::CS_Resource: return lit("CS - Resource"); + case ResourceUsage::PS_Resource: return lit("PS - Resource"); + case ResourceUsage::All_Resource: return lit("All - Resource"); - case ResourceUsage::VS_RWResource: return "VS - UAV"; - case ResourceUsage::HS_RWResource: return "HS - UAV"; - case ResourceUsage::DS_RWResource: return "DS - UAV"; - case ResourceUsage::GS_RWResource: return "GS - UAV"; - case ResourceUsage::PS_RWResource: return "PS - UAV"; - case ResourceUsage::CS_RWResource: return "CS - UAV"; - case ResourceUsage::All_RWResource: return "All - UAV"; + case ResourceUsage::VS_RWResource: return lit("VS - UAV"); + case ResourceUsage::HS_RWResource: return lit("HS - UAV"); + case ResourceUsage::DS_RWResource: return lit("DS - UAV"); + case ResourceUsage::GS_RWResource: return lit("GS - UAV"); + case ResourceUsage::PS_RWResource: return lit("PS - UAV"); + case ResourceUsage::CS_RWResource: return lit("CS - UAV"); + case ResourceUsage::All_RWResource: return lit("All - UAV"); - case ResourceUsage::InputTarget: return "Color Input"; - case ResourceUsage::ColorTarget: return "Rendertarget"; - case ResourceUsage::DepthStencilTarget: return "Depthstencil"; + case ResourceUsage::InputTarget: return lit("Color Input"); + case ResourceUsage::ColorTarget: return lit("Rendertarget"); + case ResourceUsage::DepthStencilTarget: return lit("Depthstencil"); - case ResourceUsage::Indirect: return "Indirect argument"; + case ResourceUsage::Indirect: return lit("Indirect argument"); - case ResourceUsage::Clear: return "Clear"; + case ResourceUsage::Clear: return lit("Clear"); - case ResourceUsage::GenMips: return "Generate Mips"; - case ResourceUsage::Resolve: return "Resolve"; - case ResourceUsage::ResolveSrc: return "Resolve - Source"; - case ResourceUsage::ResolveDst: return "Resolve - Dest"; - case ResourceUsage::Copy: return "Copy"; - case ResourceUsage::CopySrc: return "Copy - Source"; - case ResourceUsage::CopyDst: return "Copy - Dest"; + case ResourceUsage::GenMips: return lit("Generate Mips"); + case ResourceUsage::Resolve: return lit("Resolve"); + case ResourceUsage::ResolveSrc: return lit("Resolve - Source"); + case ResourceUsage::ResolveDst: return lit("Resolve - Dest"); + case ResourceUsage::Copy: return lit("Copy"); + case ResourceUsage::CopySrc: return lit("Copy - Source"); + case ResourceUsage::CopyDst: return lit("Copy - Dest"); - case ResourceUsage::Barrier: return "Barrier"; + case ResourceUsage::Barrier: return lit("Barrier"); default: break; } } @@ -98,57 +98,59 @@ QString ToQStr(const ResourceUsage usage, const GraphicsAPI apitype) switch(usage) { - case ResourceUsage::VertexBuffer: return "Vertex Buffer"; - case ResourceUsage::IndexBuffer: return "Index Buffer"; + case ResourceUsage::VertexBuffer: return lit("Vertex Buffer"); + case ResourceUsage::IndexBuffer: return lit("Index Buffer"); - case ResourceUsage::VS_Constants: return "VS - Uniform Buffer"; - case ResourceUsage::GS_Constants: return "GS - Uniform Buffer"; - case ResourceUsage::HS_Constants: return "HS - Uniform Buffer"; - case ResourceUsage::DS_Constants: return "DS - Uniform Buffer"; - case ResourceUsage::CS_Constants: return "CS - Uniform Buffer"; - case ResourceUsage::PS_Constants: return "PS - Uniform Buffer"; - case ResourceUsage::All_Constants: return "All - Uniform Buffer"; + case ResourceUsage::VS_Constants: return lit("VS - Uniform Buffer"); + case ResourceUsage::GS_Constants: return lit("GS - Uniform Buffer"); + case ResourceUsage::HS_Constants: return lit("HS - Uniform Buffer"); + case ResourceUsage::DS_Constants: return lit("DS - Uniform Buffer"); + case ResourceUsage::CS_Constants: return lit("CS - Uniform Buffer"); + case ResourceUsage::PS_Constants: return lit("PS - Uniform Buffer"); + case ResourceUsage::All_Constants: return lit("All - Uniform Buffer"); - case ResourceUsage::StreamOut: return "Transform Feedback"; + case ResourceUsage::StreamOut: return lit("Transform Feedback"); - case ResourceUsage::VS_Resource: return "VS - Texture"; - case ResourceUsage::GS_Resource: return "GS - Texture"; - case ResourceUsage::HS_Resource: return "HS - Texture"; - case ResourceUsage::DS_Resource: return "DS - Texture"; - case ResourceUsage::CS_Resource: return "CS - Texture"; - case ResourceUsage::PS_Resource: return "PS - Texture"; - case ResourceUsage::All_Resource: return "All - Texture"; + case ResourceUsage::VS_Resource: return lit("VS - Texture"); + case ResourceUsage::GS_Resource: return lit("GS - Texture"); + case ResourceUsage::HS_Resource: return lit("HS - Texture"); + case ResourceUsage::DS_Resource: return lit("DS - Texture"); + case ResourceUsage::CS_Resource: return lit("CS - Texture"); + case ResourceUsage::PS_Resource: return lit("PS - Texture"); + case ResourceUsage::All_Resource: return lit("All - Texture"); - case ResourceUsage::VS_RWResource: return "VS - Image/SSBO"; - case ResourceUsage::HS_RWResource: return "HS - Image/SSBO"; - case ResourceUsage::DS_RWResource: return "DS - Image/SSBO"; - case ResourceUsage::GS_RWResource: return "GS - Image/SSBO"; - case ResourceUsage::PS_RWResource: return "PS - Image/SSBO"; - case ResourceUsage::CS_RWResource: return "CS - Image/SSBO"; - case ResourceUsage::All_RWResource: return "All - Image/SSBO"; + case ResourceUsage::VS_RWResource: return lit("VS - Image/SSBO"); + case ResourceUsage::HS_RWResource: return lit("HS - Image/SSBO"); + case ResourceUsage::DS_RWResource: return lit("DS - Image/SSBO"); + case ResourceUsage::GS_RWResource: return lit("GS - Image/SSBO"); + case ResourceUsage::PS_RWResource: return lit("PS - Image/SSBO"); + case ResourceUsage::CS_RWResource: return lit("CS - Image/SSBO"); + case ResourceUsage::All_RWResource: return lit("All - Image/SSBO"); - case ResourceUsage::InputTarget: return "FBO Input"; - case ResourceUsage::ColorTarget: return "FBO Color"; - case ResourceUsage::DepthStencilTarget: return "FBO Depthstencil"; + case ResourceUsage::InputTarget: return lit("FBO Input"); + case ResourceUsage::ColorTarget: return lit("FBO Color"); + case ResourceUsage::DepthStencilTarget: return lit("FBO Depthstencil"); - case ResourceUsage::Indirect: return "Indirect argument"; + case ResourceUsage::Indirect: return lit("Indirect argument"); - case ResourceUsage::Clear: return "Clear"; + case ResourceUsage::Clear: return lit("Clear"); - case ResourceUsage::GenMips: return "Generate Mips"; - case ResourceUsage::Resolve: return vk ? "Resolve" : "Framebuffer blit"; - case ResourceUsage::ResolveSrc: return vk ? "Resolve - Source" : "Framebuffer blit - Source"; - case ResourceUsage::ResolveDst: return vk ? "Resolve - Dest" : "Framebuffer blit - Dest"; - case ResourceUsage::Copy: return "Copy"; - case ResourceUsage::CopySrc: return "Copy - Source"; - case ResourceUsage::CopyDst: return "Copy - Dest"; + case ResourceUsage::GenMips: return lit("Generate Mips"); + case ResourceUsage::Resolve: return vk ? lit("Resolve") : lit("Framebuffer blit"); + case ResourceUsage::ResolveSrc: + return vk ? lit("Resolve - Source") : lit("Framebuffer blit - Source"); + case ResourceUsage::ResolveDst: + return vk ? lit("Resolve - Dest") : lit("Framebuffer blit - Dest"); + case ResourceUsage::Copy: return lit("Copy"); + case ResourceUsage::CopySrc: return lit("Copy - Source"); + case ResourceUsage::CopyDst: return lit("Copy - Dest"); - case ResourceUsage::Barrier: return "Barrier"; + case ResourceUsage::Barrier: return lit("Barrier"); default: break; } } - return "Unknown"; + return lit("Unknown"); } QString ToQStr(const ShaderStage stage, const GraphicsAPI apitype) @@ -157,12 +159,12 @@ QString ToQStr(const ShaderStage stage, const GraphicsAPI apitype) { switch(stage) { - case ShaderStage::Vertex: return "Vertex"; - case ShaderStage::Hull: return "Hull"; - case ShaderStage::Domain: return "Domain"; - case ShaderStage::Geometry: return "Geometry"; - case ShaderStage::Pixel: return "Pixel"; - case ShaderStage::Compute: return "Compute"; + case ShaderStage::Vertex: return lit("Vertex"); + case ShaderStage::Hull: return lit("Hull"); + case ShaderStage::Domain: return lit("Domain"); + case ShaderStage::Geometry: return lit("Geometry"); + case ShaderStage::Pixel: return lit("Pixel"); + case ShaderStage::Compute: return lit("Compute"); default: break; } } @@ -170,35 +172,35 @@ QString ToQStr(const ShaderStage stage, const GraphicsAPI apitype) { switch(stage) { - case ShaderStage::Vertex: return "Vertex"; - case ShaderStage::Tess_Control: return "Tess. Control"; - case ShaderStage::Tess_Eval: return "Tess. Eval"; - case ShaderStage::Geometry: return "Geometry"; - case ShaderStage::Fragment: return "Fragment"; - case ShaderStage::Compute: return "Compute"; + case ShaderStage::Vertex: return lit("Vertex"); + case ShaderStage::Tess_Control: return lit("Tess. Control"); + case ShaderStage::Tess_Eval: return lit("Tess. Eval"); + case ShaderStage::Geometry: return lit("Geometry"); + case ShaderStage::Fragment: return lit("Fragment"); + case ShaderStage::Compute: return lit("Compute"); default: break; } } - return "Unknown"; + return lit("Unknown"); } QString TypeString(const SigParameter &sig) { - QString ret = ""; + QString ret = lit(""); if(sig.compType == CompType::Float) - ret += "float"; + ret += lit("float"); else if(sig.compType == CompType::UInt || sig.compType == CompType::UScaled) - ret += "uint"; + ret += lit("uint"); else if(sig.compType == CompType::SInt || sig.compType == CompType::SScaled) - ret += "int"; + ret += lit("int"); else if(sig.compType == CompType::UNorm) - ret += "unorm float"; + ret += lit("unorm float"); else if(sig.compType == CompType::SNorm) - ret += "snorm float"; + ret += lit("snorm float"); else if(sig.compType == CompType::Depth) - ret += "float"; + ret += lit("float"); if(sig.compCount > 1) ret += QString::number(sig.compCount); @@ -223,16 +225,16 @@ QString D3DSemanticString(const SigParameter &sig) QString GetComponentString(byte mask) { - QString ret = ""; + QString ret; if((mask & 0x1) > 0) - ret += "R"; + ret += lit("R"); if((mask & 0x2) > 0) - ret += "G"; + ret += lit("G"); if((mask & 0x4) > 0) - ret += "B"; + ret += lit("B"); if((mask & 0x8) > 0) - ret += "A"; + ret += lit("A"); return ret; } @@ -240,7 +242,7 @@ QString GetComponentString(byte mask) bool SaveToJSON(QVariantMap &data, QIODevice &f, const char *magicIdentifier, uint32_t magicVersion) { // marker that this data is valid - data[magicIdentifier] = magicVersion; + data[QString::fromLatin1(magicIdentifier)] = magicVersion; QJsonDocument doc = QJsonDocument::fromVariant(data); @@ -283,13 +285,15 @@ bool LoadFromJSON(QVariantMap &data, QIODevice &f, const char *magicIdentifier, data = doc.toVariant().toMap(); - if(data.isEmpty() || !data.contains(magicIdentifier)) + QString ident = QString::fromLatin1(magicIdentifier); + + if(data.isEmpty() || !data.contains(ident)) { qCritical() << "Converted config data is invalid or unrecognised"; return false; } - if(data[magicIdentifier].toUInt() != magicVersion) + if(data[ident].toUInt() != magicVersion) { qCritical() << "Converted config data is not the right version"; return false; @@ -427,7 +431,7 @@ QString RDDialog::getExecutableFileName(QWidget *parent, const QString &caption, #if defined(Q_OS_WIN32) // can't filter by executable bit on windows, but we have extensions - filter = "Executables (*.exe);;All Files (*.*)"; + filter = lit("Executables (*.exe);;All Files (*.*)"); #endif QFileDialog fd(parent, caption, dir, filter); @@ -524,12 +528,13 @@ void addGridLines(QGridLayout *grid) if(w == NULL) continue; - QString style = "border: solid black; border-bottom-width: 1px; border-right-width: 1px;"; + QString style = + lit("border: solid black; border-bottom-width: 1px; border-right-width: 1px;"); if(x == 0) - style += "border-left-width: 1px;"; + style += lit("border-left-width: 1px;"); if(y == 0) - style += "border-top-width: 1px;"; + style += lit("border-top-width: 1px;"); w->setStyleSheet(style); } @@ -555,12 +560,12 @@ void Formatter::setParams(int minFigures, int maxFigures, int expNegCutoff, int QString Formatter::Format(double f, bool) { if(f != 0.0 && (qAbs(f) < m_expNegValue || qAbs(f) > m_expPosValue)) - return QString("%1").arg(f, -m_minFigures, 'E', m_maxFigures); + return QFormatStr("%1").arg(f, -m_minFigures, 'E', m_maxFigures); - QString ret = QString("%1").arg(f, 0, 'f', m_maxFigures); + QString ret = QFormatStr("%1").arg(f, 0, 'f', m_maxFigures); // trim excess trailing 0s - int decimal = ret.lastIndexOf(QChar('.')); + int decimal = ret.lastIndexOf(QLatin1Char('.')); if(decimal > 0) { decimal += m_minFigures; @@ -568,7 +573,7 @@ QString Formatter::Format(double f, bool) const int len = ret.count(); int remove = 0; - while(len - remove - 1 > decimal && ret.at(len - remove - 1) == QChar('0')) + while(len - remove - 1 > decimal && ret.at(len - remove - 1) == QLatin1Char('0')) remove++; if(remove > 0) @@ -653,7 +658,7 @@ bool RunProcessAsAdmin(const QString &fullExecutablePath, const QStringList &par #if defined(Q_OS_WIN32) std::wstring wideExe = fullExecutablePath.toStdWString(); - std::wstring wideParams = params.join(QChar(' ')).toStdWString(); + std::wstring wideParams = params.join(QLatin1Char(' ')).toStdWString(); SHELLEXECUTEINFOW info = {}; info.cbSize = sizeof(info); @@ -693,12 +698,12 @@ bool RunProcessAsAdmin(const QString &fullExecutablePath, const QStringList &par #else // try to find a way to run the application elevated. const QString graphicalSudo[] = { - "pkexec", "kdesudo", "gksudo", "beesu", + lit("pkexec"), lit("kdesudo"), lit("gksudo"), lit("beesu"), }; // if none of the graphical options, then look for sudo and either const QString termEmulator[] = { - "x-terminal-emulator", "gnome-terminal", "knosole", "xterm", + lit("x-terminal-emulator"), lit("gnome-terminal"), lit("knosole"), lit("xterm"), }; for(const QString &sudo : graphicalSudo) @@ -731,7 +736,7 @@ bool RunProcessAsAdmin(const QString &fullExecutablePath, const QStringList &par return true; } - QString sudo = QStandardPaths::findExecutable("sudo"); + QString sudo = QStandardPaths::findExecutable(lit("sudo")); if(sudo.isEmpty()) { @@ -752,8 +757,9 @@ bool RunProcessAsAdmin(const QString &fullExecutablePath, const QStringList &par // run terminal sudo with emulator QStringList termParams; - termParams << "-e" - << QString("bash -c 'sudo %1 %2'").arg(fullExecutablePath).arg(params.join(QChar(' '))); + termParams + << lit("-e") + << lit("bash -c 'sudo %1 %2'").arg(fullExecutablePath).arg(params.join(QLatin1Char(' '))); process->start(term, termParams); @@ -913,11 +919,11 @@ QString GetSystemUsername() { QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - QString username = env.value("USER"); + QString username = env.value(lit("USER")); if(username == QString()) - username = env.value("USERNAME"); + username = env.value(lit("USERNAME")); if(username == QString()) - username = "Unknown_User"; + username = lit("Unknown_User"); return username; } diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 2831b311a..3ec8ba877 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -24,12 +24,14 @@ #pragma once +#include #include #include #include #include #include #include +#include "Code/Interface/QRDInterface.h" #include "renderdoc_replay.h" template @@ -582,6 +584,9 @@ QString ToQStr(const ShaderStage stage, const GraphicsAPI apitype); struct FormatElement { + Q_DECLARE_TR_FUNCTIONS(FormatElement); + +public: FormatElement(); FormatElement(const QString &Name, int buf, uint offs, bool perInst, int instRate, bool rowMat, uint matDim, ResourceFormat f, bool hexDisplay); @@ -624,15 +629,15 @@ struct Formatter static QString Format(double f, bool hex = false); static QString Format(uint64_t u, bool hex = false) { - return QString("%1").arg(u, hex ? 16 : 0, hex ? 16 : 10, QChar('0')); + return QFormatStr("%1").arg(u, hex ? 16 : 0, hex ? 16 : 10, QLatin1Char('0')); } static QString Format(uint32_t u, bool hex = false) { - return QString("%1").arg(u, hex ? 8 : 0, hex ? 16 : 10, QChar('0')); + return QFormatStr("%1").arg(u, hex ? 8 : 0, hex ? 16 : 10, QLatin1Char('0')); } static QString Format(uint16_t u, bool hex = false) { - return QString("%1").arg(u, hex ? 4 : 0, hex ? 16 : 10, QChar('0')); + return QFormatStr("%1").arg(u, hex ? 4 : 0, hex ? 16 : 10, QLatin1Char('0')); } static QString Format(int32_t i, bool hex = false) { return QString::number(i); } private: diff --git a/qrenderdoc/Code/ReplayManager.cpp b/qrenderdoc/Code/ReplayManager.cpp index f85ae7766..ead8990af 100644 --- a/qrenderdoc/Code/ReplayManager.cpp +++ b/qrenderdoc/Code/ReplayManager.cpp @@ -45,7 +45,7 @@ void ReplayManager::OpenCapture(const QString &logfile, float *progress) return; m_ProxyRenderer = -1; - m_ReplayHost = ""; + m_ReplayHost = QString(); m_Logfile = logfile; m_Progress = progress; @@ -163,16 +163,16 @@ void ReplayManager::ListFolder(QString path, bool synchronous, DirectoryBrowseCa QString ReplayManager::CopyCaptureToRemote(const QString &localpath, QWidget *window) { if(!m_Remote) - return ""; + return QString(); - QString remotepath = ""; + QString remotepath; bool copied = false; float progress = 0.0f; auto lambda = [this, localpath, &remotepath, &progress, &copied](IReplayController *r) { QMutexLocker autolock(&m_RemoteLock); - remotepath = m_Remote->CopyCaptureToRemote(localpath.toUtf8().data(), &progress); + remotepath = ToQStr(m_Remote->CopyCaptureToRemote(localpath.toUtf8().data(), &progress)); copied = true; }; @@ -188,8 +188,8 @@ QString ReplayManager::CopyCaptureToRemote(const QString &localpath, QWidget *wi thread->start(); } - ShowProgressDialog(window, QApplication::translate("ReplayManager", "Transferring..."), - [&copied]() { return copied; }, [&progress]() { return progress; }); + ShowProgressDialog(window, tr("Transferring..."), [&copied]() { return copied; }, + [&progress]() { return progress; }); return remotepath; } @@ -221,8 +221,8 @@ void ReplayManager::CopyCaptureFromRemote(const QString &remotepath, const QStri thread->start(); } - ShowProgressDialog(window, QApplication::translate("ReplayManager", "Transferring..."), - [&copied]() { return copied; }, [&progress]() { return progress; }); + ShowProgressDialog(window, tr("Transferring..."), [&copied]() { return copied; }, + [&progress]() { return progress; }); } bool ReplayManager::IsRunning() diff --git a/qrenderdoc/Code/ReplayManager.h b/qrenderdoc/Code/ReplayManager.h index 14ab64301..d0132ef21 100644 --- a/qrenderdoc/Code/ReplayManager.h +++ b/qrenderdoc/Code/ReplayManager.h @@ -46,6 +46,8 @@ class RemoteHost; class ReplayManager : public IReplayManager { + Q_DECLARE_TR_FUNCTIONS(ReplayManager); + public: ReplayManager(); ~ReplayManager(); diff --git a/qrenderdoc/Code/Resources.cpp b/qrenderdoc/Code/Resources.cpp index d0ed2673a..ab01a2281 100644 --- a/qrenderdoc/Code/Resources.cpp +++ b/qrenderdoc/Code/Resources.cpp @@ -25,6 +25,7 @@ #include "Resources.h" #include #include +#include "QRDUtils.h" Resources::ResourceSet *Resources::resources = NULL; @@ -35,20 +36,20 @@ void Resources::Initialise() resources = new Resources::ResourceSet(); #undef RESOURCE_DEF -#define RESOURCE_DEF(name, filename) \ - filenames.push_back(":/" filename); \ - resources->name##_data.pixmap = QPixmap(QString::fromUtf8(":/" filename)); \ +#define RESOURCE_DEF(name, filename) \ + filenames.push_back(lit(":/" filename)); \ + resources->name##_data.pixmap = QPixmap(lit(":/" filename)); \ resources->name##_data.icon = QIcon(resources->name##_data.pixmap); RESOURCE_LIST(); - QDirIterator it(":"); + QDirIterator it(lit(":")); while(it.hasNext()) { QString filename = it.next(); if(filenames.contains(filename)) continue; - if(!filename.contains(".png")) + if(!filename.contains(lit(".png"))) continue; qCritical() << "Resource not configured for" << filename; diff --git a/qrenderdoc/Code/pyrenderdoc/PythonContext.cpp b/qrenderdoc/Code/pyrenderdoc/PythonContext.cpp index 3c6886460..bd583a566 100644 --- a/qrenderdoc/Code/pyrenderdoc/PythonContext.cpp +++ b/qrenderdoc/Code/pyrenderdoc/PythonContext.cpp @@ -55,6 +55,7 @@ PyTypeObject **SbkPySide2_QtWidgetsTypes = NULL; #include #include #include +#include "Code/QRDUtils.h" #include "PythonContext.h" #include "renderdoc_replay.h" @@ -105,13 +106,13 @@ static inline QString ToQStr(PyObject *value) { PyObject *repr = PyObject_Str(value); if(repr == NULL) - return ""; + return QString(); PyObject *decoded = PyUnicode_AsUTF8String(repr); if(decoded == NULL) - return ""; + return QString(); - QString ret = PyBytes_AsString(decoded); + QString ret = QString::fromUtf8(PyBytes_AsString(decoded)); Py_DecRef(decoded); Py_DecRef(repr); @@ -119,7 +120,7 @@ static inline QString ToQStr(PyObject *value) return ret; } - return ""; + return QString(); } static wchar_t program_name[] = L"qrenderdoc"; @@ -162,7 +163,7 @@ void FetchException(QString &typeStr, QString &valueStr, QList &frames) } else { - typeStr = ""; + typeStr = QString(); } if(valueObj) @@ -398,7 +399,7 @@ PythonContext::PythonContext(QObject *parent) : QObject(parent) context_namespace = PyDict_Copy(main_dict); QString typeStr; - QString valueStr = ""; + QString valueStr; QList frames; // for compatibility with earlier versions of python that took a char * instead of const char * @@ -461,7 +462,7 @@ void PythonContext::GlobalShutdown() QString PythonContext::versionString() { - return QString("%1.%2.%3").arg(PY_MAJOR_VERSION).arg(PY_MINOR_VERSION).arg(PY_MICRO_VERSION); + return QFormatStr("%1.%2.%3").arg(PY_MAJOR_VERSION).arg(PY_MINOR_VERSION).arg(PY_MICRO_VERSION); } void PythonContext::executeString(const QString &filename, const QString &source, bool interactive) @@ -469,8 +470,8 @@ void PythonContext::executeString(const QString &filename, const QString &source if(!initialised()) { emit exception( - "SystemError", - "Python integration failed to initialise, see diagnostic log for more information.", {}); + lit("SystemError"), + tr("Python integration failed to initialise, see diagnostic log for more information."), {}); return; } @@ -515,7 +516,7 @@ void PythonContext::executeString(const QString &filename, const QString &source Py_DecRef(compiled); QString typeStr; - QString valueStr = ""; + QString valueStr; QList frames; bool caughtException = (ret == NULL); @@ -532,7 +533,7 @@ void PythonContext::executeString(const QString &filename, const QString &source void PythonContext::executeString(const QString &source, bool interactive) { - executeString("", source, interactive); + executeString(lit(""), source, interactive); } void PythonContext::executeFile(const QString &filename) @@ -541,7 +542,7 @@ void PythonContext::executeFile(const QString &filename) if(!f.exists()) { - emit exception("FileNotFoundError", QString("No such file or directory: %1").arg(filename), {}); + emit exception(lit("FileNotFoundError"), tr("No such file or directory: %1").arg(filename), {}); return; } @@ -553,7 +554,7 @@ void PythonContext::executeFile(const QString &filename) } else { - emit exception("IOError", QString("%1: %2").arg(f.errorString()).arg(filename), {}); + emit exception(lit("IOError"), QFormatStr("%1: %2").arg(f.errorString()).arg(filename), {}); } } @@ -562,8 +563,8 @@ void PythonContext::setGlobal(const char *varName, const char *typeName, void *o if(!initialised()) { emit exception( - "SystemError", - "Python integration failed to initialise, see diagnostic log for more information.", {}); + lit("SystemError"), + tr("Python integration failed to initialise, see diagnostic log for more information."), {}); return; } @@ -581,8 +582,9 @@ void PythonContext::setGlobal(const char *varName, const char *typeName, void *o if(ret != 0) { - emit exception("RuntimeError", - QString("Failed to set variable '%1' of type '%2'").arg(varName).arg(typeName), + emit exception(lit("RuntimeError"), tr("Failed to set variable '%1' of type '%2'") + .arg(QString::fromUtf8(varName)) + .arg(QString::fromUtf8(typeName)), {}); return; } @@ -679,8 +681,8 @@ void PythonContext::setPyGlobal(const char *varName, PyObject *obj) if(!initialised()) { emit exception( - "SystemError", - "Python integration failed to initialise, see diagnostic log for more information.", {}); + lit("SystemError"), + tr("Python integration failed to initialise, see diagnostic log for more information."), {}); return; } @@ -696,7 +698,8 @@ void PythonContext::setPyGlobal(const char *varName, PyObject *obj) if(ret == 0) return; - emit exception("RuntimeError", QString("Failed to set variable '%1'").arg(varName), {}); + emit exception(lit("RuntimeError"), + tr("Failed to set variable '%1'").arg(QString::fromUtf8(varName)), {}); } void PythonContext::outstream_del(PyObject *self) @@ -798,7 +801,7 @@ extern "C" PyThreadState *GetExecutingThreadState(PyObject *global_handle) extern "C" void HandleException(PyObject *global_handle) { QString typeStr; - QString valueStr = ""; + QString valueStr; QList frames; FetchException(typeStr, valueStr, frames); diff --git a/qrenderdoc/Code/pyrenderdoc/PythonContext.h b/qrenderdoc/Code/pyrenderdoc/PythonContext.h index 17cbed5f6..a9507fc15 100644 --- a/qrenderdoc/Code/pyrenderdoc/PythonContext.h +++ b/qrenderdoc/Code/pyrenderdoc/PythonContext.h @@ -29,6 +29,7 @@ #include #include #include +#include "Code/QRDUtils.h" #include "renderdoc_replay.h" class QThread; @@ -76,8 +77,9 @@ public: if(obj) setPyGlobal(varName, obj); else - emit exception("RuntimeError", - QString("Failed to set variable '%1' of type '%2'").arg(varName).arg(typeName), + emit exception(lit("RuntimeError"), tr("Failed to set variable '%1' of type '%2'") + .arg(QString::fromUtf8(varName)) + .arg(QString::fromUtf8(typeName)), {}); } diff --git a/qrenderdoc/Code/qrenderdoc.cpp b/qrenderdoc/Code/qrenderdoc.cpp index f6755a2e4..2613a4929 100644 --- a/qrenderdoc/Code/qrenderdoc.cpp +++ b/qrenderdoc/Code/qrenderdoc.cpp @@ -56,20 +56,20 @@ int main(int argc, char *argv[]) qInfo() << "QRenderDoc initialising."; - QString filename = ""; + QString filename; bool temp = false; for(int i = 0; i < argc; i++) { - if(!QString::compare(argv[i], "--tempfile", Qt::CaseInsensitive)) + if(!QString::compare(QString::fromUtf8(argv[i]), lit("--tempfile"), Qt::CaseInsensitive)) temp = true; } for(int i = 0; i < argc; i++) { - if(!QString::compare(argv[i], "--install_vulkan_layer") && i + 1 < argc) + if(!QString::compare(QString::fromUtf8(argv[i]), lit("--install_vulkan_layer")) && i + 1 < argc) { - if(!QString::compare(argv[i + 1], "root")) + if(!QString::compare(QString::fromUtf8(argv[i + 1]), lit("root"))) RENDERDOC_UpdateVulkanLayerRegistration(true); else RENDERDOC_UpdateVulkanLayerRegistration(false); @@ -77,22 +77,22 @@ int main(int argc, char *argv[]) } } - QString remoteHost = ""; + QString remoteHost; uint remoteIdent = 0; for(int i = 0; i + 1 < argc; i++) { - if(!QString::compare(argv[i], "--remoteaccess", Qt::CaseInsensitive)) + if(!QString::compare(QString::fromUtf8(argv[i]), lit("--remoteaccess"), Qt::CaseInsensitive)) { - QRegularExpression regexp("^([a-zA-Z0-9_-]+:)?([0-9]+)$"); + QRegularExpression regexp(lit("^([a-zA-Z0-9_-]+:)?([0-9]+)$")); - QRegularExpressionMatch match = regexp.match(argv[i + 1]); + QRegularExpressionMatch match = regexp.match(QString::fromUtf8(argv[i + 1])); if(match.hasMatch()) { QString host = match.captured(1); - if(host.length() > 0 && host[host.length() - 1] == ':') + if(host.length() > 0 && host[host.length() - 1] == QLatin1Char(':')) host.chop(1); bool ok = false; @@ -111,24 +111,26 @@ int main(int argc, char *argv[]) for(int i = 0; i + 1 < argc; i++) { - if(!QString::compare(argv[i], "--python", Qt::CaseInsensitive) || - !QString::compare(argv[i], "--py", Qt::CaseInsensitive) || - !QString::compare(argv[i], "--script", Qt::CaseInsensitive)) + QString a = QString::fromUtf8(argv[i]); + if(!QString::compare(a, lit("--python"), Qt::CaseInsensitive) || + !QString::compare(a, lit("--py"), Qt::CaseInsensitive) || + !QString::compare(a, lit("--script"), Qt::CaseInsensitive)) { - QFileInfo checkFile(argv[i + 1]); + QString f = QString::fromUtf8(argv[i + 1]); + QFileInfo checkFile(f); if(checkFile.exists() && checkFile.isFile()) { - pyscripts.push_back(argv[i + 1]); + pyscripts.push_back(f); } } } if(argc > 1) { - filename = argv[argc - 1]; + filename = QString::fromUtf8(argv[argc - 1]); QFileInfo checkFile(filename); - if(!checkFile.exists() || !checkFile.isFile() || checkFile.suffix().toLower() == "py") - filename = ""; + if(!checkFile.exists() || !checkFile.isFile() || checkFile.suffix().toLower() == lit("py")) + filename = QString(); } argc += 2; @@ -139,7 +141,7 @@ int main(int argc, char *argv[]) argv_mod[i] = argv[i]; char arg[] = "-platformpluginpath"; - QString path = QFileInfo(argv[0]).absolutePath(); + QString path = QFileInfo(QString::fromUtf8(argv[0])).absolutePath(); QByteArray pathChars = path.toUtf8(); argv_mod[argc - 2] = arg; @@ -158,13 +160,13 @@ int main(int argc, char *argv[]) dir.mkpath(configPath); } - QString configFilename = ConfigFilePath("UI.config"); + QString configFilename = ConfigFilePath(lit("UI.config")); if(!config.Load(configFilename)) { RDDialog::critical( - NULL, "Error loading config", - QString( + NULL, CaptureContext::tr("Error loading config"), + CaptureContext::tr( "Error loading config file\n%1\nA default config is loaded and will be saved out.") .arg(configFilename)); } @@ -192,12 +194,13 @@ int main(int argc, char *argv[]) if(!frames.isEmpty()) { - exString += "Traceback (most recent call last):\n"; + exString += QApplication::translate( + "qrenderdoc", "Traceback (most recent call last):\n"); for(const QString &f : frames) - exString += QString(" %1\n").arg(f); + exString += QFormatStr(" %1\n").arg(f); } - exString += QString("%1: %2\n").arg(type).arg(value); + exString += QFormatStr("%1: %2\n").arg(type).arg(value); fprintf(stderr, "%s", exString.toUtf8().data()); }); diff --git a/qrenderdoc/Widgets/BufferFormatSpecifier.cpp b/qrenderdoc/Widgets/BufferFormatSpecifier.cpp index bba312db0..5f5dc1e9e 100644 --- a/qrenderdoc/Widgets/BufferFormatSpecifier.cpp +++ b/qrenderdoc/Widgets/BufferFormatSpecifier.cpp @@ -34,7 +34,7 @@ BufferFormatSpecifier::BufferFormatSpecifier(QWidget *parent) QObject::connect(ui->toggleHelp, &QPushButton::clicked, this, &BufferFormatSpecifier::toggleHelp); - setErrors(""); + setErrors(QString()); ui->formatText->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); } @@ -81,6 +81,6 @@ void BufferFormatSpecifier::showHelp(bool help) void BufferFormatSpecifier::on_apply_clicked() { - setErrors(""); + setErrors(QString()); emit processFormat(ui->formatText->toPlainText()); } diff --git a/qrenderdoc/Windows/APIInspector.cpp b/qrenderdoc/Windows/APIInspector.cpp index 38e1322c0..368c112bb 100644 --- a/qrenderdoc/Windows/APIInspector.cpp +++ b/qrenderdoc/Windows/APIInspector.cpp @@ -33,13 +33,13 @@ APIInspector::APIInspector(ICaptureContext &ctx, QWidget *parent) { ui->setupUi(this); - ui->apiEvents->setColumns({"EID", tr("Event")}); + ui->apiEvents->setColumns({lit("EID"), tr("Event")}); ui->splitter->setCollapsible(1, true); ui->splitter->setSizes({1, 0}); RDSplitterHandle *handle = (RDSplitterHandle *)ui->splitter->handle(1); - handle->setTitle("Callstack"); + handle->setTitle(tr("Callstack")); handle->setIndex(1); handle->setCollapsed(true); @@ -118,8 +118,8 @@ void APIInspector::fillAPIView() ui->apiEvents->setUpdatesEnabled(false); ui->apiEvents->clear(); - QRegularExpression rgxopen("^\\s*{"); - QRegularExpression rgxclose("^\\s*}"); + QRegularExpression rgxopen(lit("^\\s*{")); + QRegularExpression rgxclose(lit("^\\s*}")); const DrawcallDescription *draw = m_Ctx.CurSelectedDrawcall(); @@ -127,13 +127,13 @@ void APIInspector::fillAPIView() { for(const APIEvent &ev : draw->events) { - QStringList lines = ToQStr(ev.eventDesc).split("\n", QString::SkipEmptyParts); + QStringList lines = ToQStr(ev.eventDesc).split(lit("\n"), QString::SkipEmptyParts); RDTreeWidgetItem *root = new RDTreeWidgetItem({QString::number(ev.eventID), lines[0]}); int i = 1; - if(i < lines.count() && lines[i].trimmed() == "{") + if(i < lines.count() && lines[i].trimmed() == lit("{")) i++; QList nodestack; @@ -146,7 +146,7 @@ void APIInspector::fillAPIView() else if(rgxclose.match(lines[i]).hasMatch()) nodestack.pop_back(); else if(!nodestack.empty()) - nodestack.back()->addChild(new RDTreeWidgetItem({"", lines[i].trimmed()})); + nodestack.back()->addChild(new RDTreeWidgetItem({QString(), lines[i].trimmed()})); } if(ev.eventID == draw->eventID) diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index 5d04b6685..e0615b360 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -400,11 +400,11 @@ public: { if(section == 0) { - return meshView ? "VTX" : "Element"; + return meshView ? lit("VTX") : lit("Element"); } else if(section == 1 && meshView) { - return "IDX"; + return lit("IDX"); } else { @@ -413,9 +413,9 @@ public: if(el.format.compCount == 1) return el.name; - QChar comps[] = {'x', 'y', 'z', 'w'}; + QChar comps[] = {QLatin1Char('x'), QLatin1Char('y'), QLatin1Char('z'), QLatin1Char('w')}; - return QString("%1.%2").arg(el.name).arg(comps[componentForIndex(section)]); + return QFormatStr("%1.%2").arg(el.name).arg(comps[componentForIndex(section)]); } } @@ -433,7 +433,7 @@ public: // pad these columns to allow for sufficiently wide data if(index.column() < reservedColumnCount()) - opt.text = "999999"; + opt.text = lit("999999"); else opt.text = data(index).toString(); opt.styleObject = NULL; @@ -496,7 +496,7 @@ public: idx = CalcIndex(indices, row, baseVertex); if(primRestart && idx == primRestart) - return col == 1 ? "--" : " Restart"; + return col == 1 ? lit("--") : lit(" Restart"); if(idx == ~0U) return QVariant(); @@ -544,12 +544,12 @@ public: if(d < 0.0) ret = Formatter::Format(d); else if(d > 0.0) - ret = " " + Formatter::Format(d); + ret = lit(" ") + Formatter::Format(d); else if(qIsNaN(d)) - ret = " NaN"; + ret = lit(" NaN"); else // force negative and positive 0 together - ret = " " + Formatter::Format(0.0); + ret = lit(" ") + Formatter::Format(0.0); } else if(vt == QMetaType::Float) { @@ -558,12 +558,12 @@ public: if(f < 0.0) ret = Formatter::Format(f); else if(f > 0.0) - ret = " " + Formatter::Format(f); + ret = lit(" ") + Formatter::Format(f); else if(qIsNaN(f)) - ret = " NaN"; + ret = lit(" NaN"); else // force negative and positive 0 together - ret = " " + Formatter::Format(0.0); + ret = lit(" ") + Formatter::Format(0.0); } else if(vt == QMetaType::UInt || vt == QMetaType::UShort || vt == QMetaType::UChar) { @@ -573,7 +573,7 @@ public: { int i = v.toInt(); if(i > 0) - ret = " " + Formatter::Format(i); + ret = lit(" ") + Formatter::Format(i); else ret = Formatter::Format(i); } @@ -626,7 +626,7 @@ public: if(positionEl >= 0 && positionEl < columns.count()) return columns[positionEl].name; - return ""; + return QString(); } void setSecondaryColumn(int sec, bool secEnabled, bool secAlpha) @@ -656,7 +656,7 @@ public: if(secondaryEl >= 0 && secondaryEl < columns.count()) return columns[secondaryEl].name; - return ""; + return QString(); } int elementIndexForColumn(int col) const { @@ -1736,10 +1736,10 @@ void BufferViewer::guessPositionColumn(BufferItemModel *model) { const FormatElement &el = model->columns[i]; - if(el.name.compare("POSITION", Qt::CaseInsensitive) == 0 || - el.name.compare("POSITION0", Qt::CaseInsensitive) == 0 || - el.name.compare("POS", Qt::CaseInsensitive) == 0 || - el.name.compare("POS0", Qt::CaseInsensitive) == 0) + if(el.name.compare(lit("POSITION"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("POSITION0"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("POS"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("POS0"), Qt::CaseInsensitive) == 0) { posEl = i; break; @@ -1751,7 +1751,7 @@ void BufferViewer::guessPositionColumn(BufferItemModel *model) { const FormatElement &el = model->columns[i]; - if(el.name.contains("POSITION", Qt::CaseInsensitive)) + if(el.name.contains(lit("POSITION"), Qt::CaseInsensitive)) { posEl = i; break; @@ -1763,7 +1763,7 @@ void BufferViewer::guessPositionColumn(BufferItemModel *model) { const FormatElement &el = model->columns[i]; - if(el.name.contains("POS", Qt::CaseInsensitive)) + if(el.name.contains(lit("POS"), Qt::CaseInsensitive)) { posEl = i; break; @@ -1791,12 +1791,12 @@ void BufferViewer::guessSecondaryColumn(BufferItemModel *model) { const FormatElement &el = model->columns[i]; - if(el.name.compare("TEXCOORD", Qt::CaseInsensitive) == 0 || - el.name.compare("TEXCOORD0", Qt::CaseInsensitive) == 0 || - el.name.compare("TEX", Qt::CaseInsensitive) == 0 || - el.name.compare("TEX0", Qt::CaseInsensitive) == 0 || - el.name.compare("UV", Qt::CaseInsensitive) == 0 || - el.name.compare("UV0", Qt::CaseInsensitive) == 0) + if(el.name.compare(lit("TEXCOORD"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("TEXCOORD0"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("TEX"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("TEX0"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("UV"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("UV0"), Qt::CaseInsensitive) == 0) { secondEl = i; break; @@ -1807,10 +1807,10 @@ void BufferViewer::guessSecondaryColumn(BufferItemModel *model) { const FormatElement &el = model->columns[i]; - if(el.name.compare("COLOR", Qt::CaseInsensitive) == 0 || - el.name.compare("COLOR0", Qt::CaseInsensitive) == 0 || - el.name.compare("COL", Qt::CaseInsensitive) == 0 || - el.name.compare("COL0", Qt::CaseInsensitive) == 0) + if(el.name.compare(lit("COLOR"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("COLOR0"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("COL"), Qt::CaseInsensitive) == 0 || + el.name.compare(lit("COL0"), Qt::CaseInsensitive) == 0) { secondEl = i; break; @@ -2211,7 +2211,7 @@ void BufferViewer::render_clicked(QMouseEvent *e) if((e->buttons() & Qt::RightButton) && m_Output) { - m_Ctx.Replay().AsyncInvoke("PickVertex", [this, curpos](IReplayController *r) { + m_Ctx.Replay().AsyncInvoke(lit("PickVertex"), [this, curpos](IReplayController *r) { uint32_t instanceSelected = 0; uint32_t vertSelected = 0; @@ -2265,7 +2265,7 @@ void BufferViewer::ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId BufferDescription *buf = m_Ctx.GetBuffer(id); if(buf) - setWindowTitle(ToQStr(buf->name) + " - Contents"); + setWindowTitle(ToQStr(buf->name) + lit(" - Contents")); processFormat(format); } @@ -2282,7 +2282,7 @@ void BufferViewer::ViewTexture(uint32_t arrayIdx, uint32_t mip, ResourceId id, c TextureDescription *tex = m_Ctx.GetTexture(id); if(tex) - setWindowTitle(ToQStr(tex->name) + " - Contents"); + setWindowTitle(ToQStr(tex->name) + lit(" - Contents")); processFormat(format); } @@ -2453,21 +2453,21 @@ void BufferViewer::CalcColumnWidth() floatFmt.compType = CompType::UInt; floatFmt.compCount = 1; - FormatElement("ColumnSizeTest", 0, 0, false, 1, false, 1, floatFmt, false); - FormatElement("ColumnSizeTest", 0, 0, false, 1, false, 1, intFmt, true); - FormatElement("ColumnSizeTest", 0, 0, false, 1, false, 1, intFmt, false); + FormatElement(lit("ColumnSizeTest"), 0, 0, false, 1, false, 1, floatFmt, false); + FormatElement(lit("ColumnSizeTest"), 0, 0, false, 1, false, 1, intFmt, true); + FormatElement(lit("ColumnSizeTest"), 0, 0, false, 1, false, 1, intFmt, false); m_ModelVSIn->columns.clear(); m_ModelVSIn->columns.push_back( - FormatElement("ColumnSizeTest", 0, 0, false, 1, false, 1, floatFmt, false)); + FormatElement(lit("ColumnSizeTest"), 0, 0, false, 1, false, 1, floatFmt, false)); m_ModelVSIn->columns.push_back( - FormatElement("ColumnSizeTest", 0, 4, false, 1, false, 1, floatFmt, false)); + FormatElement(lit("ColumnSizeTest"), 0, 4, false, 1, false, 1, floatFmt, false)); m_ModelVSIn->columns.push_back( - FormatElement("ColumnSizeTest", 0, 8, false, 1, false, 1, floatFmt, false)); + FormatElement(lit("ColumnSizeTest"), 0, 8, false, 1, false, 1, floatFmt, false)); m_ModelVSIn->columns.push_back( - FormatElement("ColumnSizeTest", 0, 12, false, 1, false, 1, intFmt, true)); + FormatElement(lit("ColumnSizeTest"), 0, 12, false, 1, false, 1, intFmt, true)); m_ModelVSIn->columns.push_back( - FormatElement("ColumnSizeTest", 0, 16, false, 1, false, 1, intFmt, false)); + FormatElement(lit("ColumnSizeTest"), 0, 16, false, 1, false, 1, intFmt, false)); m_ModelVSIn->numRows = 2; @@ -2618,12 +2618,12 @@ void BufferViewer::exportData(const BufferExport ¶ms) QString filter; if(params.format == BufferExport::CSV) - filter = "CSV Files (*.csv)"; + filter = lit("CSV Files (*.csv)"); else if(params.format == BufferExport::RawBytes) - filter = "Binary Files (*.bin)"; + filter = lit("Binary Files (*.bin)"); QString filename = RDDialog::getSaveFileName(this, tr("Export buffer to bytes"), QString(), - QString("%1;;All files (*.*)").arg(filter)); + QFormatStr("%1;;All files (*.*)").arg(filter)); if(filename.isEmpty()) return; diff --git a/qrenderdoc/Windows/BufferViewer.h b/qrenderdoc/Windows/BufferViewer.h index 12a52c923..4190ee8c5 100644 --- a/qrenderdoc/Windows/BufferViewer.h +++ b/qrenderdoc/Windows/BufferViewer.h @@ -72,9 +72,9 @@ public: ScrollToRow(m_ModelVSIn, row); } void ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, - const QString &format = "") override; + const QString &format = QString()) override; void ViewTexture(uint32_t arrayIdx, uint32_t mip, ResourceId id, - const QString &format = "") override; + const QString &format = QString()) override; // ILogViewerForm void OnLogfileLoaded() override; diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp index 537126597..2f66f36d0 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp @@ -149,7 +149,7 @@ void ConstantBufferPreviewer::on_setFormat_toggled(bool checked) ui->splitter->setSizes({1, 0}); ui->splitter->handle(1)->setEnabled(false); - processFormat(""); + processFormat(QString()); return; } @@ -167,7 +167,7 @@ void ConstantBufferPreviewer::processFormat(const QString &format) if(format.isEmpty()) { m_formatOverride.clear(); - ui->formatSpecifier->setErrors(""); + ui->formatSpecifier->setErrors(QString()); } else { @@ -192,8 +192,8 @@ void ConstantBufferPreviewer::addVariables(RDTreeWidgetItem *root, if(v.rows > 1) { for(uint32_t i = 0; i < v.rows; i++) - n->addChild(new RDTreeWidgetItem( - {QString("%1.row%2").arg(ToQStr(v.name)).arg(i), RowString(v, i), RowTypeString(v)})); + n->addChild(new RDTreeWidgetItem({QFormatStr("%1.row%2").arg(ToQStr(v.name)).arg(i), + RowString(v, i), RowTypeString(v)})); } if(v.members.count > 0) @@ -282,14 +282,14 @@ void ConstantBufferPreviewer::setVariables(const rdctype::array void ConstantBufferPreviewer::updateLabels() { - QString bufName = ""; + QString bufName; bool needName = true; BufferDescription *buf = m_Ctx.GetBuffer(m_cbuffer); if(buf) { - bufName = buf->name; + bufName = ToQStr(buf->name); if(buf->customName) needName = false; } @@ -300,18 +300,20 @@ void ConstantBufferPreviewer::updateLabels() { if(needName && (int)m_slot < reflection->ConstantBlocks.count && reflection->ConstantBlocks[m_slot].name.count > 0) - bufName = "<" + ToQStr(reflection->ConstantBlocks[m_slot].name) + ">"; + bufName = QFormatStr("<%1>").arg(ToQStr(reflection->ConstantBlocks[m_slot].name)); } ui->nameLabel->setText(bufName); GraphicsAPI pipeType = m_Ctx.APIProps().pipelineType; - QString title = - QString("%1 %2 %3").arg(ToQStr(m_stage, pipeType)).arg(IsD3D(pipeType) ? "CB" : "UBO").arg(m_slot); + QString title = QFormatStr("%1 %2 %3") + .arg(ToQStr(m_stage, pipeType)) + .arg(IsD3D(pipeType) ? lit("CB") : lit("UBO")) + .arg(m_slot); if(m_Ctx.CurPipelineState().SupportsResourceArrays()) - title += QString(" [%1]").arg(m_arrayIdx); + title += QFormatStr(" [%1]").arg(m_arrayIdx); ui->slotLabel->setText(title); setWindowTitle(title); diff --git a/qrenderdoc/Windows/DebugMessageView.cpp b/qrenderdoc/Windows/DebugMessageView.cpp index f0545b00a..1c3ad8f31 100644 --- a/qrenderdoc/Windows/DebugMessageView.cpp +++ b/qrenderdoc/Windows/DebugMessageView.cpp @@ -71,12 +71,12 @@ public: { switch(section) { - case 0: return "EID"; - case 1: return "Source"; - case 2: return "Severity"; - case 3: return "Category"; - case 4: return "ID"; - case 5: return "Description"; + case 0: return lit("EID"); + case 1: return lit("Source"); + case 2: return lit("Severity"); + case 3: return lit("Category"); + case 4: return lit("ID"); + case 5: return lit("Description"); default: break; } } @@ -228,10 +228,10 @@ DebugMessageView::DebugMessageView(ICaptureContext &ctx, QWidget *parent) m_ContextMenu = new QMenu(this); m_ShowHidden = new QAction(tr("Show hidden rows"), this); - m_ToggleSource = new QAction("", this); - m_ToggleSeverity = new QAction("", this); - m_ToggleCategory = new QAction("", this); - m_ToggleMessageType = new QAction("", this); + m_ToggleSource = new QAction(QString(), this); + m_ToggleSeverity = new QAction(QString(), this); + m_ToggleCategory = new QAction(QString(), this); + m_ToggleMessageType = new QAction(QString(), this); m_ShowHidden->setCheckable(true); diff --git a/qrenderdoc/Windows/Dialogs/AboutDialog.cpp b/qrenderdoc/Windows/Dialogs/AboutDialog.cpp index b19f1f83d..02fb20dae 100644 --- a/qrenderdoc/Windows/Dialogs/AboutDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/AboutDialog.cpp @@ -26,6 +26,7 @@ #include #include #include +#include "Code/QRDUtils.h" #include "ui_AboutDialog.h" #include "version.h" @@ -33,23 +34,25 @@ AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDia { ui->setupUi(this); - QString hash(GIT_COMMIT_HASH); + QString hash = lit(GIT_COMMIT_HASH); - if(hash[0] == QChar('N') && hash[1] == QChar('O')) + if(hash[0] == QLatin1Char('N') && hash[1] == QLatin1Char('O')) { - ui->version->setText(QString("Version %1 (built from unknown source)").arg(FULL_VERSION_STRING)); + ui->version->setText( + QFormatStr("Version %1 (built from unknown source)").arg(lit(FULL_VERSION_STRING))); } else { - ui->version->setText(QString("Version %1 (built from %3)") - .arg(FULL_VERSION_STRING) - .arg("https://github.com/baldurk/renderdoc/commit/" GIT_COMMIT_HASH) - .arg(QString(GIT_COMMIT_HASH).left(8))); + ui->version->setText( + QFormatStr("Version %1 (built from %3)") + .arg(lit(FULL_VERSION_STRING)) + .arg(lit("https://github.com/baldurk/renderdoc/commit/" GIT_COMMIT_HASH)) + .arg(lit(GIT_COMMIT_HASH).left(8))); } #if defined(DISTRIBUTION_VERSION) - ui->owner->setText(QString("Baldur Karlsson - Packaged for %1").arg(DISTRIBUTION_NAME)); - ui->contact->setText(QString("%1").arg(DISTRIBUTION_CONTACT)); + ui->owner->setText(QFormatStr("Baldur Karlsson - Packaged for %1").arg(lit(DISTRIBUTION_NAME))); + ui->contact->setText(QFormatStr("%1").arg(lit(DISTRIBUTION_CONTACT))); #endif setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); diff --git a/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp b/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp index 612ca34b5..c4d6abd32 100644 --- a/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/CaptureDialog.cpp @@ -42,17 +42,17 @@ static QString GetDescription(const EnvironmentModification &env) QString ret; if(env.mod == EnvMod::Append) - ret = QString("Append %1 with %2 using %3") + ret = QFormatStr("Append %1 with %2 using %3") .arg(ToQStr(env.name)) .arg(ToQStr(env.value)) .arg(ToQStr(env.sep)); else if(env.mod == EnvMod::Prepend) - ret = QString("Prepend %1 with %2 using %3") + ret = QFormatStr("Prepend %1 with %2 using %3") .arg(ToQStr(env.name)) .arg(ToQStr(env.value)) .arg(ToQStr(env.sep)); else - ret = QString("Set %1 to %2").arg(ToQStr(env.name)).arg(ToQStr(env.value)); + ret = QFormatStr("Set %1 to %2").arg(ToQStr(env.name)).arg(ToQStr(env.value)); return ret; } @@ -145,8 +145,8 @@ void CaptureDialog::SetInjectMode(bool inject) fillProcessList(); - ui->launch->setText("Inject"); - this->setWindowTitle("Inject into Process"); + ui->launch->setText(lit("Inject")); + this->setWindowTitle(lit("Inject into Process")); } else { @@ -158,8 +158,8 @@ void CaptureDialog::SetInjectMode(bool inject) ui->globalGroup->setVisible(m_Ctx.Config().AllowGlobalHook); - ui->launch->setText("Launch"); - this->setWindowTitle("Capture Executable"); + ui->launch->setText(lit("Launch")); + this->setWindowTitle(lit("Capture Executable")); } } @@ -192,7 +192,7 @@ void CaptureDialog::on_exePath_textChanged(const QString &text) // This is likely due to someone pasting a full path copied using copy path. Removing the quotes // is safe in any case - if(exe.startsWith(QChar('"')) && exe.endsWith(QChar('"')) && exe.count() > 2) + if(exe.startsWith(QLatin1Char('"')) && exe.endsWith(QLatin1Char('"')) && exe.count() > 2) { exe = exe.mid(1, exe.count() - 2); ui->exePath->setText(exe); @@ -211,16 +211,16 @@ void CaptureDialog::on_exePath_textChanged(const QString &text) path = QDir::toNativeSeparators(path); // match the path separators from the path - if(exe.count(QChar('/')) > exe.count(QChar('\\'))) - path = path.replace('\\', '/'); + if(exe.count(QLatin1Char('/')) > exe.count(QLatin1Char('\\'))) + path = path.replace(QLatin1Char('\\'), QLatin1Char('/')); else - path = path.replace('/', '\\'); + path = path.replace(QLatin1Char('/'), QLatin1Char('\\')); ui->workDirPath->setPlaceholderText(path); } - else if(exe == "") + else if(exe.isEmpty()) { - ui->workDirPath->setPlaceholderText(""); + ui->workDirPath->setPlaceholderText(QString()); } UpdateGlobalHook(); @@ -250,7 +250,7 @@ void CaptureDialog::on_vulkanLayerWarn_clicked() "RenderDoc documentation, or package/distribution documentation on linux\n\n"); for(const rdctype::str &j : otherJSONs) - msg += ToQStr(j) + "\n"; + msg += ToQStr(j) + lit("\n"); RDDialog::critical(this, tr("Unfixable vulkan layer configuration"), msg); return; @@ -289,7 +289,7 @@ void CaptureDialog::on_vulkanLayerWarn_clicked() for(const rdctype::str &j : otherJSONs) msg += (updateAllowed ? tr("Unregister/update: %1\n") : tr("Unregister: %1\n")).arg(ToQStr(j)); - msg += "\n"; + msg += lit("\n"); } if(!thisRegistered) @@ -306,7 +306,7 @@ void CaptureDialog::on_vulkanLayerWarn_clicked() msg += tr(" -- %1\n").arg(ToQStr(j)); } - msg += "\n"; + msg += lit("\n"); } msg += tr("This is a one-off change, it won't be needed again unless the installation moves."); @@ -348,20 +348,16 @@ void CaptureDialog::on_vulkanLayerWarn_clicked() { if(admin) { - RunProcessAsAdmin(qApp->applicationFilePath(), QStringList() << "--install_vulkan_layer" - << "root", - [this]() { - // ui->vulkanLayerWarn->setVisible(RENDERDOC_NeedVulkanLayerRegistration(NULL, - // NULL, NULL)); - ui->vulkanLayerWarn->setVisible(false); - }); + RunProcessAsAdmin(qApp->applicationFilePath(), + QStringList() << lit("--install_vulkan_layer") << lit("root"), + [this]() { ui->vulkanLayerWarn->setVisible(false); }); return; } else { QProcess process; - process.start(qApp->applicationFilePath(), QStringList() << "--install_vulkan_layer" - << "user"); + process.start(qApp->applicationFilePath(), QStringList() << lit("--install_vulkan_layer") + << lit("user")); process.waitForFinished(300); } } @@ -377,19 +373,19 @@ void CaptureDialog::on_processRefesh_clicked() void CaptureDialog::on_exePathBrowse_clicked() { - QString initDir = ""; - QString file = ""; + QString initDir; + QString file; QFileInfo f(ui->exePath->text()); QDir dir = f.dir(); - if(ui->exePath->text() != "" && f.isAbsolute() && dir.exists()) + if(f.isAbsolute() && dir.exists()) { initDir = dir.absolutePath(); } - else if(m_Ctx.Config().LastCapturePath != "") + else if(!m_Ctx.Config().LastCapturePath.isEmpty()) { initDir = m_Ctx.Config().LastCapturePath; - if(m_Ctx.Config().LastCaptureExe != "") + if(!m_Ctx.Config().LastCaptureExe.isEmpty()) file = m_Ctx.Config().LastCaptureExe; } @@ -406,13 +402,13 @@ void CaptureDialog::on_exePathBrowse_clicked() filename = RDDialog::getExecutableFileName(this, tr("Choose executable"), initDir); } - if(filename != "") + if(!filename.isEmpty()) SetExecutableFilename(filename); } void CaptureDialog::on_workDirBrowse_clicked() { - QString initDir = ""; + QString initDir; if(QDir(ui->workDirPath->text()).exists()) { @@ -423,7 +419,7 @@ void CaptureDialog::on_workDirBrowse_clicked() QDir dir = QFileInfo(ui->exePath->text()).dir(); if(dir.exists()) initDir = dir.absolutePath(); - else if(m_Ctx.Config().LastCapturePath != "") + else if(!m_Ctx.Config().LastCapturePath.isEmpty()) initDir = m_Ctx.Config().LastCapturePath; } @@ -438,10 +434,10 @@ void CaptureDialog::on_workDirBrowse_clicked() } else { - dir = RDDialog::getExistingDirectory(this, "Choose working directory", initDir); + dir = RDDialog::getExistingDirectory(this, tr("Choose working directory"), initDir); } - if(dir != "") + if(!dir.isEmpty()) ui->workDirPath->setText(dir); } @@ -471,9 +467,9 @@ void CaptureDialog::on_toggleGlobal_clicked() void CaptureDialog::on_saveSettings_clicked() { QString filename = RDDialog::getSaveFileName(this, tr("Save Settings As"), QString(), - "Capture settings (*.cap)"); + lit("Capture settings (*.cap)")); - if(filename != "") + if(!filename.isEmpty()) { QDir dirinfo = QFileInfo(filename).dir(); if(dirinfo.exists()) @@ -486,10 +482,10 @@ void CaptureDialog::on_saveSettings_clicked() void CaptureDialog::on_loadSettings_clicked() { - QString filename = - RDDialog::getOpenFileName(this, tr("Open Settings"), QString(), "Capture settings (*.cap)"); + QString filename = RDDialog::getOpenFileName(this, tr("Open Settings"), QString(), + lit("Capture settings (*.cap)")); - if(filename != "" && QFileInfo::exists(filename)) + if(!filename.isEmpty() && QFileInfo::exists(filename)) { LoadSettings(filename); AddRecentFile(m_Ctx.Config().RecentCaptureSettings, filename, 10); @@ -569,12 +565,12 @@ void CaptureDialog::SaveSettings(QString filename) if(f.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { QVariantMap values; - values["settings"] = (QVariant)Settings(); + values[lit("settings")] = (QVariant)Settings(); SaveToJSON(values, f, JSON_ID, JSON_VER); } else { - RDDialog::critical(this, "Error saving config", + RDDialog::critical(this, tr("Error saving config"), tr("Couldn't open path %1 for write.").arg(filename)); } } @@ -635,18 +631,18 @@ void CaptureDialog::LoadSettings(QString filename) if(success) { - CaptureSettings settings(values["settings"]); + CaptureSettings settings(values[lit("settings")]); SetSettings(settings); } else { - RDDialog::critical(this, "Error loading config", + RDDialog::critical(this, tr("Error loading config"), tr("Couldn't interpret settings in %1.").arg(filename)); } } else { - RDDialog::critical(this, "Error loading config", tr("Couldn't open path %1.").arg(filename)); + RDDialog::critical(this, tr("Error loading config"), tr("Couldn't open path %1.").arg(filename)); } } @@ -675,12 +671,12 @@ void CaptureDialog::SetEnvironmentModifications(const QListsetSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); bottomTools->addWidget(rightAlign); - previewToggle = new QAction("Preview", this); + previewToggle = new QAction(tr("Preview"), this); previewToggle->setCheckable(true); bottomTools->addAction(previewToggle); @@ -97,7 +97,7 @@ LiveCapture::LiveCapture(ICaptureContext &ctx, const QString &hostname, uint32_t openMenu->addAction(newWindowAction); openButton = new QToolButton(this); - openButton->setText("Open"); + openButton->setText(tr("Open")); openButton->setPopupMode(QToolButton::MenuButtonPopup); openButton->setMenu(openMenu); @@ -119,8 +119,8 @@ LiveCapture::LiveCapture(ICaptureContext &ctx, const QString &hostname, uint32_t ui->mainLayout->addWidget(bottomTools); bottomTools->setStyleSheet( - "background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," - "stop: 0 #E1E1E1, stop: 1.0 #D3D3D3);"); + lit("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," + "stop: 0 #E1E1E1, stop: 1.0 #D3D3D3);")); } } @@ -272,7 +272,7 @@ void LiveCapture::openNewWindow_triggered() } QStringList args; - args << "--tempfile" << temppath; + args << lit("--tempfile") << temppath; QProcess::startDetached(qApp->applicationFilePath(), args); } } @@ -385,7 +385,7 @@ void LiveCapture::childUpdate() { if(!m_Children[i].added) { - QString name = "unknown"; + QString name = tr("Unknown Process"); // find the name for(QProcessInfo &p : processes) @@ -397,7 +397,7 @@ void LiveCapture::childUpdate() } } - QString text = QString("%1 [PID %2]").arg(name).arg(m_Children[i].PID); + QString text = QFormatStr("%1 [PID %2]").arg(name).arg(m_Children[i].PID); m_Children[i].added = true; QListWidgetItem *item = new QListWidgetItem(text, ui->childProcesses); @@ -450,7 +450,7 @@ void LiveCapture::killThread() void LiveCapture::setTitle(const QString &title) { - setWindowTitle((m_Hostname != "" ? (m_Hostname + " - ") : "") + title); + setWindowTitle((!m_Hostname.isEmpty() ? (m_Hostname + lit(" - ")) : QString()) + title); } LiveCapture::CaptureLog *LiveCapture::GetLog(QListWidgetItem *item) @@ -525,10 +525,10 @@ QString LiveCapture::MakeText(CaptureLog *log) { QString text = log->exe; if(!log->local) - text += " (Remote)"; + text += tr(" (Remote)"); - text += "\n" + log->api; - text += "\n" + log->timestamp.toString("yyyy-MM-dd HH:mm:ss"); + text += lit("\n") + log->api; + text += lit("\n") + log->timestamp.toString(lit("yyyy-MM-dd HH:mm:ss")); return text; } @@ -556,11 +556,11 @@ bool LiveCapture::checkAllowClose() if(!suppressRemoteWarning) { - res = - RDDialog::question(this, tr("Unsaved log"), tr("Save this logfile from %1 at %2?") - .arg(log->exe) - .arg(log->timestamp.toString("HH:mm:ss")), - RDDialog::YesNoCancel); + res = RDDialog::question(this, tr("Unsaved log"), + tr("Save this logfile from %1 at %2?") + .arg(log->exe) + .arg(log->timestamp.toString(lit("HH:mm:ss"))), + RDDialog::YesNoCancel); } if(res == QMessageBox::Cancel) @@ -641,7 +641,7 @@ bool LiveCapture::saveCapture(CaptureLog *log) // we copy the temp log to the desired path, but the log item remains referring to the temp path. // This ensures that if the user deletes the saved path we can still open or re-save it. - if(path != "") + if(!path.isEmpty()) { if(log->local) { @@ -930,7 +930,7 @@ void LiveCapture::connectionThreadEntry() if(!m_Connection || !m_Connection->Connected()) { GUIInvoke::call([this]() { - setTitle("Connection failed"); + setTitle(tr("Connection failed")); ui->connectionStatus->setText(tr("Connection failed")); ui->connectionIcon->setPixmap(Pixmaps::del()); @@ -942,7 +942,7 @@ void LiveCapture::connectionThreadEntry() GUIInvoke::call([this]() { QString api = QString::fromUtf8(m_Connection->GetAPI()); - if(api == "") + if(api.isEmpty()) api = tr("No API detected"); QString target = QString::fromUtf8(m_Connection->GetTarget()); @@ -957,7 +957,7 @@ void LiveCapture::connectionThreadEntry() { ui->connectionStatus->setText( tr("Connection established to %1 [PID %2] (%3)").arg(target).arg(pid).arg(api)); - setTitle(QString("%1 [PID %2]").arg(target).arg(pid)); + setTitle(QFormatStr("%1 [PID %2]").arg(target).arg(pid)); } ui->connectionIcon->setPixmap(Pixmaps::connect()); }); @@ -977,10 +977,10 @@ void LiveCapture::connectionThreadEntry() m_CaptureFrameNum = 0; } - if(m_CopyLogLocalPath != "") + if(!m_CopyLogLocalPath.isEmpty()) { m_Connection->CopyCapture(m_CopyLogID, m_CopyLogLocalPath.toUtf8().data()); - m_CopyLogLocalPath = ""; + m_CopyLogLocalPath = QString(); m_CopyLogID = ~0U; } @@ -1018,7 +1018,7 @@ void LiveCapture::connectionThreadEntry() { ui->connectionStatus->setText( tr("Connection established to %1 [PID %2] (%3)").arg(target).arg(pid).arg(api)); - setTitle(QString("%1 [PID %2]").arg(target).arg(pid)); + setTitle(QFormatStr("%1 [PID %2]").arg(target).arg(pid)); } ui->connectionIcon->setPixmap(Pixmaps::connect()); }); diff --git a/qrenderdoc/Windows/Dialogs/OrderedListEditor.cpp b/qrenderdoc/Windows/Dialogs/OrderedListEditor.cpp index 0026f9e2a..84ca2d3c6 100644 --- a/qrenderdoc/Windows/Dialogs/OrderedListEditor.cpp +++ b/qrenderdoc/Windows/Dialogs/OrderedListEditor.cpp @@ -109,13 +109,13 @@ void OrderedListEditor::addNewItemRow() { ui->list->insertRow(ui->list->rowCount()); - QTableWidgetItem *item = new QTableWidgetItem(""); + QTableWidgetItem *item = new QTableWidgetItem(QString()); item->setFlags(item->flags() & ~(Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled)); ui->list->setItem(ui->list->rowCount() - 1, 0, item); if(m_BrowseMode != BrowseMode::None) { - item = new QTableWidgetItem(""); + item = new QTableWidgetItem(QString()); item->setFlags(item->flags() & ~(Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled)); ui->list->setItem(ui->list->rowCount() - 1, 1, item); @@ -185,7 +185,7 @@ void OrderedListEditor::browse_clicked() else sel = RDDialog::getOpenFileName(this, tr("Browse for a file")); - if(sel != "") + if(!sel.isEmpty()) ui->list->item(i, 0)->setText(sel); } } diff --git a/qrenderdoc/Windows/Dialogs/RemoteManager.cpp b/qrenderdoc/Windows/Dialogs/RemoteManager.cpp index 604c1bcbb..2b5af57ec 100644 --- a/qrenderdoc/Windows/Dialogs/RemoteManager.cpp +++ b/qrenderdoc/Windows/Dialogs/RemoteManager.cpp @@ -132,10 +132,10 @@ void RemoteManager::setRemoteServerLive(RDTreeWidgetItem *node, bool live, bool host->ServerRunning = live; host->Busy = busy; - if(host->Hostname == "localhost") + if(host->Hostname == lit("localhost")) { node->setIcon(0, QIcon()); - node->setText(1, ""); + node->setText(1, QString()); } else { @@ -162,7 +162,7 @@ bool RemoteManager::isRemoteServerLive(RDTreeWidgetItem *node) void RemoteManager::addHost(RemoteHost *host) { - RDTreeWidgetItem *node = new RDTreeWidgetItem({host->Hostname, "..."}); + RDTreeWidgetItem *node = new RDTreeWidgetItem({host->Hostname, lit("...")}); node->setItalic(true); node->setIcon(0, Icons::hourglass()); @@ -244,7 +244,7 @@ void RemoteManager::refreshHost(RDTreeWidgetItem *node) QString running; - if(busy != "") + if(!busy.isEmpty()) running = tr("Running %1, %2 is connected").arg(api).arg(busy); else running = tr("Running %1").arg(api); @@ -321,7 +321,7 @@ void RemoteManager::updateConnectButton() if(host) { - if(host->Hostname == "localhost") + if(host->Hostname == lit("localhost")) { ui->connect->setEnabled(false); } @@ -336,7 +336,7 @@ void RemoteManager::updateConnectButton() { ui->connect->setText(tr("Run Server")); - if(host->RunCommand == "") + if(host->RunCommand.isEmpty()) ui->connect->setEnabled(false); } } @@ -412,8 +412,8 @@ void RemoteManager::on_hosts_itemClicked(RDTreeWidgetItem *item, int column) ui->addUpdateHost->setEnabled(true); ui->runCommand->setEnabled(true); - ui->runCommand->setText(""); - ui->hostname->setText(""); + ui->runCommand->setText(QString()); + ui->hostname->setText(QString()); RemoteHost *host = getRemoteHost(item); @@ -422,10 +422,10 @@ void RemoteManager::on_hosts_itemClicked(RDTreeWidgetItem *item, int column) if(ui->refreshAll->isEnabled()) ui->refreshOne->setEnabled(true); - if(host->Hostname == "localhost") + if(host->Hostname == lit("localhost")) { - ui->runCommand->setText(""); - ui->hostname->setText(""); + ui->runCommand->setText(QString()); + ui->hostname->setText(QString()); } else { @@ -465,7 +465,7 @@ void RemoteManager::on_hostname_textEdited(const QString &text) ui->addUpdateHost->setText(tr("Update")); - if(text == "localhost") + if(text == lit("localhost")) { ui->hostname->setEnabled(false); ui->addUpdateHost->setEnabled(false); @@ -651,7 +651,7 @@ void RemoteManager::on_deleteHost_clicked() QString hostname = item->text(0); - if(hostname == "localhost") + if(hostname == lit("localhost")) return; QMessageBox::StandardButton res = RDDialog::question( diff --git a/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp b/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp index 3184ee61a..9743701b6 100644 --- a/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/SettingsDialog.cpp @@ -144,14 +144,14 @@ void SettingsDialog::on_tempDirectory_textEdited(const QString &dir) if(QDir(dir).exists()) m_Ctx.Config().TemporaryCaptureDirectory = dir; else - m_Ctx.Config().TemporaryCaptureDirectory = ""; + m_Ctx.Config().TemporaryCaptureDirectory = QString(); m_Ctx.Config().Save(); } void SettingsDialog::on_saveDirectory_textEdited(const QString &dir) { - if(QDir(dir).exists() || dir == "") + if(QDir(dir).exists() || dir.isEmpty()) m_Ctx.Config().DefaultCaptureSaveDirectory = dir; m_Ctx.Config().Save(); @@ -159,10 +159,11 @@ void SettingsDialog::on_saveDirectory_textEdited(const QString &dir) void SettingsDialog::on_browseSaveCaptureDirectory_clicked() { - QString dir = RDDialog::getExistingDirectory(this, "Choose default directory for saving captures", - m_Ctx.Config().DefaultCaptureSaveDirectory); + QString dir = + RDDialog::getExistingDirectory(this, tr("Choose default directory for saving captures"), + m_Ctx.Config().DefaultCaptureSaveDirectory); - if(dir != "") + if(!dir.isEmpty()) m_Ctx.Config().DefaultCaptureSaveDirectory = dir; m_Ctx.Config().Save(); @@ -208,13 +209,14 @@ void SettingsDialog::on_chooseSearchPaths_clicked() BrowseMode::Folder, this); listEd.setItems(m_Ctx.Config() - .GetConfigSetting("shader.debug.searchPaths") - .split(QChar(';'), QString::SkipEmptyParts)); + .GetConfigSetting(lit("shader.debug.searchPaths")) + .split(QLatin1Char(';'), QString::SkipEmptyParts)); int res = RDDialog::show(&listEd); if(res) - m_Ctx.Config().SetConfigSetting("shader.debug.searchPaths", listEd.getItems().join(QChar(';'))); + m_Ctx.Config().SetConfigSetting(lit("shader.debug.searchPaths"), + listEd.getItems().join(QLatin1Char(';'))); } // texture viewer @@ -242,7 +244,7 @@ void SettingsDialog::on_ShaderViewer_FriendlyNaming_toggled(bool checked) void SettingsDialog::on_browseExtDisasemble_clicked() { - QString filePath = RDDialog::getExecutableFileName(this, "Locate SPIR-V disassembler"); + QString filePath = RDDialog::getExecutableFileName(this, tr("Locate SPIR-V disassembler")); if(!filePath.isEmpty()) { @@ -256,7 +258,7 @@ void SettingsDialog::on_externalDisassemblePath_textEdited(const QString &path) if(m_Ctx.Config().SPIRVDisassemblers.isEmpty()) { m_Ctx.Config().SPIRVDisassemblers.push_back(SPIRVDisassembler()); - m_Ctx.Config().SPIRVDisassemblers.back().name = "Unknown"; + m_Ctx.Config().SPIRVDisassemblers.back().name = lit("Unknown"); } m_Ctx.Config().SPIRVDisassemblers.back().executable = path; @@ -269,7 +271,7 @@ void SettingsDialog::on_externalDisassemblerArgs_textEdited(const QString &args) if(m_Ctx.Config().SPIRVDisassemblers.isEmpty()) { m_Ctx.Config().SPIRVDisassemblers.push_back(SPIRVDisassembler()); - m_Ctx.Config().SPIRVDisassemblers.back().name = "Unknown"; + m_Ctx.Config().SPIRVDisassemblers.back().name = lit("Unknown"); } m_Ctx.Config().SPIRVDisassemblers.back().args = args; @@ -329,10 +331,10 @@ void SettingsDialog::on_EventBrowser_ColorEventRow_toggled(bool checked) // android void SettingsDialog::on_browseTempCaptureDirectory_clicked() { - QString dir = RDDialog::getExistingDirectory(this, "Choose directory for temporary captures", + QString dir = RDDialog::getExistingDirectory(this, tr("Choose directory for temporary captures"), m_Ctx.Config().TemporaryCaptureDirectory); - if(dir != "") + if(!dir.isEmpty()) m_Ctx.Config().TemporaryCaptureDirectory = dir; m_Ctx.Config().Save(); @@ -341,10 +343,10 @@ void SettingsDialog::on_browseTempCaptureDirectory_clicked() void SettingsDialog::on_browseAdbPath_clicked() { QString adb = RDDialog::getExecutableFileName( - this, "Locate adb executable", + this, tr("Locate adb executable"), QFileInfo(m_Ctx.Config().Android_AdbExecutablePath).absoluteDir().path()); - if(adb != "") + if(!adb.isEmpty()) m_Ctx.Config().Android_AdbExecutablePath = adb; m_Ctx.Config().Save(); diff --git a/qrenderdoc/Windows/Dialogs/SuggestRemoteDialog.cpp b/qrenderdoc/Windows/Dialogs/SuggestRemoteDialog.cpp index baa47998e..f625ca5a0 100644 --- a/qrenderdoc/Windows/Dialogs/SuggestRemoteDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/SuggestRemoteDialog.cpp @@ -48,7 +48,7 @@ SuggestRemoteDialog::SuggestRemoteDialog(const QString &driver, const QString &m ui->remote->setEnabled(false); ui->remote->setIcon(QIcon()); - ui->remote->setText("No Remote"); + ui->remote->setText(tr("No Remote")); ui->remote->setMenu(m_Remotes); } @@ -71,7 +71,7 @@ void SuggestRemoteDialog::remotesAdded() ui->remote->setEnabled(true); ui->remote->setIcon(Icons::down_arrow()); - ui->remote->setText("Remote"); + ui->remote->setText(tr("Remote")); } bool SuggestRemoteDialog::alwaysReplayLocally() diff --git a/qrenderdoc/Windows/Dialogs/TextureSaveDialog.cpp b/qrenderdoc/Windows/Dialogs/TextureSaveDialog.cpp index 7b0835c55..848ab1e8e 100644 --- a/qrenderdoc/Windows/Dialogs/TextureSaveDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/TextureSaveDialog.cpp @@ -65,13 +65,13 @@ TextureSaveDialog::TextureSaveDialog(const TextureDescription &t, const TextureS ui->whitePoint->setText(Formatter::Format(saveData.comp.whitePoint)); for(uint32_t i = 0; i < tex.mips; i++) - ui->mipSelect->addItem(QString::number(i) + " - " + QString::number(qMax(1U, tex.width >> i)) + - "x" + QString::number(qMax(1U, tex.height >> i))); + ui->mipSelect->addItem( + QFormatStr("%1 - %2x%3").arg(i).arg(qMax(1U, tex.width >> i)).arg(qMax(1U, tex.height >> i))); ui->mipSelect->setCurrentIndex(saveData.mip >= 0 ? saveData.mip : 0); for(uint32_t i = 0; i < tex.msSamp; i++) - ui->sampleSelect->addItem(QString("Sample %1").arg(i)); + ui->sampleSelect->addItem(tr("Sample %1").arg(i)); ui->sampleSelect->setCurrentIndex(qMin( (int)tex.msSamp, (saveData.sample.sampleIndex == ~0U ? 0 : (int)saveData.sample.sampleIndex))); @@ -85,7 +85,7 @@ TextureSaveDialog::TextureSaveDialog(const TextureDescription &t, const TextureS ui->oneSample->setChecked(true); } - const char *cubeFaces[] = {"X+", "X-", "Y+", "Y-", "Z+", "Z-"}; + const QString cubeFaces[] = {lit("X+"), lit("X-"), lit("Y+"), lit("Y-"), lit("Z+"), lit("Z-")}; uint32_t numSlices = qMax(tex.arraysize, tex.depth); @@ -96,12 +96,12 @@ TextureSaveDialog::TextureSaveDialog(const TextureDescription &t, const TextureS QString name = cubeFaces[i % 6]; // Front 1, Back 2, 3, 4 etc for cube arrays if(numSlices > 6) - name = QString("[%1] %2").arg(i / 6).arg(cubeFaces[i % 6]); + name = QFormatStr("[%1] %2").arg(i / 6).arg(cubeFaces[i % 6]); ui->sliceSelect->addItem(name); } else { - ui->sliceSelect->addItem(QString("Slice %1").arg(i)); + ui->sliceSelect->addItem(tr("Slice %1").arg(i)); } } @@ -161,7 +161,7 @@ void TextureSaveDialog::SetFilenameFromFiletype() { QString selectedExt = ToQStr((FileType)idx).toLower(); - if(ext != selectedExt && ext != "") + if(ext != selectedExt && !ext.isEmpty()) { QString fn = ui->filename->text(); fn.chop(ext.length()); @@ -495,24 +495,24 @@ void TextureSaveDialog::on_whitePoint_textEdited(const QString &arg) void TextureSaveDialog::on_browse_clicked() { - QString filter = ""; + QString filter; for(FileType i : values()) { QString ext = ToQStr(i); if(filter.length() > 0) - filter += ";;"; + filter += lit(";;"); filter += tr("%1 Files (*.%2)").arg(ext).arg(ext.toLower()); } QString *selectedFilter = NULL; QString filename = - RDDialog::getSaveFileName(this, tr("Save Texture As"), "", filter, selectedFilter); + RDDialog::getSaveFileName(this, tr("Save Texture As"), QString(), filter, selectedFilter); QFileInfo checkFile(filename); - if(filename != "") + if(!filename.isEmpty()) { ui->filename->setText(filename); SetFiletypeFromFilename(); diff --git a/qrenderdoc/Windows/Dialogs/TipsDialog.cpp b/qrenderdoc/Windows/Dialogs/TipsDialog.cpp index 8049159f1..cf0412119 100644 --- a/qrenderdoc/Windows/Dialogs/TipsDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/TipsDialog.cpp @@ -54,228 +54,249 @@ TipsDialog::~TipsDialog() void TipsDialog::initialize() { + /////////////////////////////////////////////////////////// + // This section of code is auto-generated. Modifications // + // will be lost if made by hand. // + // // + // If you have a tip you'd like to add, email it to me // + // or open an issue on github to suggest it. // + /////////////////////////////////////////////////////////// + // Tip 1 - m_tips.push_back(Tip("Talk to me!", - "RenderDoc is a labour of love and has been developed from scratch entirely " - "in my spare time. If you run into a bug, have a feature request or just " - "have a question, please feel free to get in touch and I'm always happy to " - "talk and help out in any way I can - baldurk@baldurk.org.")); + m_tips.push_back( + Tip(tr("Talk to me!"), + tr("RenderDoc is a labour of love and has been developed from scratch entirely in my " + "spare time. If you run into a bug, have a feature request or just have a question, " + "please feel free to get in touch and I'm always happy to talk and help out in any " + "way I can - baldurk@baldurk.org."))); // Tip 2 - m_tips.push_back(Tip("Quick channel toggling", - "Right clicking on a channel button in the texture viewer will select it " - "alone. If it is already the only channel selected, the meaning is inverted " - "and all others will be selected.\n\nThis is most useful for quickly " - "toggling between RGB and Alpha-only views.")); + m_tips.push_back(Tip(tr("Quick channel toggling"), + tr("Right clicking on a channel button in the texture viewer will select it " + "alone. If it is already the only channel selected, the meaning is " + "inverted and all others will be selected.\n\nThis is most useful for " + "quickly toggling between RGB and Alpha-only views."))); // Tip 3 - m_tips.push_back(Tip("Quick range autofitting", - "The magic wand auto-fitting button in the texture viewer automatically " - "calculates the min and max values of any visible channel in the texture, " - "and rescales the visible range to include them.\n \nIf you right click on " - "it, it will toggle on a mode to automatically rescale every time the " - "viewed texture changes.\n")); + m_tips.push_back( + Tip(tr("Quick range autofitting"), + tr("The magic wand auto-fitting button in the texture viewer automatically calculates " + "the min and max values of any visible channel in the texture, and rescales the " + "visible range to include them.\n\nIf you right click on it, it will toggle on a mode " + "to automatically rescale every time the viewed texture changes.\n"))); // Tip 4 - m_tips.push_back(Tip("Choosing mesh elements to visualise", - "In the mesh output pane, you can right click on any of the element columns " - "to select that element as either position or secondary property to render. " - "This way you can view a mesh in UV space, or visualise normals.")); + m_tips.push_back( + Tip(tr("Choosing mesh elements to visualise"), + tr("In the mesh output pane, you can right click on any of the element columns to select " + "that element as either position or secondary property to render. This way you can " + "view a mesh in UV space, or visualise normals."))); // Tip 5 - m_tips.push_back(Tip("Visualising secondary mesh properties", - "In the mesh output pane, you can select an element as 'secondary', and in " - "the solid shading dropdown choosing secondary will display the element as " - "RGB colour on top of the mesh.")); + m_tips.push_back(Tip(tr("Visualising secondary mesh properties"), + tr("In the mesh output pane, you can select an element as 'secondary', and " + "in the solid shading dropdown choosing secondary will display the " + "element as RGB colour on top of the mesh."))); // Tip 6 - m_tips.push_back(Tip("Register highlighting in the shader debugger", - "While debugging a shader, clicking on a register or constant buffer " - "variable in the disassembly will highlight all other uses of that register " - "or variable in the disassembly. It will also highlight the matching row in " - "the watch windows.")); + m_tips.push_back( + Tip(tr("Register highlighting in the shader debugger"), + tr("While debugging a shader, clicking on a register or constant buffer variable in the " + "disassembly will highlight all other uses of that register or variable in the " + "disassembly. It will also highlight the matching row in the watch windows."))); // Tip 7 - m_tips.push_back(Tip("Shader register value display", - "If you want to see to see a register reinterpreted as different types, you " - "can hover over it either in the disassembly or in the watch windows. A " - "tooltip will show it interpreted as float, uint decimal, int decimal or " - "hexadecimal.")); + m_tips.push_back( + Tip(tr("Shader register value display"), + tr("If you want to see to see a register reinterpreted as different types, you can hover " + "over it either in the disassembly or in the watch windows. A tooltip will show it " + "interpreted as float, uint decimal, int decimal or hexadecimal."))); // Tip 8 - m_tips.push_back(Tip("Custom shader watch expressions", - "In addition to the pre-filled watch windows while shader debugging, you " - "can also enter custom watch expressions. This takes the form of e.g. " - "r0.xyz. You can append ,x or ,b to specify the type - full list in the " - "docs.\n")); + m_tips.push_back( + Tip(tr("Custom shader watch expressions"), + tr("In addition to the pre-filled watch windows while shader debugging, you can also " + "enter custom watch expressions. This takes the form of e.g. r0.xyz. You can append " + ",x or ,b to specify the type - full list in the docs.\n"))); // Tip 9 - m_tips.push_back(Tip("Shader debugger float/int toggle", - "By default register values are shown as floats, but you can toggle this to " - "default to ints either in the shader debugger toolbar, or by right " - "clicking and toggling int/float display.\n")); + m_tips.push_back(Tip(tr("Shader debugger float/int toggle"), + tr("By default register values are shown as floats, but you can toggle this " + "to default to ints either in the shader debugger toolbar, or by right " + "clicking and toggling int/float display.\n"))); // Tip 10 - m_tips.push_back(Tip("D3D11 shader debug information", - "You'll get the best results in RenderDoc by stripping as little as " - "possible from D3D11 shaders. Reflection data is used all over the place to " - "produce a nicer debugging experience.\n")); + m_tips.push_back(Tip(tr("D3D11 shader debug information"), + tr("You'll get the best results in RenderDoc by stripping as little as " + "possible from D3D11 shaders. Reflection data is used all over the place " + "to produce a nicer debugging experience.\n"))); // Tip 11 - m_tips.push_back(Tip("Shader editing & Replacement", - "RenderDoc has the ability to edit and replace shaders and see the results " - "live in the replay. On the pipeline state view, click the edit icon next " - "to the shader. If source is available, it will be compiled, otherwise an " - "empty stub with resources will be generated.\n The shader will be replaced " - "everywhere it is used in the frame, the original will be restored when the " - "edit window is closed.\n")); + m_tips.push_back( + Tip(tr("Shader editing & Replacement"), + tr("RenderDoc has the ability to edit and replace shaders and see the results live in " + "the replay. On the pipeline state view, click the edit icon next to the shader. If " + "source is available, it will be compiled, otherwise an empty stub with resources " + "will be generated.\n\nThe shader will be replaced everywhere it is used in the " + "frame, the original will be restored when the edit window is closed.\n"))); // Tip 12 - m_tips.push_back(Tip("Linear/Gamma display of textures", - "RenderDoc interprets all textures in gamma space - even if the data is " - "linear such as a normal map. This is by convention, since typically " - "external image viewers will display a normal map as gamma data. This can " - "be overridden by toggling the gamma button in the texture viewer.\n")); + m_tips.push_back( + Tip(tr("Linear/Gamma display of textures"), + tr("RenderDoc interprets all textures in gamma space - even if the data is linear such " + "as a normal map. This is by convention, since typically external image viewers will " + "display a normal map as gamma data. This can be overridden by toggling the gamma " + "button in the texture viewer.\n"))); // Tip 13 - m_tips.push_back(Tip("Seeing texture usage in a capture", - "RenderDoc has a list of how each texture is bound and used - whether as a " - "shader resource, an output target, or a copy source. When the texture is " - "active in the texture viewer this usage will be displayed on the timeline " - "bar at the top.\n You can also right click on the thumbnails in the " - "texture viewer to see a list of this usage, and clicking any entry will " - "jump to that event.\n")); + m_tips.push_back( + Tip(tr("Seeing texture usage in a capture"), + tr("RenderDoc has a list of how each texture is bound and used - whether as a shader " + "resource, an output target, or a copy source. When the texture is active in the " + "texture viewer this usage will be displayed on the timeline bar at the top.\n\nYou " + "can also right click on the thumbnails in the texture viewer to see a list of this " + "usage, and clicking any entry will jump to that event.\n"))); // Tip 14 - m_tips.push_back(Tip("Custom buffer formatting", - "When opening a raw view of a buffer, such as a vertex buffer or compute " - "read/write buffer resource, you can apply custom formatting to it to " - "dictate the layout of the elements in typical shader syntax. \n \nThis " - "formatting is also available for constant buffers to override the layout " - "reflected from the shader.\n")); + m_tips.push_back( + Tip(tr("Custom buffer formatting"), + tr("When opening a raw view of a buffer, such as a vertex buffer or compute read/write " + "buffer resource, you can apply custom formatting to it to dictate the layout of the " + "elements in typical shader syntax.\n\nThis formatting is also available for constant " + "buffers to override the layout reflected from the shader.\n"))); // Tip 15 - m_tips.push_back(Tip("Pipeline HTML export", - "The pipeline view contains an HTML export function, which dumps the raw " - "state of the entire pipeline out to a specified file. This can be useful " - "for comparison between two events, or for having all information available " - "in a unified text format.\n")); + m_tips.push_back( + Tip(tr("Pipeline HTML export"), + tr("The pipeline view contains an HTML export function, which dumps the raw state of the " + "entire pipeline out to a specified file. This can be useful for comparison between " + "two events, or for having all information available in a unified text format.\n"))); // Tip 16 - m_tips.push_back(Tip("Python scripting", - "RenderDoc supports some amount of Python scripting. Open up the Python " - "shell in the UI to either use it interactively or load and execute python " - "scripts. \n \nThe 'renderdoc' object is an instance of the Core class - " - "see the RenderDoc source for more information.")); + m_tips.push_back(Tip(tr("Python scripting"), + tr("RenderDoc supports some amount of Python scripting. Open up the Python " + "shell in the UI to either use it interactively or load and execute " + "python scripts.\n\nThe 'renderdoc' object is an instance of the Core " + "class - see the RenderDoc source for more information."))); // Tip 17 - m_tips.push_back( - Tip("Pixel history view", - "RenderDoc supports a pixel history view, showing the list of all modification events " - "that happened to a specified pixel. To launch it, simply pick the pixel you would like " - "to view the history of in the texture viewer, and click the 'history' button underneath " - "the zoomed-in pixel context. \n \nEach event will show up red or green depending on " - "whether it affected or didn't affect the pixel. By expanding the event, you can see the " - "possibly several primitives within the draw that overdrew the pixel.\n")); + m_tips.push_back(Tip( + tr("Pixel history view"), + tr("RenderDoc supports a pixel history view, showing the list of all modification events " + "that happened to a specified pixel. To launch it, simply pick the pixel you would like " + "to view the history of in the texture viewer, and click the 'history' button underneath " + "the zoomed-in pixel context.\n\nEach event will show up red or green depending on " + "whether it affected or didn't affect the pixel. By expanding the event, you can see the " + "possibly several primitives within the draw that overdrew the pixel.\n"))); // Tip 18 - m_tips.push_back(Tip("List of active textures", - "On the texture viewer, the texture list button under the 'Actions' section " - "will open a filterable list of all texture resources. Clicking on any of " - "the entries will open a locked tab of that texture, always showing the " - "contents of the texture at the current event regardless of whether or not " - "it is bound to the pipeline.\n")); + m_tips.push_back( + Tip(tr("List of active textures"), + tr("On the texture viewer, the texture list button under the 'Actions' section will open " + "a filterable list of all texture resources. Clicking on any of the entries will open " + "a locked tab of that texture, always showing the contents of the texture at the " + "current event regardless of whether or not it is bound to the pipeline.\n"))); // Tip 19 - m_tips.push_back(Tip("Locked texture tabs", - "You can open a locked texture tab from the texture list, or by right or " - "double clicking on a texture's thumbnail.\n \nWith a locked tab of a " - "texture, that tab will always show that texture, regardless of what is " - "bound to the pipeline. This way you can track the updates of a texture " - "through binds and unbinds, e.g. ping-pong rendertarget use.\n")); + m_tips.push_back(Tip( + tr("Locked texture tabs"), + tr("You can open a locked texture tab from the texture list, or by right or double clicking " + "on a texture's thumbnail.\n\nWith a locked tab of a texture, that tab will always show " + "that texture, regardless of what is bound to the pipeline. This way you can track the " + "updates of a texture through binds and unbinds, e.g. ping-pong rendertarget use.\n"))); // Tip 20 - m_tips.push_back(Tip("Gathering of per-event callstacks", - "RenderDoc is able to gather callstacks either per-drawcall or per-API " - "event. You can do this by enabling the option before launching an " - "application capture.\n \nWhen loading the log, initially the callstacks " - "will not be available until symbols are resolved. Go to tools -> resolve " - "symbols to load up the pdbs matching the modules from the application.\n")); + m_tips.push_back( + Tip(tr("Gathering of per-event callstacks"), + tr("RenderDoc is able to gather callstacks either per-drawcall or per-API event. You can " + "do this by enabling the option before launching an application capture.\n\nWhen " + "loading the log, initially the callstacks will not be available until symbols are " + "resolved. Go to tools -> resolve symbols to load up the pdbs matching the modules " + "from the application.\n"))); // Tip 21 - m_tips.push_back(Tip("Texture debugging overlays", - "In the texture viewer, you can select from several helpful debugging " - "overlays over the current view. This can show wireframe or solid coloour " - "overlays of the current drawcall, as well as showing depth pass/fail or " - "even representing quad overdraw as a heatmap.\n")); + m_tips.push_back(Tip( + tr("Texture debugging overlays"), + tr("In the texture viewer, you can select from several helpful debugging overlays over the " + "current view. This can show wireframe or solid coloour overlays of the current drawcall, " + "as well as showing depth pass/fail or even representing quad overdraw as a heatmap.\n"))); // Tip 22 - m_tips.push_back(Tip("Custom texture display shaders", - "RenderDoc supports writing custom shaders to decode the viewed texture, " - "which can be useful to e.g. colourise stencil values or decode a packed " - "gbuffer texture.\n \nIn the toolbar in the texture viewer, select custom " - "instead of RGBA on the left side, and use the UI to create a new shader. " - "The docs contain full listings of available constants and resources to " - "bind.\n")); + m_tips.push_back( + Tip(tr("Custom texture display shaders"), + tr("RenderDoc supports writing custom shaders to decode the viewed texture, which can be " + "useful to e.g. colourise stencil values or decode a packed gbuffer texture.\n\nIn " + "the toolbar in the texture viewer, select custom instead of RGBA on the left side, " + "and use the UI to create a new shader. The docs contain full listings of available " + "constants and resources to bind.\n"))); // Tip 23 - m_tips.push_back(Tip("Texture histogram", - "RenderDoc can display a channel histogram showing the distribution of " - "values within the visible range. Simply click the graph button on the " - "texture viewer to the right of the range control, and it will expand to " - "show the histogram.\n")); + m_tips.push_back( + Tip(tr("Texture histogram"), + tr("RenderDoc can display a channel histogram showing the distribution of values within " + "the visible range. Simply click the graph button on the texture viewer to the right " + "of the range control, and it will expand to show the histogram.\n"))); // Tip 24 - m_tips.push_back(Tip("Attaching to a running instance", - "If you have launched a program via RenderDoc or your program integrates " - "RenderDoc, the UI can connect to it once it is running via File -> Attach " - "to Running Instance, and everything works as if you had launched it.\n " - "\nYou can even do this across a network, by adding a remote IP or " - "hostname. You will connect over the network and can remotely trigger " - "captures - any files will be copied back across the network, to be saved " - "and replayed locally as normal.\n")); + m_tips.push_back( + Tip(tr("Attaching to a running instance"), + tr("If you have launched a program via RenderDoc or your program integrates RenderDoc, " + "the UI can connect to it once it is running via File -> Attach to Running Instance, " + "and everything works as if you had launched it.\n\nYou can even do this across a " + "network, by adding a remote IP or hostname. You will connect over the network and " + "can remotely trigger captures - any files will be copied back across the network, to " + "be saved and replayed locally as normal.\n"))); // Tip 25 - m_tips.push_back(Tip( - "Event browser bookmarks", - "In the event browser you can bookmark useful events by clicking the asterisk. This can let " - "you quickly jump back and forth through the log between important points.\n \nWhen you have " - "some bookmarks, shortcut buttons will appear in a small bar at the top of the browser, and " - "the shortcut keys Ctrl-1 through Ctrl-0 jump to the first 10 bookmarks - these shortcuts " - "are global regardless of which RenderDoc window is currently in focus.\n")); + m_tips.push_back( + Tip(tr("Event browser bookmarks"), + tr("In the event browser you can bookmark useful events by clicking the asterisk. This " + "can let you quickly jump back and forth through the log between important " + "points.\n\nWhen you have some bookmarks, shortcut buttons will appear in a small bar " + "at the top of the browser, and the shortcut keys Ctrl-1 through Ctrl-0 jump to the " + "first 10 bookmarks - these shortcuts are global regardless of which RenderDoc window " + "is currently in focus.\n"))); // Tip 26 - m_tips.push_back(Tip("Mousewheel for scrolling", - "Anywhere you need to use the mousewheel to scroll, it will work simply by " - "hovering over the panel and scrolling, no need to click to change focus. " - "\n")); + m_tips.push_back( + Tip(tr("Mousewheel for scrolling"), + tr("Anywhere you need to use the mousewheel to scroll, it will work simply by hovering " + "over the panel and scrolling, no need to click to change focus.\n"))); // Tip 27 - m_tips.push_back(Tip("Event browser keyboard shortcuts", - "In the event browser Ctrl-F opens up the find bar, to locate an event by " - "its name. Ctrl-G opens the jump-to-event to jump to the closest drawcall " - "to a numbered event. Ctrl-B will toggle a bookmark at the current " - "event.\n")); + m_tips.push_back( + Tip(tr("Event browser keyboard shortcuts"), + tr("In the event browser Ctrl-F opens up the find bar, to locate an event by its name. " + "Ctrl-G opens the jump-to-event to jump to the closest drawcall to a numbered event. " + "Ctrl-B will toggle a bookmark at the current event.\n"))); // Tip 28 - m_tips.push_back(Tip("Mesh VS Output camera settings", - "The VS Output pane in the mesh output window will attempt to guess your " - "projection matrix to unproject the vertices into camera space. It assumes " - "a perspective projection and guesses the near and far planes, and matches " - "the aspect ratio to the current output target.\n \nIf these parameters are " - "incorrect - e.g. you are using an orthographic projection or the near/far " - "guesses are wrong, you can override them by opening the view settings with " - "the cog icon.\n")); + m_tips.push_back( + Tip(tr("Mesh VS Output camera settings"), + tr("The VS Output pane in the mesh output window will attempt to guess your projection " + "matrix to unproject the vertices into camera space. It assumes a perspective " + "projection and guesses the near and far planes, and matches the aspect ratio to the " + "current output target.\n\nIf these parameters are incorrect - e.g. you are using an " + "orthographic projection or the near/far guesses are wrong, you can override them by " + "opening the view settings with the cog icon.\n"))); // Tip 29 - m_tips.push_back(Tip("Global process hook", - "Sometimes a particular program is difficult to launch directly through " - "RenderDoc. In these cases, RenderDoc can install a global system hook that " - "will insert a tiny shim DLL into every newly-created process on the " - "system. This shim will identify if it is in the target application and " - "either inject RenderDoc, or unload itself.\n \nNote: Since it is a global " - "hook this is not without risks, only use if it's the only alternative, and " - "read the documentation carefully.\n")); + m_tips.push_back( + Tip(tr("Global process hook"), + tr("Sometimes a particular program is difficult to launch directly through RenderDoc. In " + "these cases, RenderDoc can install a global system hook that will insert a tiny shim " + "DLL into every newly-created process on the system. This shim will identify if it is " + "in the target application and either inject RenderDoc, or unload itself.\n\nNote: " + "Since it is a global hook this is not without risks, only use if it's the only " + "alternative, and read the documentation carefully.\n"))); + + /////////////////////////////////////////////////////////// + // This section of code is auto-generated. Modifications // + // will be lost if made by hand. // + // // + // If you have a tip you'd like to add, email it to me // + // or open an issue on github to suggest it. // + /////////////////////////////////////////////////////////// } void TipsDialog::showTip(int i) @@ -286,10 +307,10 @@ void TipsDialog::showTip(int i) Tip &tip = m_tips[i]; ++i; ui->tipTextLabel->setText(tip.tip); - QString url("https://renderdoc.org/tips/" + QString::number(i)); - ui->tipUrlLabel->setText("" + url + ""); - ui->tipsGroupBox->setTitle("Tip #" + QString::number(i)); - ui->titleLabel->setText("Tip #" + QString::number(i) + ": " + tip.title); + QString url = lit("https://renderdoc.org/tips/%1").arg(i); + ui->tipUrlLabel->setText(lit("%1").arg(url)); + ui->tipsGroupBox->setTitle(tr("Tip #%1").arg(i)); + ui->titleLabel->setText(tr("Tip #%1: %2").arg(i).arg(tip.title)); } void TipsDialog::showRandomTip() diff --git a/qrenderdoc/Windows/Dialogs/VirtualFileDialog.cpp b/qrenderdoc/Windows/Dialogs/VirtualFileDialog.cpp index 46950dd58..6f568f48b 100644 --- a/qrenderdoc/Windows/Dialogs/VirtualFileDialog.cpp +++ b/qrenderdoc/Windows/Dialogs/VirtualFileDialog.cpp @@ -58,24 +58,24 @@ public: Renderer.GetHomeFolder(true, [this](const char *path, const rdctype::array &files) { QString homeDir = QString::fromUtf8(path); - if(QChar(path[0]).isLetter() && path[1] == ':') + if(QChar(QLatin1Char(path[0])).isLetter() && path[1] == ':') { NTPaths = true; // NT paths - Renderer.ListFolder( - "/", true, [this, homeDir](const char *path, const rdctype::array &files) { - for(int i = 0; i < files.count; i++) - { - FSNode *node = new FSNode(); - node->parent = NULL; - node->parentIndex = i; - node->file = files[i]; - roots.push_back(node); + Renderer.ListFolder(lit("/"), true, [this, homeDir](const char *path, + const rdctype::array &files) { + for(int i = 0; i < files.count; i++) + { + FSNode *node = new FSNode(); + node->parent = NULL; + node->parentIndex = i; + node->file = files[i]; + roots.push_back(node); - home = indexForPath(homeDir); - } - }); + home = indexForPath(homeDir); + } + }); } else { @@ -113,11 +113,11 @@ public: if(NTPaths) { // normalise to unix directory separators - normPath.replace(QChar('\\'), QChar('/')); + normPath.replace(QLatin1Char('\\'), QLatin1Char('/')); for(int i = 0; i < roots.count(); i++) { - if(normPath[0] == roots[i]->file.filename.front()) + if(normPath[0] == QLatin1Char(roots[i]->file.filename.front())) { ret = index(i, 0); normPath.remove(0, 2); @@ -131,7 +131,7 @@ public: while(!normPath.isEmpty()) { - if(normPath[0] != '/') + if(normPath[0] != QLatin1Char('/')) { qCritical() << "Malformed/unexpected path" << path; return QModelIndex(); @@ -139,14 +139,14 @@ public: // ignore multiple /s adjacent int start = 1; - while(start < normPath.count() && normPath[start] == '/') + while(start < normPath.count() && normPath[start] == QLatin1Char('/')) start++; // if we've hit trailing slashes just stop if(start >= normPath.count()) break; - int nextDirEnd = normPath.indexOf(QChar('/'), start); + int nextDirEnd = normPath.indexOf(QLatin1Char('/'), start); if(nextDirEnd == -1) nextDirEnd = normPath.count(); @@ -417,7 +417,7 @@ private: QString makePath(FSNode *node) const { - QChar sep = NTPaths ? '\\' : '/'; + QChar sep = NTPaths ? QLatin1Char('\\') : QLatin1Char('/'); QString ret = ToQStr(node->file.filename); FSNode *parent = node->parent; // iterate through subdirs but stop before a root @@ -432,7 +432,7 @@ private: // parent is now a root ret = ToQStr(parent->file.filename) + ret; } - ret.replace('/', sep); + ret.replace(QLatin1Char('/'), sep); return ret; } diff --git a/qrenderdoc/Windows/EventBrowser.cpp b/qrenderdoc/Windows/EventBrowser.cpp index 1c0381b8c..b3f1532f7 100644 --- a/qrenderdoc/Windows/EventBrowser.cpp +++ b/qrenderdoc/Windows/EventBrowser.cpp @@ -64,7 +64,8 @@ EventBrowser::EventBrowser(ICaptureContext &ctx, QWidget *parent) clearBookmarks(); - ui->events->setColumns({tr("Name"), "EID", "Duration - replaced in UpdateDurationColumn"}); + ui->events->setColumns( + {tr("Name"), lit("EID"), lit("Duration - replaced in UpdateDurationColumn")}); ui->events->header()->resizeSection(COL_EID, 80); @@ -141,12 +142,12 @@ EventBrowser::~EventBrowser() void EventBrowser::OnLogfileLoaded() { - RDTreeWidgetItem *frame = - new RDTreeWidgetItem({QString("Frame #%1").arg(m_Ctx.FrameInfo().frameNumber), "", ""}); + RDTreeWidgetItem *frame = new RDTreeWidgetItem( + {QFormatStr("Frame #%1").arg(m_Ctx.FrameInfo().frameNumber), QString(), QString()}); clearBookmarks(); - RDTreeWidgetItem *framestart = new RDTreeWidgetItem({"Frame Start", "0", ""}); + RDTreeWidgetItem *framestart = new RDTreeWidgetItem({tr("Frame Start"), lit("0"), QString()}); framestart->setTag(QVariant::fromValue(EventItemTag())); frame->addChild(framestart); @@ -197,13 +198,13 @@ uint EventBrowser::AddDrawcalls(RDTreeWidgetItem *parent, for(int32_t i = 0; i < draws.count; i++) { - RDTreeWidgetItem *child = - new RDTreeWidgetItem({QString(draws[i].name), QString("%1").arg(draws[i].eventID), "0.0"}); + RDTreeWidgetItem *child = new RDTreeWidgetItem( + {ToQStr(draws[i].name), QFormatStr("%1").arg(draws[i].eventID), lit("0.0")}); lastEID = AddDrawcalls(child, draws[i].children); if(lastEID > draws[i].eventID) - child->setText(COL_EID, QString("%1-%2").arg(draws[i].eventID).arg(lastEID)); + child->setText(COL_EID, QFormatStr("%1-%2").arg(draws[i].eventID).arg(lastEID)); if(lastEID == 0) { @@ -252,7 +253,7 @@ void EventBrowser::SetDrawcallTimes(RDTreeWidgetItem *node, else if(m_TimeUnit == TimeUnit::Nanoseconds) secs *= 1000000000.0; - node->setText(COL_DURATION, duration < 0.0f ? "" : QString::number(secs)); + node->setText(COL_DURATION, duration < 0.0f ? QString() : QString::number(secs)); EventItemTag tag = node->tag().value(); tag.duration = duration; node->setTag(QVariant::fromValue(tag)); @@ -279,7 +280,7 @@ void EventBrowser::SetDrawcallTimes(RDTreeWidgetItem *node, else if(m_TimeUnit == TimeUnit::Nanoseconds) secs *= 1000000000.0; - node->setText(COL_DURATION, duration < 0.0f ? "" : QString::number(secs)); + node->setText(COL_DURATION, duration < 0.0f ? QString() : QString::number(secs)); EventItemTag tag = node->tag().value(); tag.duration = duration; node->setTag(QVariant::fromValue(tag)); @@ -345,10 +346,10 @@ void EventBrowser::on_HideFindJump() ui->jumpStrip->hide(); ui->findStrip->hide(); - ui->jumpToEID->setText(""); + ui->jumpToEID->setText(QString()); ClearFindIcons(); - ui->findEvent->setStyleSheet(""); + ui->findEvent->setStyleSheet(QString()); } void EventBrowser::on_jumpToEID_returnPressed() @@ -368,9 +369,9 @@ void EventBrowser::findHighlight_timeout() int results = SetFindIcons(ui->findEvent->text()); if(results > 0) - ui->findEvent->setStyleSheet(""); + ui->findEvent->setStyleSheet(QString()); else - ui->findEvent->setStyleSheet("QLineEdit{background-color:#ff0000;}"); + ui->findEvent->setStyleSheet(lit("QLineEdit{background-color:#ff0000;}")); } void EventBrowser::on_findEvent_textEdited(const QString &arg1) @@ -379,7 +380,7 @@ void EventBrowser::on_findEvent_textEdited(const QString &arg1) { m_FindHighlight->stop(); - ui->findEvent->setStyleSheet(""); + ui->findEvent->setStyleSheet(QString()); ClearFindIcons(); } else @@ -452,7 +453,7 @@ void EventBrowser::on_stepPrev_clicked() void EventBrowser::on_exportDraws_clicked() { QString filename = - RDDialog::getSaveFileName(this, tr("Save Event List"), "", "Text files (*.txt)"); + RDDialog::getSaveFileName(this, tr("Save Event List"), QString(), lit("Text files (*.txt)")); if(!filename.isEmpty()) { @@ -471,16 +472,16 @@ void EventBrowser::on_exportDraws_clicked() for(const DrawcallDescription &d : m_Ctx.CurDrawcalls()) GetMaxNameLength(maxNameLength, 0, false, d); - QString line = QString(" EID | %1 | Draw #").arg("Event", -maxNameLength); + QString line = QFormatStr(" EID | %1 | Draw #").arg(lit("Event"), -maxNameLength); if(!m_Times.empty()) { - line += QString(" | %1").arg(ui->events->headerText(COL_DURATION)); + line += QFormatStr(" | %1").arg(ui->events->headerText(COL_DURATION)); } stream << line << "\n"; - line = QString("--------%1-----------").arg("", maxNameLength, QChar('-')); + line = QFormatStr("--------%1-----------").arg(QString(), maxNameLength, QLatin1Char('-')); if(!m_Times.empty()) { @@ -489,7 +490,7 @@ void EventBrowser::on_exportDraws_clicked() maxDurationLength = qMax(maxDurationLength, Formatter::Format(1.2345e-200).length()); maxDurationLength = qMax(maxDurationLength, Formatter::Format(123456.7890123456789).length()); - line += QString(3 + maxDurationLength, QChar('-')); // 3 extra for " | " + line += QString(3 + maxDurationLength, QLatin1Char('-')); // 3 extra for " | " } stream << line << "\n"; @@ -517,11 +518,11 @@ void EventBrowser::on_exportDraws_clicked() QString EventBrowser::GetExportDrawcallString(int indent, bool firstchild, const DrawcallDescription &drawcall) { - QString prefix = QString(indent * 2 - (firstchild ? 1 : 0), QChar(' ')); + QString prefix = QString(indent * 2 - (firstchild ? 1 : 0), QLatin1Char(' ')); if(firstchild) - prefix += '\\'; + prefix += QLatin1Char('\\'); - return QString("%1- %2").arg(prefix).arg(ToQStr(drawcall.name)); + return QFormatStr("%1- %2").arg(prefix).arg(ToQStr(drawcall.name)); } double EventBrowser::GetDrawTime(const DrawcallDescription &drawcall) @@ -568,11 +569,11 @@ void EventBrowser::GetMaxNameLength(int &maxNameLength, int indent, bool firstch void EventBrowser::ExportDrawcall(QTextStream &writer, int maxNameLength, int indent, bool firstchild, const DrawcallDescription &drawcall) { - QString eidString = drawcall.children.empty() ? QString::number(drawcall.eventID) : ""; + QString eidString = drawcall.children.empty() ? QString::number(drawcall.eventID) : QString(); QString nameString = GetExportDrawcallString(indent, firstchild, drawcall); - QString line = QString("%1 | %2 | %3") + QString line = QFormatStr("%1 | %2 | %3") .arg(eidString, -5) .arg(nameString, -maxNameLength) .arg(drawcall.drawcallID, -6); @@ -590,11 +591,11 @@ void EventBrowser::ExportDrawcall(QTextStream &writer, int maxNameLength, int in else if(m_TimeUnit == TimeUnit::Nanoseconds) f *= 1000000000.0; - line += QString(" | %1").arg(Formatter::Format(f)); + line += QFormatStr(" | %1").arg(Formatter::Format(f)); } else { - line += " |"; + line += lit(" |"); } } @@ -986,7 +987,7 @@ void EventBrowser::Find(bool forward) if(eid >= 0) { SelectEvent((uint32_t)eid); - ui->findEvent->setStyleSheet(""); + ui->findEvent->setStyleSheet(QString()); } else // if(WrapSearch) { @@ -994,11 +995,11 @@ void EventBrowser::Find(bool forward) if(eid >= 0) { SelectEvent((uint32_t)eid); - ui->findEvent->setStyleSheet(""); + ui->findEvent->setStyleSheet(QString()); } else { - ui->findEvent->setStyleSheet("QLineEdit{background-color:#ff0000;}"); + ui->findEvent->setStyleSheet(lit("QLineEdit{background-color:#ff0000;}")); } } } diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index 544627217..5b0192a72 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -94,13 +94,13 @@ MainWindow::MainWindow(ICaptureContext &ctx) : QMainWindow(NULL), ui(new Ui::Mai FillRemotesMenu(contextChooserMenu, true); contextChooser = new QToolButton(this); - contextChooser->setText(tr("Replay Context: %1").arg("Local")); + contextChooser->setText(tr("Replay Context: %1").arg(tr("Local"))); contextChooser->setIcon(Icons::house()); contextChooser->setAutoRaise(true); contextChooser->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); contextChooser->setPopupMode(QToolButton::InstantPopup); contextChooser->setMenu(contextChooserMenu); - contextChooser->setStyleSheet("QToolButton::menu-indicator { image: none; }"); + contextChooser->setStyleSheet(lit("QToolButton::menu-indicator { image: none; }")); contextChooser->setContextMenuPolicy(Qt::DefaultContextMenu); QObject::connect(contextChooserMenu, &QMenu::aboutToShow, this, &MainWindow::contextChooser_menuShowing); @@ -121,9 +121,9 @@ MainWindow::MainWindow(ICaptureContext &ctx) : QMainWindow(NULL), ui(new Ui::Mai statusProgress->setMinimum(0); statusProgress->setMaximum(1000); - statusIcon->setText(""); + statusIcon->setText(QString()); statusIcon->setPixmap(QPixmap()); - statusText->setText(""); + statusText->setText(QString()); QObject::connect(statusIcon, &RDLabel::doubleClicked, this, &MainWindow::statusDoubleClicked); QObject::connect(statusText, &RDLabel::doubleClicked, this, &MainWindow::statusDoubleClicked); @@ -149,7 +149,7 @@ MainWindow::MainWindow(ICaptureContext &ctx) : QMainWindow(NULL), ui(new Ui::Mai }); m_RemoteProbe->start(); - ui->statusBar->setStyleSheet("QStatusBar::item { border: 0px }"); + ui->statusBar->setStyleSheet(lit("QStatusBar::item { border: 0px }")); SetTitle(); @@ -254,10 +254,10 @@ MainWindow::~MainWindow() QString MainWindow::GetLayoutPath(int layout) { - QString filename = "DefaultLayout.config"; + QString filename = lit("DefaultLayout.config"); if(layout > 0) - filename = QString("Layout%1.config").arg(layout); + filename = lit("Layout%1.config").arg(layout); return ConfigFilePath(filename); } @@ -273,11 +273,11 @@ void MainWindow::on_action_Open_Log_triggered() return; QString filename = - RDDialog::getOpenFileName(this, "Select Logfile to open", m_Ctx.Config().LastLogPath, - "Log Files (*.rdc);;Image Files (*.dds *.hdr *.exr *.bmp *.jpg " - "*.jpeg *.png *.tga *.gif *.psd;;All Files (*.*)"); + RDDialog::getOpenFileName(this, tr("Select Logfile to open"), m_Ctx.Config().LastLogPath, + tr("Log Files (*.rdc);;Image Files (*.dds *.hdr *.exr *.bmp *.jpg " + "*.jpeg *.png *.tga *.gif *.psd;;All Files (*.*)")); - if(filename != "") + if(!filename.isEmpty()) LoadFromFilename(filename); } @@ -286,15 +286,15 @@ void MainWindow::LoadFromFilename(const QString &filename) QFileInfo path(filename); QString ext = path.suffix().toLower(); - if(ext == "rdc") + if(ext == lit("rdc")) { LoadLogfile(filename, false, true); } - else if(ext == "cap") + else if(ext == lit("cap")) { OpenCaptureConfigFile(filename, false); } - else if(ext == "exe") + else if(ext == lit("exe")) { OpenCaptureConfigFile(filename, true); } @@ -328,7 +328,8 @@ void MainWindow::OnCaptureTrigger(const QString &exe, const QString &workingDir, } LiveCapture *live = new LiveCapture( - m_Ctx, m_Ctx.Replay().CurrentRemote() ? m_Ctx.Replay().CurrentRemote()->Hostname : "", + m_Ctx, + m_Ctx.Replay().CurrentRemote() ? m_Ctx.Replay().CurrentRemote()->Hostname : QString(), ret, this, this); ShowLiveCapture(live); callback(live); @@ -370,7 +371,7 @@ void MainWindow::OnInjectTrigger(uint32_t PID, const QListHostname); - remoteMessage += "Try selecting a different remote context in the status bar."; + remoteMessage += tr("Try selecting a different remote context in the status bar."); RDDialog::critical(NULL, tr("Unsupported logfile type"), remoteMessage); } @@ -513,7 +514,7 @@ void MainWindow::LoadLogfile(const QString &filename, bool temporary, bool local QString remoteMessage = tr("This log was captured with %1 and cannot be replayed locally.\n\n").arg(driver); - remoteMessage += "Try selecting a remote context in the status bar."; + remoteMessage += tr("Try selecting a remote context in the status bar."); RDDialog::critical(NULL, tr("Unsupported logfile type"), remoteMessage); } @@ -531,7 +532,7 @@ void MainWindow::LoadLogfile(const QString &filename, bool temporary, bool local // deliberately leave local as true so that we keep referring to the locally saved log // some error - if(fileToLoad == "") + if(fileToLoad.isEmpty()) { RDDialog::critical(NULL, tr("Error copying to remote"), tr("Couldn't copy %1 to remote host for replaying").arg(filename)); @@ -547,7 +548,7 @@ void MainWindow::LoadLogfile(const QString &filename, bool temporary, bool local m_Ctx.Config().LastLogPath = QFileInfo(filename).absolutePath(); } - statusText->setText(tr("Loading ") + origFilename + "..."); + statusText->setText(tr("Loading %1...").arg(origFilename)); } } @@ -568,18 +569,18 @@ QString MainWindow::GetSavePath() { QString dir; - if(m_Ctx.Config().DefaultCaptureSaveDirectory != "") + if(!m_Ctx.Config().DefaultCaptureSaveDirectory.isEmpty()) { - if(m_LastSaveCapturePath == "") + if(m_LastSaveCapturePath.isEmpty()) dir = m_Ctx.Config().DefaultCaptureSaveDirectory; else dir = m_LastSaveCapturePath; } QString filename = - RDDialog::getSaveFileName(this, tr("Save Capture As"), dir, "Log Files (*.rdc)"); + RDDialog::getSaveFileName(this, tr("Save Capture As"), dir, tr("Log Files (*.rdc)")); - if(filename != "") + if(!filename.isEmpty()) { QDir dirinfo = QFileInfo(filename).dir(); if(dirinfo.exists()) @@ -588,14 +589,14 @@ QString MainWindow::GetSavePath() return filename; } - return ""; + return QString(); } bool MainWindow::PromptSaveLog() { QString saveFilename = GetSavePath(); - if(saveFilename != "") + if(!saveFilename.isEmpty()) { if(m_Ctx.IsLogLocal() && !QFileInfo(m_Ctx.LogFilename()).exists()) { @@ -653,7 +654,7 @@ bool MainWindow::PromptCloseLog() if(!m_Ctx.LogLoaded()) return true; - QString deletepath = ""; + QString deletepath; bool loglocal = false; if(m_OwnTempLog) @@ -706,28 +707,28 @@ void MainWindow::CloseLogfile() void MainWindow::SetTitle(const QString &filename) { - QString prefix = ""; + QString prefix; if(m_Ctx.LogLoaded()) { prefix = QFileInfo(filename).fileName(); if(m_Ctx.APIProps().degraded) - prefix += " !DEGRADED PERFORMANCE!"; - prefix += " - "; + prefix += tr(" !DEGRADED PERFORMANCE!"); + prefix += lit(" - "); } if(m_Ctx.Replay().CurrentRemote()) prefix += tr("Remote: %1 - ").arg(m_Ctx.Replay().CurrentRemote()->Hostname); - QString text = prefix + "RenderDoc "; + QString text = prefix + lit("RenderDoc "); if(RENDERDOC_STABLE_BUILD) - text += FULL_VERSION_STRING; + text += lit(FULL_VERSION_STRING); else - text += tr("Unstable release (%1 - %2)").arg(FULL_VERSION_STRING).arg(GIT_COMMIT_HASH); + text += tr("Unstable release (%1 - %2)").arg(lit(FULL_VERSION_STRING)).arg(lit(GIT_COMMIT_HASH)); - if(QString::fromUtf8(RENDERDOC_GetVersionString()) != QString(MAJOR_MINOR_VERSION_STRING)) - text += " - !! VERSION MISMATCH DETECTED !!"; + if(QString::fromLatin1(RENDERDOC_GetVersionString()) != lit(MAJOR_MINOR_VERSION_STRING)) + text += tr(" - !! VERSION MISMATCH DETECTED !!"); setWindowTitle(text); } @@ -747,7 +748,7 @@ void MainWindow::PopulateRecentFiles() for(int i = m_Ctx.Config().RecentLogFiles.size() - 1; i >= 0; i--) { const QString &filename = m_Ctx.Config().RecentLogFiles[i]; - ui->menu_Recent_Logs->addAction("&" + QString::number(idx) + " " + filename, + ui->menu_Recent_Logs->addAction(QFormatStr("&%1 %2").arg(idx).arg(filename), [this, filename] { recentLog(filename); }); idx++; @@ -768,7 +769,7 @@ void MainWindow::PopulateRecentCaptures() for(int i = m_Ctx.Config().RecentCaptureSettings.size() - 1; i >= 0; i--) { const QString &filename = m_Ctx.Config().RecentCaptureSettings[i]; - ui->menu_Recent_Capture_Settings->addAction("&" + QString::number(idx) + " " + filename, + ui->menu_Recent_Capture_Settings->addAction(QFormatStr("&%1 %2").arg(idx).arg(filename), [this, filename] { recentCapture(filename); }); idx++; @@ -997,7 +998,7 @@ void MainWindow::messageCheck() if(m_Ctx.Replay().CurrentRemote() && !m_Ctx.Replay().CurrentRemote()->ServerRunning) { contextChooser->setIcon(Icons::cross()); - contextChooser->setText(tr("Replay Context: %1").arg("Local")); + contextChooser->setText(tr("Replay Context: %1").arg(tr("Local"))); statusText->setText( tr("Remote server disconnected. To attempt to reconnect please select it again.")); @@ -1016,7 +1017,7 @@ void MainWindow::FillRemotesMenu(QMenu *menu, bool includeLocalhost) RemoteHost *host = m_Ctx.Config().RemoteHosts[i]; // add localhost at the end - if(host->Hostname == "localhost") + if(host->Hostname == lit("localhost")) continue; QAction *action = new QAction(menu); @@ -1046,7 +1047,7 @@ void MainWindow::FillRemotesMenu(QMenu *menu, bool includeLocalhost) { QAction *localContext = new QAction(menu); - localContext->setText("Local"); + localContext->setText(tr("Local")); localContext->setIcon(Icons::house()); QObject::connect(localContext, &QAction::triggered, this, &MainWindow::switchContext); @@ -1108,11 +1109,11 @@ void MainWindow::switchContext() if(!host) { contextChooser->setIcon(Icons::house()); - contextChooser->setText(tr("Replay Context: %1").arg("Local")); + contextChooser->setText(tr("Replay Context: %1").arg(tr("Local"))); ui->action_Inject_into_Process->setEnabled(true); - statusText->setText(""); + statusText->setText(QString()); SetTitle(); } @@ -1134,7 +1135,7 @@ void MainWindow::switchContext() // see if the server is up host->CheckStatus(); - if(!host->ServerRunning && host->RunCommand != "") + if(!host->ServerRunning && !host->RunCommand.isEmpty()) { GUIInvoke::call([this]() { statusText->setText(tr("Running remote server command...")); }); @@ -1158,13 +1159,13 @@ void MainWindow::switchContext() if(status != ReplayStatus::Succeeded) { contextChooser->setIcon(Icons::cross()); - contextChooser->setText(tr("Replay Context: %1").arg("Local")); + contextChooser->setText(tr("Replay Context: %1").arg(tr("Local"))); statusText->setText(tr("Connection failed: %1").arg(ToQStr(status))); } else if(host->VersionMismatch) { statusText->setText( - tr("Remote server is not running RenderDoc %1").arg(FULL_VERSION_STRING)); + tr("Remote server is not running RenderDoc %1").arg(lit(FULL_VERSION_STRING))); } else if(host->Busy) { @@ -1176,7 +1177,7 @@ void MainWindow::switchContext() } else { - if(host->RunCommand != "") + if(!host->RunCommand.isEmpty()) statusText->setText(tr("Remote server not running or failed to start")); else statusText->setText(tr("Remote server not running - no start command configured")); @@ -1232,7 +1233,7 @@ void MainWindow::OnLogfileClosed() { contextChooser->setEnabled(true); - statusText->setText(""); + statusText->setText(QString()); statusIcon->setPixmap(QPixmap()); statusProgress->setVisible(false); @@ -1246,7 +1247,7 @@ void MainWindow::OnLogfileClosed() { statusText->setText( tr("Remote server disconnected. To attempt to reconnect please select it again.")); - contextChooser->setText(tr("Replay Context: %1").arg("Local")); + contextChooser->setText(tr("Replay Context: %1").arg(tr("Local"))); m_Ctx.Replay().DisconnectFromRemoteServer(); } } @@ -1434,11 +1435,11 @@ void MainWindow::on_action_View_Documentation_triggered() QFileInfo fi(QGuiApplication::applicationFilePath()); QDir curDir = QFileInfo(QGuiApplication::applicationFilePath()).absoluteDir(); - if(fi.absoluteDir().exists("renderdoc.chm")) + if(fi.absoluteDir().exists(lit("renderdoc.chm"))) QDesktopServices::openUrl( - QUrl::fromLocalFile(fi.absoluteDir().absoluteFilePath("renderdoc.chm"))); + QUrl::fromLocalFile(fi.absoluteDir().absoluteFilePath(lit("renderdoc.chm")))); else - QDesktopServices::openUrl(QUrl::fromUserInput("https://renderdoc.org/docs")); + QDesktopServices::openUrl(QUrl::fromUserInput(lit("https://renderdoc.org/docs"))); } void MainWindow::on_action_View_Diagnostic_Log_File_triggered() @@ -1450,12 +1451,12 @@ void MainWindow::on_action_View_Diagnostic_Log_File_triggered() void MainWindow::on_action_Source_on_github_triggered() { - QDesktopServices::openUrl(QUrl::fromUserInput("https://github.com/baldurk/renderdoc")); + QDesktopServices::openUrl(QUrl::fromUserInput(lit("https://github.com/baldurk/renderdoc"))); } void MainWindow::on_action_Build_Release_downloads_triggered() { - QDesktopServices::openUrl(QUrl::fromUserInput("https://renderdoc.org/builds")); + QDesktopServices::openUrl(QUrl::fromUserInput(lit("https://renderdoc.org/builds"))); } void MainWindow::on_actionShow_Tips_triggered() @@ -1513,19 +1514,19 @@ QString MainWindow::dragFilename(const QMimeData *mimeData) } } - return ""; + return QString(); } void MainWindow::dragEnterEvent(QDragEnterEvent *event) { - if(dragFilename(event->mimeData()) != "") + if(!dragFilename(event->mimeData()).isEmpty()) event->acceptProposedAction(); } void MainWindow::dropEvent(QDropEvent *event) { QString fn = dragFilename(event->mimeData()); - if(fn != "") + if(!fn.isEmpty()) LoadFromFilename(fn); } @@ -1565,9 +1566,9 @@ void MainWindow::LoadSaveLayout(QAction *action, bool save) if(!success) { if(save) - RDDialog::critical(this, "Error saving layout", "Couldn't save layout"); + RDDialog::critical(this, tr("Error saving layout"), tr("Couldn't save layout")); else - RDDialog::critical(this, "Error loading layout", "Couldn't load layout"); + RDDialog::critical(this, tr("Error loading layout"), tr("Couldn't load layout")); } } @@ -1575,14 +1576,14 @@ QVariantMap MainWindow::saveState() { QVariantMap state = ui->toolWindowManager->saveState(); - state["mainWindowGeometry"] = saveGeometry().toBase64(); + state[lit("mainWindowGeometry")] = saveGeometry().toBase64(); return state; } bool MainWindow::restoreState(QVariantMap &state) { - restoreGeometry(QByteArray::fromBase64(state["mainWindowGeometry"].toByteArray())); + restoreGeometry(QByteArray::fromBase64(state[lit("mainWindowGeometry")].toByteArray())); ui->toolWindowManager->restoreState(state); diff --git a/qrenderdoc/Windows/MainWindow.h b/qrenderdoc/Windows/MainWindow.h index 6999152e8..43a38667e 100644 --- a/qrenderdoc/Windows/MainWindow.h +++ b/qrenderdoc/Windows/MainWindow.h @@ -155,7 +155,7 @@ private: bool m_OwnTempLog = false; bool m_SavedTempLog = false; - QString m_LastSaveCapturePath = ""; + QString m_LastSaveCapturePath; void setLogHasErrors(bool errors); diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index 270d5a581..b9cbecf3c 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -340,11 +340,13 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx, ui->pipeFlow->setStages( { - "IA", "VS", "HS", "DS", "GS", "RS", "PS", "OM", "CS", + lit("IA"), lit("VS"), lit("HS"), lit("DS"), lit("GS"), lit("RS"), lit("PS"), lit("OM"), + lit("CS"), }, { - "Input Assembler", "Vertex Shader", "Hull Shader", "Domain Shader", "Geometry Shader", - "Rasterizer", "Pixel Shader", "Output Merger", "Compute Shader", + tr("Input Assembler"), tr("Vertex Shader"), tr("Hull Shader"), tr("Domain Shader"), + tr("Geometry Shader"), tr("Rasterizer"), tr("Pixel Shader"), tr("Output Merger"), + tr("Compute Shader"), }); ui->pipeFlow->setIsolatedStage(8); // compute shader isolated @@ -547,22 +549,22 @@ void D3D11PipelineStateViewer::addResourceRow(const ViewTag &view, const ShaderR if(showNode(usedSlot, filledSlot)) { - QString slotname = view.type == ViewTag::OMDepth ? "Depth" : QString::number(view.index); + QString slotname = view.type == ViewTag::OMDepth ? tr("Depth") : QString::number(view.index); if(shaderInput && !shaderInput->name.empty()) - slotname += ": " + ToQStr(shaderInput->name); + slotname += lit(": ") + ToQStr(shaderInput->name); uint32_t w = 1, h = 1, d = 1; uint32_t a = 1; - QString format = "Unknown"; - QString name = "Shader Resource " + ToQStr(r.Resource); - QString typeName = "Unknown"; + QString format = tr("Unknown"); + QString name = tr("Shader Resource %1").arg(ToQStr(r.Resource)); + QString typeName = tr("Unknown"); if(!filledSlot) { - name = "Empty"; - format = "-"; - typeName = "-"; + name = tr("Empty"); + format = lit("-"); + typeName = lit("-"); w = h = d = a = 0; } @@ -575,12 +577,12 @@ void D3D11PipelineStateViewer::addResourceRow(const ViewTag &view, const ShaderR d = tex->depth; a = tex->arraysize; format = ToQStr(tex->format.strname); - name = tex->name; + name = ToQStr(tex->name); typeName = ToQStr(tex->resType); if(tex->resType == TextureDim::Texture2DMS || tex->resType == TextureDim::Texture2DMSArray) { - typeName += QString(" %1x").arg(tex->msSamp); + typeName += QFormatStr(" %1x").arg(tex->msSamp); } if(tex->format != r.Format) @@ -598,25 +600,26 @@ void D3D11PipelineStateViewer::addResourceRow(const ViewTag &view, const ShaderR h = 0; d = 0; a = 0; - format = ""; - name = buf->name; - typeName = "Buffer"; + format = QString(); + name = ToQStr(buf->name); + typeName = lit("Buffer"); if(r.Flags & D3DBufferViewFlags::Raw) { - typeName = QString("%1ByteAddressBuffer").arg(view.type == ViewTag::UAV ? "RW" : ""); + typeName = + QFormatStr("%1ByteAddressBuffer").arg(view.type == ViewTag::UAV ? lit("RW") : QString()); } else if(r.ElementSize > 0) { // for structured buffers, display how many 'elements' there are in the buffer - typeName = QString("%1StructuredBuffer[%2]") - .arg(view.type == ViewTag::UAV ? "RW" : "") + typeName = QFormatStr("%1StructuredBuffer[%2]") + .arg(view.type == ViewTag::UAV ? lit("RW") : QString()) .arg(buf->length / r.ElementSize); } if(r.Flags & (D3DBufferViewFlags::Append | D3DBufferViewFlags::Counter)) { - typeName += QString(" (Count: %1)").arg(r.BufferStructCount); + typeName += tr(" (Count: %1)").arg(r.BufferStructCount); } // get the buffer type, whether it's just a basic type or a complex struct @@ -625,13 +628,13 @@ void D3D11PipelineStateViewer::addResourceRow(const ViewTag &view, const ShaderR if(r.Format.compType == CompType::Typeless) { if(!shaderInput->variableType.members.empty()) - format = "struct " + ToQStr(shaderInput->variableType.descriptor.name); + format = lit("struct ") + ToQStr(shaderInput->variableType.descriptor.name); else format = ToQStr(shaderInput->variableType.descriptor.name); } else { - format = r.Format.strname; + format = ToQStr(r.Format.strname); } } @@ -640,7 +643,7 @@ void D3D11PipelineStateViewer::addResourceRow(const ViewTag &view, const ShaderR } RDTreeWidgetItem *node = - new RDTreeWidgetItem({slotname, name, typeName, w, h, d, a, format, ""}); + new RDTreeWidgetItem({slotname, name, typeName, w, h, d, a, format, QString()}); node->setTag(QVariant::fromValue(view)); @@ -733,7 +736,7 @@ void D3D11PipelineStateViewer::clearState() ui->iaLayouts->clear(); ui->iaBuffers->clear(); ui->iaBytecodeMismatch->setVisible(false); - ui->topology->setText(""); + ui->topology->setText(QString()); ui->topologyDiagram->setPixmap(QPixmap()); clearShaderState(ui->vsShader, ui->vsResources, ui->vsSamplers, ui->vsCBuffers, ui->vsClasses); @@ -753,10 +756,10 @@ void D3D11PipelineStateViewer::clearState() ui->frontCCW->setPixmap(tick); ui->conservativeRaster->setPixmap(cross); - ui->depthBias->setText("0.0"); - ui->depthBiasClamp->setText("0.0"); - ui->slopeScaledBias->setText("0.0"); - ui->forcedSampleCount->setText("0"); + ui->depthBias->setText(lit("0.0")); + ui->depthBiasClamp->setText(lit("0.0")); + ui->slopeScaledBias->setText(lit("0.0")); + ui->forcedSampleCount->setText(lit("0")); ui->depthClip->setPixmap(tick); ui->scissorEnabled->setPixmap(tick); @@ -766,8 +769,8 @@ void D3D11PipelineStateViewer::clearState() ui->independentBlend->setPixmap(cross); ui->alphaToCoverage->setPixmap(tick); - ui->blendFactor->setText("0.00, 0.00, 0.00, 0.00"); - ui->sampleMask->setText("FFFFFFFF"); + ui->blendFactor->setText(lit("0.00, 0.00, 0.00, 0.00")); + ui->sampleMask->setText(lit("FFFFFFFF")); ui->viewports->clear(); ui->scissors->clear(); @@ -776,13 +779,13 @@ void D3D11PipelineStateViewer::clearState() ui->blends->clear(); ui->depthEnabled->setPixmap(tick); - ui->depthFunc->setText("GREATER_EQUAL"); + ui->depthFunc->setText(lit("GREATER_EQUAL")); ui->depthWrite->setPixmap(tick); ui->stencilEnabled->setPixmap(cross); - ui->stencilReadMask->setText("FF"); - ui->stencilWriteMask->setText("FF"); - ui->stencilRef->setText("FF"); + ui->stencilReadMask->setText(lit("FF")); + ui->stencilWriteMask->setText(lit("FF")); + ui->stencilRef->setText(lit("FF")); ui->stencils->clear(); } @@ -809,7 +812,8 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL shaderfn = QFileInfo(ToQStr(shaderDetails->DebugInfo.files[entryFile].first)).fileName(); - shader->setText(ToQStr(shaderDetails->DebugInfo.entryFunc) + "()" + " - " + shaderfn); + shader->setText( + QFormatStr("%1() - %2").arg(ToQStr(shaderDetails->DebugInfo.entryFunc)).arg(shaderfn)); } int vs = 0; @@ -868,26 +872,28 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL QString slotname = QString::number(i); if(shaderInput && !shaderInput->name.empty()) - slotname += ": " + ToQStr(shaderInput->name); + slotname += lit(": ") + ToQStr(shaderInput->name); if(s.customName) - slotname += "(" + ToQStr(s.name) + ")"; + slotname += QFormatStr("(%1)").arg(ToQStr(s.name)); - QString borderColor = - QString::number(s.BorderColor[0]) + ", " + QString::number(s.BorderColor[1]) + ", " + - QString::number(s.BorderColor[2]) + ", " + QString::number(s.BorderColor[3]); + QString borderColor = QFormatStr("%1, %2, %3, %4") + .arg(s.BorderColor[0]) + .arg(s.BorderColor[1]) + .arg(s.BorderColor[2]) + .arg(s.BorderColor[3]); - QString addressing = ""; + QString addressing; - QString addPrefix = ""; - QString addVal = ""; + QString addPrefix; + QString addVal; QString addr[] = {ToQStr(s.AddressU), ToQStr(s.AddressV), ToQStr(s.AddressW)}; // arrange like either UVW: WRAP or UV: WRAP, W: CLAMP for(int a = 0; a < 3; a++) { - const QString str[] = {"U", "V", "W"}; + const QString str[] = {lit("U"), lit("V"), lit("W")}; QString prefix = str[a]; if(a == 0 || addr[a] == addr[a - 1]) @@ -896,33 +902,34 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL } else { - addressing += addPrefix + ": " + addVal + ", "; + addressing += QFormatStr("%1: %2, ").arg(addPrefix).arg(addVal); addPrefix = prefix; } addVal = addr[a]; } - addressing += addPrefix + ": " + addVal; + addressing += addPrefix + lit(": ") + addVal; if(s.UseBorder()) - addressing += QString("<%1>").arg(borderColor); + addressing += QFormatStr("<%1>").arg(borderColor); QString filter = ToQStr(s.Filter); if(s.MaxAniso > 1) - filter += QString(" %1x").arg(s.MaxAniso); + filter += QFormatStr(" %1x").arg(s.MaxAniso); if(s.Filter.func == FilterFunc::Comparison) - filter = QString(" (%1)").arg(ToQStr(s.Comparison)); + filter = QFormatStr(" (%1)").arg(ToQStr(s.Comparison)); else if(s.Filter.func != FilterFunc::Normal) - filter = QString(" (%1)").arg(ToQStr(s.Filter.func)); + filter = QFormatStr(" (%1)").arg(ToQStr(s.Filter.func)); - RDTreeWidgetItem *node = - new RDTreeWidgetItem({slotname, addressing, filter, - (s.MinLOD == -FLT_MAX ? "0" : QString::number(s.MinLOD)) + " - " + - (s.MaxLOD == FLT_MAX ? "FLT_MAX" : QString::number(s.MaxLOD)), - s.MipLODBias}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {slotname, addressing, filter, + QFormatStr("%1 - %2") + .arg(s.MinLOD == -FLT_MAX ? lit("0") : QString::number(s.MinLOD)) + .arg(s.MaxLOD == FLT_MAX ? lit("FLT_MAX") : QString::number(s.MaxLOD)), + s.MipLODBias}); if(!filledSlot) setEmptyRow(node); @@ -969,14 +976,14 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL if(showNode(usedSlot, filledSlot)) { - QString name = QString("Constant Buffer %1").arg(ToQStr(b.Buffer)); + QString name = tr("Constant Buffer %1").arg(ToQStr(b.Buffer)); ulong length = 1; int numvars = shaderCBuf ? shaderCBuf->variables.count : 0; uint32_t bytesize = shaderCBuf ? shaderCBuf->byteSize : 0; if(!filledSlot) { - name = "Empty"; + name = lit("Empty"); length = 0; } @@ -984,14 +991,14 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } QString slotname = QString::number(i); if(shaderCBuf && !shaderCBuf->name.empty()) - slotname += ": " + ToQStr(shaderCBuf->name); + slotname += lit(": ") + ToQStr(shaderCBuf->name); QString sizestr; if(bytesize == (uint32_t)length) @@ -1003,9 +1010,9 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL if(length < bytesize) filledSlot = false; - QString vecrange = QString("%1 - %2").arg(b.VecOffset).arg(b.VecOffset + b.VecCount); + QString vecrange = QFormatStr("%1 - %2").arg(b.VecOffset).arg(b.VecOffset + b.VecCount); - RDTreeWidgetItem *node = new RDTreeWidgetItem({slotname, name, vecrange, sizestr, ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem({slotname, name, vecrange, sizestr, QString()}); node->setTag(QVariant::fromValue(cbufIdx)); @@ -1027,7 +1034,7 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL classes->clear(); for(int i = 0; i < stage.ClassInstances.count; i++) { - QString interfaceName = QString("Interface %1").arg(i); + QString interfaceName = lit("Interface %1").arg(i); if(shaderDetails && i < shaderDetails->Interfaces.count) interfaceName = ToQStr(shaderDetails->Interfaces[i]); @@ -1064,7 +1071,7 @@ void D3D11PipelineStateViewer::setState() QString layout = ToQStr(state.m_IA.name); if(state.m_IA.Bytecode && !state.m_IA.Bytecode->DebugInfo.entryFunc.empty()) - layout += " (" + ToQStr(state.m_IA.Bytecode->DebugInfo.entryFunc) + ")"; + layout += QFormatStr(" (%1)").arg(ToQStr(state.m_IA.Bytecode->DebugInfo.entryFunc)); ui->iaBytecode->setText(layout); } @@ -1079,7 +1086,7 @@ void D3D11PipelineStateViewer::setState() // This should be moved to a "Render Doctor" window reporting problems if(state.m_IA.Bytecode && state.m_VS.ShaderDetails) { - QString mismatchDetails = ""; + QString mismatchDetails; // VS wants more elements if(state.m_IA.Bytecode->InputSig.count < state.m_VS.ShaderDetails->InputSig.count) @@ -1101,7 +1108,7 @@ void D3D11PipelineStateViewer::setState() } if(!allSystem) - mismatchDetails += "IA bytecode provides fewer elements than VS wants.\n"; + mismatchDetails += tr("IA bytecode provides fewer elements than VS wants.\n"); } { @@ -1171,7 +1178,7 @@ void D3D11PipelineStateViewer::setState() // D3D11 specific value if(l.ByteOffset == ~0U) { - byteOffs = QString("APPEND_ALIGNED (%1)").arg(layoutOffs[l.InputSlot]); + byteOffs = lit("APPEND_ALIGNED (%1)").arg(layoutOffs[l.InputSlot]); } else { @@ -1198,7 +1205,8 @@ void D3D11PipelineStateViewer::setState() { RDTreeWidgetItem *node = new RDTreeWidgetItem( {i, ToQStr(l.SemanticName), l.SemanticIndex, ToQStr(l.Format.strname), l.InputSlot, - byteOffs, l.PerInstance ? "PER_INSTANCE" : "PER_VERTEX", l.InstanceDataStepRate, ""}); + byteOffs, l.PerInstance ? lit("PER_INSTANCE") : lit("PER_VERTEX"), + l.InstanceDataStepRate, QString()}); if(usedSlot) usedVBuffers[l.InputSlot] = true; @@ -1221,7 +1229,7 @@ void D3D11PipelineStateViewer::setState() int numCPs = PatchList_Count(topo); if(numCPs > 0) { - ui->topology->setText(QString("PatchList (%1 Control Points)").arg(numCPs)); + ui->topology->setText(tr("PatchList (%1 Control Points)").arg(numCPs)); } else { @@ -1260,7 +1268,7 @@ void D3D11PipelineStateViewer::setState() { if(ibufferUsed || ui->showDisabled->isChecked()) { - QString name = "Buffer " + ToQStr(state.m_IA.ibuffer.Buffer); + QString name = tr("Buffer ") + ToQStr(state.m_IA.ibuffer.Buffer); uint64_t length = 1; if(!ibufferUsed) @@ -1270,13 +1278,13 @@ void D3D11PipelineStateViewer::setState() if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Index", name, draw ? draw->indexByteWidth : 0, - state.m_IA.ibuffer.Offset, (qulonglong)length, ""}); + new RDTreeWidgetItem({tr("Index"), name, draw ? draw->indexByteWidth : 0, + state.m_IA.ibuffer.Offset, (qulonglong)length, QString()}); node->setTag( QVariant::fromValue(VBIBTag(state.m_IA.ibuffer.Buffer, draw ? draw->indexOffset : 0))); @@ -1294,8 +1302,8 @@ void D3D11PipelineStateViewer::setState() { if(ibufferUsed || ui->showEmpty->isChecked()) { - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Index", tr("No Buffer Set"), "-", "-", "-", ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {tr("Index"), tr("No Buffer Set"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag( QVariant::fromValue(VBIBTag(state.m_IA.ibuffer.Buffer, draw ? draw->indexOffset : 0))); @@ -1320,28 +1328,29 @@ void D3D11PipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString name = "Buffer " + ToQStr(v.Buffer); + QString name = tr("Buffer ") + ToQStr(v.Buffer); qulonglong length = 1; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); length = 0; } BufferDescription *buf = m_Ctx.GetBuffer(v.Buffer); if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } RDTreeWidgetItem *node = NULL; if(filledSlot) - node = new RDTreeWidgetItem({i, name, v.Stride, v.Offset, length, ""}); + node = new RDTreeWidgetItem({i, name, v.Stride, v.Offset, length, QString()}); else - node = new RDTreeWidgetItem({i, "No Buffer Set", "-", "-", "-", ""}); + node = + new RDTreeWidgetItem({i, tr("No Buffer Set"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag(QVariant::fromValue(VBIBTag(v.Buffer, v.Offset))); @@ -1411,24 +1420,24 @@ void D3D11PipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString name = "Buffer " + ToQStr(s.Buffer); + QString name = tr("Buffer ") + ToQStr(s.Buffer); qulonglong length = 0; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); } BufferDescription *buf = m_Ctx.GetBuffer(s.Buffer); if(buf) { - name = buf->name; + name = ToQStr(buf->name); if(length == 0) length = buf->length; } - RDTreeWidgetItem *node = new RDTreeWidgetItem({i, name, length, s.Offset, ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem({i, name, length, s.Offset, QString()}); node->setTag(QVariant::fromValue(s.Buffer)); @@ -1594,11 +1603,11 @@ void D3D11PipelineStateViewer::setState() ToQStr(blend.Logic), - QString("%1%2%3%4") - .arg((blend.WriteMask & 0x1) == 0 ? "_" : "R") - .arg((blend.WriteMask & 0x2) == 0 ? "_" : "G") - .arg((blend.WriteMask & 0x4) == 0 ? "_" : "B") - .arg((blend.WriteMask & 0x8) == 0 ? "_" : "A")}); + QFormatStr("%1%2%3%4") + .arg((blend.WriteMask & 0x1) == 0 ? lit("_") : lit("R")) + .arg((blend.WriteMask & 0x2) == 0 ? lit("_") : lit("G")) + .arg((blend.WriteMask & 0x4) == 0 ? lit("_") : lit("B")) + .arg((blend.WriteMask & 0x8) == 0 ? lit("_") : lit("A"))}); if(!filledSlot) setEmptyRow(node); @@ -1619,9 +1628,9 @@ void D3D11PipelineStateViewer::setState() ui->alphaToCoverage->setPixmap(state.m_OM.m_BlendState.AlphaToCoverage ? tick : cross); ui->independentBlend->setPixmap(state.m_OM.m_BlendState.IndependentBlend ? tick : cross); ui->sampleMask->setText( - QString("%1").arg(state.m_OM.m_BlendState.SampleMask, 8, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_BlendState.SampleMask, 8, 16, QLatin1Char('0')).toUpper()); - ui->blendFactor->setText(QString("%1, %2, %3, %4") + ui->blendFactor->setText(QFormatStr("%1, %2, %3, %4") .arg(state.m_OM.m_BlendState.BlendFactor[0], 2) .arg(state.m_OM.m_BlendState.BlendFactor[1], 2) .arg(state.m_OM.m_BlendState.BlendFactor[2], 2) @@ -1633,21 +1642,21 @@ void D3D11PipelineStateViewer::setState() ui->stencilEnabled->setPixmap(state.m_OM.m_State.StencilEnable ? tick : cross); ui->stencilReadMask->setText( - QString("%1").arg(state.m_OM.m_State.StencilReadMask, 2, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_State.StencilReadMask, 2, 16, QLatin1Char('0')).toUpper()); ui->stencilWriteMask->setText( - QString("%1").arg(state.m_OM.m_State.StencilWriteMask, 2, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_State.StencilWriteMask, 2, 16, QLatin1Char('0')).toUpper()); ui->stencilRef->setText( - QString("%1").arg(state.m_OM.m_State.StencilRef, 2, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_State.StencilRef, 2, 16, QLatin1Char('0')).toUpper()); ui->stencils->setUpdatesEnabled(false); ui->stencils->clear(); ui->stencils->addTopLevelItem( - new RDTreeWidgetItem({"Front", ToQStr(state.m_OM.m_State.m_FrontFace.Func), + new RDTreeWidgetItem({tr("Front"), ToQStr(state.m_OM.m_State.m_FrontFace.Func), ToQStr(state.m_OM.m_State.m_FrontFace.FailOp), ToQStr(state.m_OM.m_State.m_FrontFace.DepthFailOp), ToQStr(state.m_OM.m_State.m_FrontFace.PassOp)})); ui->stencils->addTopLevelItem(new RDTreeWidgetItem( - {"Back", ToQStr(state.m_OM.m_State.m_BackFace.Func), + {tr("Back"), ToQStr(state.m_OM.m_State.m_BackFace.Func), ToQStr(state.m_OM.m_State.m_BackFace.FailOp), ToQStr(state.m_OM.m_State.m_BackFace.DepthFailOp), ToQStr(state.m_OM.m_State.m_BackFace.PassOp)})); ui->stencils->clearSelection(); @@ -1717,9 +1726,9 @@ void D3D11PipelineStateViewer::setState() QString D3D11PipelineStateViewer::formatMembers(int indent, const QString &nameprefix, const rdctype::array &vars) { - QString indentstr(indent * 4, QChar(' ')); + QString indentstr(indent * 4, QLatin1Char(' ')); - QString ret = ""; + QString ret; int i = 0; @@ -1728,19 +1737,25 @@ QString D3D11PipelineStateViewer::formatMembers(int indent, const QString &namep if(!v.type.members.empty()) { if(i > 0) - ret += "\n"; - ret += indentstr + QString("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); - ret += indentstr + "{\n" + formatMembers(indent + 1, ToQStr(v.name) + "_", v.type.members) + - indentstr + "}\n"; + ret += lit("\n"); + ret += indentstr + lit("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); + ret += indentstr + lit("{\n") + + formatMembers(indent + 1, ToQStr(v.name) + lit("_"), v.type.members) + indentstr + + lit("}\n"); if(i < vars.count - 1) - ret += "\n"; + ret += lit("\n"); } else { - QString arr = ""; + QString arr; if(v.type.descriptor.elements > 1) - arr = QString("[%1]").arg(v.type.descriptor.elements); - ret += indentstr + ToQStr(v.type.descriptor.name) + " " + nameprefix + v.name + arr + ";\n"; + arr = QFormatStr("[%1]").arg(v.type.descriptor.elements); + ret += QFormatStr("%1%2 %3%4%5;\n") + .arg(indentstr) + .arg(ToQStr(v.type.descriptor.name)) + .arg(nameprefix) + .arg(ToQStr(v.name)) + .arg(arr); } i++; @@ -1824,7 +1839,7 @@ void D3D11PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in } } - QString format = ""; + QString format; const ShaderResource *shaderRes = NULL; @@ -1883,9 +1898,9 @@ void D3D11PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in if(!res.variableType.members.empty()) { - format = QString("// struct %1\n{\n%2}") + format = lit("// struct %1\n{\n%2}") .arg(ToQStr(res.variableType.descriptor.name)) - .arg(formatMembers(1, "", res.variableType.members)); + .arg(formatMembers(1, QString(), res.variableType.members)); } else { @@ -1893,21 +1908,21 @@ void D3D11PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in if(view.res.Format.strname.empty()) { - format = ""; + format = QString(); if(desc.rowMajorStorage) - format += "row_major "; + format += lit("row_major "); format += ToQStr(desc.type); if(desc.rows > 1 && desc.cols > 1) - format += QString("%1x%2").arg(desc.rows).arg(desc.cols); + format += QFormatStr("%1x%2").arg(desc.rows).arg(desc.cols); else if(desc.cols > 1) format += QString::number(desc.cols); if(!desc.name.empty()) - format += " " + ToQStr(desc.name); + format += lit(" ") + ToQStr(desc.name); if(desc.elements > 1) - format += QString("[%1]").arg(desc.elements); + format += QFormatStr("[%1]").arg(desc.elements); } else { @@ -1917,13 +1932,13 @@ void D3D11PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in if(fmt.specialFormat == SpecialFormat::R10G10B10A2) { if(fmt.compType == CompType::UInt) - format = "uintten"; + format = lit("uintten"); if(fmt.compType == CompType::UNorm) - format = "unormten"; + format = lit("unormten"); } else if(fmt.specialFormat == SpecialFormat::R11G11B10) { - format = "floateleven"; + format = lit("floateleven"); } } else @@ -1933,47 +1948,47 @@ void D3D11PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in case 1: { if(fmt.compType == CompType::UNorm) - format = "unormb"; + format = lit("unormb"); if(fmt.compType == CompType::SNorm) - format = "snormb"; + format = lit("snormb"); if(fmt.compType == CompType::UInt) - format = "ubyte"; + format = lit("ubyte"); if(fmt.compType == CompType::SInt) - format = "byte"; + format = lit("byte"); break; } case 2: { if(fmt.compType == CompType::UNorm) - format = "unormh"; + format = lit("unormh"); if(fmt.compType == CompType::SNorm) - format = "snormh"; + format = lit("snormh"); if(fmt.compType == CompType::UInt) - format = "ushort"; + format = lit("ushort"); if(fmt.compType == CompType::SInt) - format = "short"; + format = lit("short"); if(fmt.compType == CompType::Float) - format = "half"; + format = lit("half"); break; } case 4: { if(fmt.compType == CompType::UNorm) - format = "unormf"; + format = lit("unormf"); if(fmt.compType == CompType::SNorm) - format = "snormf"; + format = lit("snormf"); if(fmt.compType == CompType::UInt) - format = "uint"; + format = lit("uint"); if(fmt.compType == CompType::SInt) - format = "int"; + format = lit("int"); if(fmt.compType == CompType::Float) - format = "float"; + format = lit("float"); break; } } if(view.res.Flags & D3DBufferViewFlags::Raw) - format = "xint"; + format = lit("xint"); format += QString::number(fmt.compCount); } @@ -2185,9 +2200,9 @@ void D3D11PipelineStateViewer::shaderEdit_clicked() if(!shaderDetails) return; - QString entryFunc = QString("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::D3D11)[0]); + QString entryFunc = lit("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::D3D11)[0]); - QString mainfile = ""; + QString mainfile; QStringMap files; @@ -2195,9 +2210,9 @@ void D3D11PipelineStateViewer::shaderEdit_clicked() if(!hasOrigSource) { - QString hlsl = "// TODO - generate stub HLSL"; + QString hlsl = lit("// TODO - generate stub HLSL"); - mainfile = "generated.hlsl"; + mainfile = lit("generated.hlsl"); files[mainfile] = hlsl; } @@ -2290,7 +2305,7 @@ void D3D11PipelineStateViewer::on_debugThread_clicked() return; } - QString debugContext = QString("Group [%1,%2,%3] Thread [%4,%5,%6]") + QString debugContext = lit("Group [%1,%2,%3] Thread [%4,%5,%6]") .arg(thread.g[0]) .arg(thread.g[1]) .arg(thread.g[2]) diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index f48c83ed9..a306adeb2 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -379,11 +379,13 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx, ui->pipeFlow->setStages( { - "IA", "VS", "HS", "DS", "GS", "RS", "PS", "OM", "CS", + lit("IA"), lit("VS"), lit("HS"), lit("DS"), lit("GS"), lit("RS"), lit("PS"), lit("OM"), + lit("CS"), }, { - "Input Assembler", "Vertex Shader", "Hull Shader", "Domain Shader", "Geometry Shader", - "Rasterizer", "Pixel Shader", "Output Merger", "Compute Shader", + tr("Input Assembler"), tr("Vertex Shader"), tr("Hull Shader"), tr("Domain Shader"), + tr("Geometry Shader"), tr("Rasterizer"), tr("Pixel Shader"), tr("Output Merger"), + tr("Compute Shader"), }); ui->pipeFlow->setIsolatedStage(8); // compute shader isolated @@ -633,8 +635,8 @@ void D3D12PipelineStateViewer::addResourceRow(const ViewTag &view, const D3D12Pi viewDetails = m_Ctx.CurD3D12PipelineState().m_OM.DepthReadOnly || m_Ctx.CurD3D12PipelineState().m_OM.StencilReadOnly; - QString rootel = r.Immediate ? QString("#%1 Direct").arg(r.RootElement) - : QString("#%1 Table[%2]").arg(r.RootElement).arg(r.TableIndex); + QString rootel = r.Immediate ? tr("#%1 Direct").arg(r.RootElement) + : tr("#%1 Table[%2]").arg(r.RootElement).arg(r.TableIndex); bool filledSlot = (r.Resource != ResourceId()); bool usedSlot = (bind && bind->used); @@ -648,22 +650,22 @@ void D3D12PipelineStateViewer::addResourceRow(const ViewTag &view, const D3D12Pi QString regname = QString::number(view.reg); if(shaderInput && !shaderInput->name.empty()) - regname += ": " + ToQStr(shaderInput->name); + regname += lit(": ") + ToQStr(shaderInput->name); if(view.space == ViewTag::OMDepth) - regname = "Depth"; + regname = tr("Depth"); uint32_t w = 1, h = 1, d = 1; uint32_t a = 1; - QString format = "Unknown"; - QString name = QString("Shader Resource %1").arg(ToQStr(r.Resource)); - QString typeName = "Unknown"; + QString format = tr("Unknown"); + QString name = tr("Shader Resource %1").arg(ToQStr(r.Resource)); + QString typeName = tr("Unknown"); if(!filledSlot) { - name = "Empty"; - format = "-"; - typeName = "-"; + name = tr("Empty"); + format = lit("-"); + typeName = lit("-"); w = h = d = a = 0; } @@ -676,12 +678,12 @@ void D3D12PipelineStateViewer::addResourceRow(const ViewTag &view, const D3D12Pi d = tex->depth; a = tex->arraysize; format = ToQStr(tex->format.strname); - name = tex->name; + name = ToQStr(tex->name); typeName = ToQStr(tex->resType); if(tex->resType == TextureDim::Texture2DMS || tex->resType == TextureDim::Texture2DMSArray) { - typeName += QString(" %1x").arg(tex->msSamp); + typeName += QFormatStr(" %1x").arg(tex->msSamp); } if(tex->format != r.Format) @@ -699,43 +701,43 @@ void D3D12PipelineStateViewer::addResourceRow(const ViewTag &view, const D3D12Pi h = 0; d = 0; a = 0; - format = ""; - name = buf->name; - typeName = "Buffer"; + format = QString(); + name = ToQStr(buf->name); + typeName = lit("Buffer"); if(r.BufferFlags & D3DBufferViewFlags::Raw) { - typeName = QString("%1ByteAddressBuffer").arg(uav ? "RW" : ""); + typeName = QFormatStr("%1ByteAddressBuffer").arg(uav ? lit("RW") : QString()); } else if(r.ElementSize > 0) { // for structured buffers, display how many 'elements' there are in the buffer a = buf->length / r.ElementSize; - typeName = QString("%1StructuredBuffer[%2]").arg(uav ? "RW" : "").arg(a); + typeName = QFormatStr("%1StructuredBuffer[%2]").arg(uav ? lit("RW") : QString()).arg(a); } if(r.CounterResource != ResourceId()) { - typeName += QString(" (Count: %1)").arg(r.BufferStructCount); + typeName += tr(" (Count: %1)").arg(r.BufferStructCount); } // get the buffer type, whether it's just a basic type or a complex struct if(shaderInput && !shaderInput->IsTexture) { if(!shaderInput->variableType.members.empty()) - format = "struct " + ToQStr(shaderInput->variableType.descriptor.name); + format = lit("struct ") + ToQStr(shaderInput->variableType.descriptor.name); else if(r.Format.compType == CompType::Typeless) format = ToQStr(shaderInput->variableType.descriptor.name); else - format = r.Format.strname; + format = ToQStr(r.Format.strname); } if(HasImportantViewParams(r, buf)) viewDetails = true; } - RDTreeWidgetItem *node = - new RDTreeWidgetItem({rootel, view.space, regname, name, typeName, w, h, d, a, format, ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {rootel, view.space, regname, name, typeName, w, h, d, a, format, QString()}); node->setTag(QVariant::fromValue(view)); @@ -827,7 +829,7 @@ void D3D12PipelineStateViewer::clearState() ui->iaLayouts->clear(); ui->iaBuffers->clear(); - ui->topology->setText(""); + ui->topology->setText(QString()); ui->topologyDiagram->setPixmap(QPixmap()); clearShaderState(ui->vsShader, ui->vsResources, ui->vsSamplers, ui->vsCBuffers, ui->vsUAVs); @@ -845,20 +847,20 @@ void D3D12PipelineStateViewer::clearState() ui->frontCCW->setPixmap(tick); ui->conservativeRaster->setPixmap(cross); - ui->depthBias->setText("0.0"); - ui->depthBiasClamp->setText("0.0"); - ui->slopeScaledBias->setText("0.0"); - ui->forcedSampleCount->setText("0"); + ui->depthBias->setText(lit("0.0")); + ui->depthBiasClamp->setText(lit("0.0")); + ui->slopeScaledBias->setText(lit("0.0")); + ui->forcedSampleCount->setText(lit("0")); ui->depthClip->setPixmap(tick); ui->multisample->setPixmap(tick); ui->lineAA->setPixmap(tick); - ui->sampleMask->setText("FFFFFFFF"); + ui->sampleMask->setText(lit("FFFFFFFF")); ui->independentBlend->setPixmap(cross); ui->alphaToCoverage->setPixmap(tick); - ui->blendFactor->setText("0.00, 0.00, 0.00, 0.00"); + ui->blendFactor->setText(lit("0.00, 0.00, 0.00, 0.00")); ui->viewports->clear(); ui->scissors->clear(); @@ -867,13 +869,13 @@ void D3D12PipelineStateViewer::clearState() ui->blends->clear(); ui->depthEnabled->setPixmap(tick); - ui->depthFunc->setText("GREATER_EQUAL"); + ui->depthFunc->setText(lit("GREATER_EQUAL")); ui->depthWrite->setPixmap(tick); ui->stencilEnabled->setPixmap(cross); - ui->stencilReadMask->setText("FF"); - ui->stencilWriteMask->setText("FF"); - ui->stencilRef->setText("FF"); + ui->stencilReadMask->setText(lit("FF")); + ui->stencilWriteMask->setText(lit("FF")); + ui->stencilRef->setText(lit("FF")); ui->stencils->clear(); } @@ -888,10 +890,12 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL if(stage.Object == ResourceId()) shader->setText(tr("Unbound Shader")); else if(state.customName) - shader->setText(ToQStr(state.name) + " - " + m_Ctx.CurPipelineState().Abbrev(stage.stage)); + shader->setText( + QFormatStr("%1 - %2").arg(ToQStr(state.name)).arg(m_Ctx.CurPipelineState().Abbrev(stage.stage))); else - shader->setText(ToQStr(state.name) + " - " + ToQStr(stage.stage, GraphicsAPI::D3D12) + - " Shader"); + shader->setText(QFormatStr("%1 - %2 Shader") + .arg(ToQStr(state.name)) + .arg(ToQStr(stage.stage, GraphicsAPI::D3D12))); if(shaderDetails && !shaderDetails->DebugInfo.entryFunc.empty() && !shaderDetails->DebugInfo.files.empty()) @@ -904,7 +908,8 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL shaderfn = QFileInfo(ToQStr(shaderDetails->DebugInfo.files[entryFile].first)).fileName(); - shader->setText(ToQStr(shaderDetails->DebugInfo.entryFunc) + "()" + " - " + shaderfn); + shader->setText( + QFormatStr("%1() - %2").arg(ToQStr(shaderDetails->DebugInfo.entryFunc)).arg(shaderfn)); } int vs = 0; @@ -978,8 +983,8 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL } } - QString rootel = s.Immediate ? QString("#%1 Static").arg(s.RootElement) - : QString("#%1 Table[%2]").arg(s.RootElement).arg(s.TableIndex); + QString rootel = s.Immediate ? tr("#%1 Static").arg(s.RootElement) + : tr("#%1 Table[%2]").arg(s.RootElement).arg(s.TableIndex); bool filledSlot = s.Filter.minify != FilterMode::NoFilter; bool usedSlot = (bind && bind->used); @@ -989,23 +994,25 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL QString regname = QString::number(reg); if(shaderInput && !shaderInput->name.empty()) - regname += ": " + ToQStr(shaderInput->name); + regname += lit(": ") + ToQStr(shaderInput->name); - QString borderColor = - QString::number(s.BorderColor[0]) + ", " + QString::number(s.BorderColor[1]) + ", " + - QString::number(s.BorderColor[2]) + ", " + QString::number(s.BorderColor[3]); + QString borderColor = QFormatStr("%1, %2, %3, %4") + .arg(s.BorderColor[0]) + .arg(s.BorderColor[1]) + .arg(s.BorderColor[2]) + .arg(s.BorderColor[3]); - QString addressing = ""; + QString addressing; - QString addPrefix = ""; - QString addVal = ""; + QString addPrefix; + QString addVal; QString addr[] = {ToQStr(s.AddressU), ToQStr(s.AddressV), ToQStr(s.AddressW)}; // arrange like either UVW: WRAP or UV: WRAP, W: CLAMP for(int a = 0; a < 3; a++) { - const QString str[] = {"U", "V", "W"}; + const QString str[] = {lit("U"), lit("V"), lit("W")}; QString prefix = str[a]; if(a == 0 || addr[a] == addr[a - 1]) @@ -1014,33 +1021,34 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL } else { - addressing += addPrefix + ": " + addVal + ", "; + addressing += QFormatStr("%1: %2, ").arg(addPrefix).arg(addVal); addPrefix = prefix; } addVal = addr[a]; } - addressing += addPrefix + ": " + addVal; + addressing += addPrefix + lit(": ") + addVal; if(s.UseBorder()) - addressing += QString("<%1>").arg(borderColor); + addressing += QFormatStr("<%1>").arg(borderColor); QString filter = ToQStr(s.Filter); if(s.MaxAniso > 1) - filter += QString(" %1x").arg(s.MaxAniso); + filter += QFormatStr(" %1x").arg(s.MaxAniso); if(s.Filter.func == FilterFunc::Comparison) - filter += QString(" (%1)").arg(ToQStr(s.Comparison)); + filter += QFormatStr(" (%1)").arg(ToQStr(s.Comparison)); else if(s.Filter.func != FilterFunc::Normal) - filter += QString(" (%1)").arg(ToQStr(s.Filter.func)); + filter += QFormatStr(" (%1)").arg(ToQStr(s.Filter.func)); - RDTreeWidgetItem *node = - new RDTreeWidgetItem({rootel, space, regname, addressing, filter, - (s.MinLOD == -FLT_MAX ? "0" : QString::number(s.MinLOD)) + " - " + - (s.MaxLOD == FLT_MAX ? "FLT_MAX" : QString::number(s.MaxLOD)), - s.MipLODBias}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {rootel, space, regname, addressing, filter, + QFormatStr("%1 - %2") + .arg(s.MinLOD == -FLT_MAX ? lit("0") : QString::number(s.MinLOD)) + .arg(s.MaxLOD == FLT_MAX ? lit("FLT_MAX") : QString::number(s.MaxLOD)), + s.MipLODBias}); if(!filledSlot) setEmptyRow(node); @@ -1102,13 +1110,13 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL if(b.Immediate) { if(!b.RootValues.empty()) - rootel = QString("#%1 Consts").arg(b.RootElement); + rootel = tr("#%1 Consts").arg(b.RootElement); else - rootel = QString("#%1 Direct").arg(b.RootElement); + rootel = tr("#%1 Direct").arg(b.RootElement); } else { - rootel = QString("#%1 Table[%2]").arg(b.RootElement).arg(b.TableIndex); + rootel = tr("#%1 Table[%2]").arg(b.RootElement).arg(b.TableIndex); } bool filledSlot = (b.Buffer != ResourceId()); @@ -1119,7 +1127,7 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL if(showNode(usedSlot, filledSlot)) { - QString name = QString("Constant Buffer %1").arg(ToQStr(b.Buffer)); + QString name = tr("Constant Buffer %1").arg(ToQStr(b.Buffer)); ulong length = b.ByteSize; uint64_t offset = b.Offset; int numvars = shaderCBuf ? shaderCBuf->variables.count : 0; @@ -1129,17 +1137,17 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL bytesize = uint32_t(b.RootValues.count * 4); if(!filledSlot) - name = "Empty"; + name = lit("Empty"); BufferDescription *buf = m_Ctx.GetBuffer(b.Buffer); if(buf) - name = buf->name; + name = ToQStr(buf->name); QString regname = QString::number(reg); if(shaderCBuf && !shaderCBuf->name.empty()) - regname += ": " + ToQStr(shaderCBuf->name); + regname += lit(": ") + ToQStr(shaderCBuf->name); QString sizestr; if(bytesize == (uint32_t)length) @@ -1152,7 +1160,7 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, QL filledSlot = false; RDTreeWidgetItem *node = new RDTreeWidgetItem( - {rootel, (qulonglong)space, regname, name, (qulonglong)offset, sizestr, ""}); + {rootel, (qulonglong)space, regname, name, (qulonglong)offset, sizestr, QString()}); node->setTag(tag); @@ -1205,7 +1213,7 @@ void D3D12PipelineStateViewer::setState() // D3D12 specific value if(l.ByteOffset == ~0U) { - byteOffs = QString("APPEND_ALIGNED (%1)").arg(layoutOffs[l.InputSlot]); + byteOffs = lit("APPEND_ALIGNED (%1)").arg(layoutOffs[l.InputSlot]); } else { @@ -1232,7 +1240,8 @@ void D3D12PipelineStateViewer::setState() { RDTreeWidgetItem *node = new RDTreeWidgetItem( {i, ToQStr(l.SemanticName), l.SemanticIndex, ToQStr(l.Format.strname), l.InputSlot, - byteOffs, l.PerInstance ? "PER_INSTANCE" : "PER_VERTEX", l.InstanceDataStepRate, ""}); + byteOffs, l.PerInstance ? lit("PER_INSTANCE") : lit("PER_VERTEX"), + l.InstanceDataStepRate, QString()}); if(usedSlot) usedVBuffers[l.InputSlot] = true; @@ -1255,7 +1264,7 @@ void D3D12PipelineStateViewer::setState() int numCPs = PatchList_Count(topo); if(numCPs > 0) { - ui->topology->setText(QString("PatchList (%1 Control Points)").arg(numCPs)); + ui->topology->setText(tr("PatchList (%1 Control Points)").arg(numCPs)); } else { @@ -1294,7 +1303,7 @@ void D3D12PipelineStateViewer::setState() { if(ibufferUsed || ui->showDisabled->isChecked()) { - QString name = "Buffer " + ToQStr(state.m_IA.ibuffer.Buffer); + QString name = tr("Buffer ") + ToQStr(state.m_IA.ibuffer.Buffer); uint64_t length = 1; if(!ibufferUsed) @@ -1304,13 +1313,13 @@ void D3D12PipelineStateViewer::setState() if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Index", name, draw ? draw->indexByteWidth : 0, - (qulonglong)state.m_IA.ibuffer.Offset, (qulonglong)length, ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {tr("Index"), name, draw ? draw->indexByteWidth : 0, + (qulonglong)state.m_IA.ibuffer.Offset, (qulonglong)length, QString()}); node->setTag( QVariant::fromValue(VBIBTag(state.m_IA.ibuffer.Buffer, draw ? draw->indexOffset : 0))); @@ -1328,8 +1337,8 @@ void D3D12PipelineStateViewer::setState() { if(ibufferUsed || ui->showEmpty->isChecked()) { - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Index", tr("No Buffer Set"), "-", "-", "-", ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {tr("Index"), tr("No Buffer Set"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag( QVariant::fromValue(VBIBTag(state.m_IA.ibuffer.Buffer, draw ? draw->indexOffset : 0))); @@ -1354,28 +1363,29 @@ void D3D12PipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString name = "Buffer " + ToQStr(v.Buffer); + QString name = tr("Buffer ") + ToQStr(v.Buffer); qulonglong length = 1; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); length = 0; } BufferDescription *buf = m_Ctx.GetBuffer(v.Buffer); if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } RDTreeWidgetItem *node = NULL; if(filledSlot) - node = new RDTreeWidgetItem({i, name, v.Stride, (qulonglong)v.Offset, length, ""}); + node = new RDTreeWidgetItem({i, name, v.Stride, (qulonglong)v.Offset, length, QString()}); else - node = new RDTreeWidgetItem({i, "No Buffer Set", "-", "-", "-", ""}); + node = + new RDTreeWidgetItem({i, tr("No Buffer Set"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag(QVariant::fromValue(VBIBTag(v.Buffer, v.Offset))); @@ -1420,24 +1430,25 @@ void D3D12PipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString name = "Buffer " + ToQStr(s.Buffer); + QString name = tr("Buffer ") + ToQStr(s.Buffer); qulonglong length = 0; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); } BufferDescription *buf = m_Ctx.GetBuffer(s.Buffer); if(buf) { - name = buf->name; + name = ToQStr(buf->name); if(length == 0) length = buf->length; } - RDTreeWidgetItem *node = new RDTreeWidgetItem({i, name, length, (qulonglong)s.Offset, ""}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({i, name, length, (qulonglong)s.Offset, QString()}); node->setTag(QVariant::fromValue(s.Buffer)); @@ -1562,11 +1573,11 @@ void D3D12PipelineStateViewer::setState() ToQStr(blend.Logic), - QString("%1%2%3%4") - .arg((blend.WriteMask & 0x1) == 0 ? "_" : "R") - .arg((blend.WriteMask & 0x2) == 0 ? "_" : "G") - .arg((blend.WriteMask & 0x4) == 0 ? "_" : "B") - .arg((blend.WriteMask & 0x8) == 0 ? "_" : "A")}); + QFormatStr("%1%2%3%4") + .arg((blend.WriteMask & 0x1) == 0 ? lit("_") : lit("R")) + .arg((blend.WriteMask & 0x2) == 0 ? lit("_") : lit("G")) + .arg((blend.WriteMask & 0x4) == 0 ? lit("_") : lit("B")) + .arg((blend.WriteMask & 0x8) == 0 ? lit("_") : lit("A"))}); if(!filledSlot) setEmptyRow(node); @@ -1587,7 +1598,7 @@ void D3D12PipelineStateViewer::setState() ui->alphaToCoverage->setPixmap(state.m_OM.m_BlendState.AlphaToCoverage ? tick : cross); ui->independentBlend->setPixmap(state.m_OM.m_BlendState.IndependentBlend ? tick : cross); - ui->blendFactor->setText(QString("%1, %2, %3, %4") + ui->blendFactor->setText(QFormatStr("%1, %2, %3, %4") .arg(state.m_OM.m_BlendState.BlendFactor[0], 2) .arg(state.m_OM.m_BlendState.BlendFactor[1], 2) .arg(state.m_OM.m_BlendState.BlendFactor[2], 2) @@ -1599,21 +1610,21 @@ void D3D12PipelineStateViewer::setState() ui->stencilEnabled->setPixmap(state.m_OM.m_State.StencilEnable ? tick : cross); ui->stencilReadMask->setText( - QString("%1").arg(state.m_OM.m_State.StencilReadMask, 2, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_State.StencilReadMask, 2, 16, QLatin1Char('0')).toUpper()); ui->stencilWriteMask->setText( - QString("%1").arg(state.m_OM.m_State.StencilWriteMask, 2, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_State.StencilWriteMask, 2, 16, QLatin1Char('0')).toUpper()); ui->stencilRef->setText( - QString("%1").arg(state.m_OM.m_State.StencilRef, 2, 16, QChar('0')).toUpper()); + QFormatStr("%1").arg(state.m_OM.m_State.StencilRef, 2, 16, QLatin1Char('0')).toUpper()); ui->stencils->setUpdatesEnabled(false); ui->stencils->clear(); ui->stencils->addTopLevelItem( - new RDTreeWidgetItem({"Front", ToQStr(state.m_OM.m_State.m_FrontFace.Func), + new RDTreeWidgetItem({tr("Front"), ToQStr(state.m_OM.m_State.m_FrontFace.Func), ToQStr(state.m_OM.m_State.m_FrontFace.FailOp), ToQStr(state.m_OM.m_State.m_FrontFace.DepthFailOp), ToQStr(state.m_OM.m_State.m_FrontFace.PassOp)})); ui->stencils->addTopLevelItem(new RDTreeWidgetItem( - {"Back", ToQStr(state.m_OM.m_State.m_BackFace.Func), + {tr("Back"), ToQStr(state.m_OM.m_State.m_BackFace.Func), ToQStr(state.m_OM.m_State.m_BackFace.FailOp), ToQStr(state.m_OM.m_State.m_BackFace.DepthFailOp), ToQStr(state.m_OM.m_State.m_BackFace.PassOp)})); ui->stencils->clearSelection(); @@ -1639,9 +1650,9 @@ void D3D12PipelineStateViewer::setState() QString D3D12PipelineStateViewer::formatMembers(int indent, const QString &nameprefix, const rdctype::array &vars) { - QString indentstr(indent * 4, QChar(' ')); + QString indentstr(indent * 4, QLatin1Char(' ')); - QString ret = ""; + QString ret; int i = 0; @@ -1650,19 +1661,25 @@ QString D3D12PipelineStateViewer::formatMembers(int indent, const QString &namep if(!v.type.members.empty()) { if(i > 0) - ret += "\n"; - ret += indentstr + QString("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); - ret += indentstr + "{\n" + formatMembers(indent + 1, ToQStr(v.name) + "_", v.type.members) + - indentstr + "}\n"; + ret += lit("\n"); + ret += indentstr + lit("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); + ret += indentstr + lit("{\n") + + formatMembers(indent + 1, ToQStr(v.name) + lit("_"), v.type.members) + indentstr + + lit("}\n"); if(i < vars.count - 1) - ret += "\n"; + ret += lit("\n"); } else { - QString arr = ""; + QString arr; if(v.type.descriptor.elements > 1) - arr = QString("[%1]").arg(v.type.descriptor.elements); - ret += indentstr + ToQStr(v.type.descriptor.name) + " " + nameprefix + v.name + arr + ";\n"; + arr = QFormatStr("[%1]").arg(v.type.descriptor.elements); + ret += QFormatStr("%1%2 %3%4%5;\n") + .arg(indentstr) + .arg(ToQStr(v.type.descriptor.name)) + .arg(nameprefix) + .arg(ToQStr(v.name)) + .arg(arr); } i++; @@ -1746,7 +1763,7 @@ void D3D12PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in } } - QString format = ""; + QString format; const ShaderResource *shaderRes = NULL; @@ -1777,9 +1794,9 @@ void D3D12PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in if(!res.variableType.members.empty()) { - format = QString("// struct %1\n{\n%2}") + format = QFormatStr("// struct %1\n{\n%2}") .arg(ToQStr(res.variableType.descriptor.name)) - .arg(formatMembers(1, "", res.variableType.members)); + .arg(formatMembers(1, QString(), res.variableType.members)); } else { @@ -1787,21 +1804,21 @@ void D3D12PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in if(view.res.Format.strname.empty()) { - format = ""; + format = QString(); if(desc.rowMajorStorage) - format += "row_major "; + format += lit("row_major "); format += ToQStr(desc.type); if(desc.rows > 1 && desc.cols > 1) - format += QString("%1x%2").arg(desc.rows).arg(desc.cols); + format += QFormatStr("%1x%2").arg(desc.rows).arg(desc.cols); else if(desc.cols > 1) format += desc.cols; if(!desc.name.empty()) - format += " " + ToQStr(desc.name); + format += lit(" ") + ToQStr(desc.name); if(desc.elements > 1) - format += QString("[%1]").arg(desc.elements); + format += QFormatStr("[%1]").arg(desc.elements); } else { @@ -1811,13 +1828,13 @@ void D3D12PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in if(fmt.specialFormat == SpecialFormat::R10G10B10A2) { if(fmt.compType == CompType::UInt) - format = "uintten"; + format = lit("uintten"); if(fmt.compType == CompType::UNorm) - format = "unormten"; + format = lit("unormten"); } else if(fmt.specialFormat == SpecialFormat::R11G11B10) { - format = "floateleven"; + format = lit("floateleven"); } } else @@ -1827,47 +1844,47 @@ void D3D12PipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, in case 1: { if(fmt.compType == CompType::UNorm) - format = "unormb"; + format = lit("unormb"); if(fmt.compType == CompType::SNorm) - format = "snormb"; + format = lit("snormb"); if(fmt.compType == CompType::UInt) - format = "ubyte"; + format = lit("ubyte"); if(fmt.compType == CompType::SInt) - format = "byte"; + format = lit("byte"); break; } case 2: { if(fmt.compType == CompType::UNorm) - format = "unormh"; + format = lit("unormh"); if(fmt.compType == CompType::SNorm) - format = "snormh"; + format = lit("snormh"); if(fmt.compType == CompType::UInt) - format = "ushort"; + format = lit("ushort"); if(fmt.compType == CompType::SInt) - format = "short"; + format = lit("short"); if(fmt.compType == CompType::Float) - format = "half"; + format = lit("half"); break; } case 4: { if(fmt.compType == CompType::UNorm) - format = "unormf"; + format = lit("unormf"); if(fmt.compType == CompType::SNorm) - format = "snormf"; + format = lit("snormf"); if(fmt.compType == CompType::UInt) - format = "uint"; + format = lit("uint"); if(fmt.compType == CompType::SInt) - format = "int"; + format = lit("int"); if(fmt.compType == CompType::Float) - format = "float"; + format = lit("float"); break; } } if(view.res.BufferFlags & D3DBufferViewFlags::Raw) - format = "xint"; + format = lit("xint"); format += fmt.compCount; } @@ -2074,9 +2091,9 @@ void D3D12PipelineStateViewer::shaderEdit_clicked() if(!shaderDetails) return; - QString entryFunc = QString("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::D3D12)[0]); + QString entryFunc = lit("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::D3D12)[0]); - QString mainfile = ""; + QString mainfile; QStringMap files; @@ -2084,9 +2101,9 @@ void D3D12PipelineStateViewer::shaderEdit_clicked() if(!hasOrigSource) { - QString hlsl = "// TODO - generate stub HLSL"; + QString hlsl = lit("// TODO - generate stub HLSL"); - mainfile = "generated.hlsl"; + mainfile = lit("generated.hlsl"); files[mainfile] = hlsl; } diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index ec464a370..9e708819e 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -348,12 +348,13 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState ui->pipeFlow->setStages( { - "VTX", "VS", "TCS", "TES", "GS", "RS", "FS", "FB", "CS", + lit("VTX"), lit("VS"), lit("TCS"), lit("TES"), lit("GS"), lit("RS"), lit("FS"), lit("FB"), + lit("CS"), }, { - "Vertex Input", "Vertex Shader", "Tess. Control Shader", "Tess. Eval. Shader", - "Geometry Shader", "Rasterizer", "Fragment Shader", "Framebuffer Output", - "Compute Shader", + tr("Vertex Input"), tr("Vertex Shader"), tr("Tess. Control Shader"), + tr("Tess. Eval. Shader"), tr("Geometry Shader"), tr("Rasterizer"), tr("Fragment Shader"), + tr("Framebuffer Output"), tr("Compute Shader"), }); ui->pipeFlow->setIsolatedStage(8); // compute shader isolated @@ -478,7 +479,7 @@ void GLPipelineStateViewer::clearState() ui->viAttrs->clear(); ui->viBuffers->clear(); - ui->topology->setText(""); + ui->topology->setText(QString()); ui->primRestart->setVisible(false); ui->topologyDiagram->setPixmap(QPixmap()); @@ -503,30 +504,30 @@ void GLPipelineStateViewer::clearState() ui->frontCCW->setPixmap(tick); ui->scissorEnabled->setPixmap(tick); - ui->provoking->setText("Last"); + ui->provoking->setText(tr("Last")); ui->rasterizerDiscard->setPixmap(cross); - ui->pointSize->setText("1.0"); - ui->lineWidth->setText("1.0"); + ui->pointSize->setText(lit("1.0")); + ui->lineWidth->setText(lit("1.0")); - ui->clipSetup->setText("0,0 Lower Left, Z= -1 to 1"); - ui->clipDistance->setText("-"); + ui->clipSetup->setText(tr("0,0 Lower Left") + lit(", Z= -1 to 1")); + ui->clipDistance->setText(lit("-")); ui->depthClamp->setPixmap(tick); - ui->depthBias->setText("0.0"); - ui->slopeScaledBias->setText("0.0"); - ui->offsetClamp->setText(""); + ui->depthBias->setText(lit("0.0")); + ui->slopeScaledBias->setText(lit("0.0")); + ui->offsetClamp->setText(QString()); ui->offsetClamp->setPixmap(cross); ui->multisample->setPixmap(tick); ui->sampleShading->setPixmap(tick); - ui->minSampleShading->setText("0.0"); + ui->minSampleShading->setText(lit("0.0")); ui->alphaToOne->setPixmap(tick); ui->alphaToCoverage->setPixmap(tick); - ui->sampleCoverage->setText(""); + ui->sampleCoverage->setText(QString()); ui->sampleCoverage->setPixmap(cross); - ui->sampleMask->setText(""); + ui->sampleMask->setText(QString()); ui->sampleMask->setPixmap(cross); ui->viewports->clear(); @@ -535,13 +536,13 @@ void GLPipelineStateViewer::clearState() ui->framebuffer->clear(); ui->blends->clear(); - ui->blendFactor->setText("0.00, 0.00, 0.00, 0.00"); + ui->blendFactor->setText(lit("0.00, 0.00, 0.00, 0.00")); ui->depthEnabled->setPixmap(tick); - ui->depthFunc->setText("GREATER_EQUAL"); + ui->depthFunc->setText(lit("GREATER_EQUAL")); ui->depthWrite->setPixmap(tick); - ui->depthBounds->setText("0.0-1.0"); + ui->depthBounds->setText(lit("0.0-1.0")); ui->depthBounds->setPixmap(QPixmap()); ui->stencils->clear(); @@ -562,11 +563,11 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * } else { - QString shaderName = ToQStr(stage.stage, GraphicsAPI::OpenGL) + " Shader"; + QString shaderName = ToQStr(stage.stage, GraphicsAPI::OpenGL) + lit(" Shader"); if(!stage.customShaderName && !stage.customProgramName && !stage.customPipelineName) { - shader->setText(shaderName + " " + ToQStr(stage.Object)); + shader->setText(shaderName + lit(" ") + ToQStr(stage.Object)); } else { @@ -574,10 +575,10 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * shaderName = ToQStr(stage.ShaderName); if(stage.customProgramName) - shaderName = ToQStr(stage.ProgramName) + " - " + shaderName; + shaderName = ToQStr(stage.ProgramName) + lit(" - ") + shaderName; if(stage.customPipelineName && stage.PipelineActive) - shaderName = ToQStr(stage.PipelineName) + " - " + shaderName; + shaderName = ToQStr(stage.PipelineName) + lit(" - ") + shaderName; shader->setText(shaderName); } @@ -624,19 +625,19 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * QString slotname = QString::number(i); if(shaderInput && !shaderInput->name.empty()) - slotname += ": " + ToQStr(shaderInput->name); + slotname += lit(": ") + ToQStr(shaderInput->name); uint32_t w = 1, h = 1, d = 1; uint32_t a = 1; - QString format = "Unknown"; - QString name = "Shader Resource " + ToQStr(r.Resource); - QString typeName = "Unknown"; + QString format = lit("Unknown"); + QString name = tr("Shader Resource %1").arg(ToQStr(r.Resource)); + QString typeName = lit("Unknown"); if(!filledSlot) { - name = "Empty"; - format = "-"; - typeName = "-"; + name = lit("Empty"); + format = lit("-"); + typeName = lit("-"); w = h = d = a = 0; } @@ -649,7 +650,7 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * d = tex->depth; a = tex->arraysize; format = ToQStr(tex->format.strname); - name = tex->name; + name = ToQStr(tex->name); typeName = ToQStr(tex->resType); if(tex->format.special && (tex->format.specialFormat == SpecialFormat::D16S8 || @@ -657,14 +658,14 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * tex->format.specialFormat == SpecialFormat::D32S8)) { if(r.DepthReadChannel == 0) - format += " Depth-Read"; + format += tr(" Depth-Read"); else if(r.DepthReadChannel == 1) - format += " Stencil-Read"; + format += tr(" Stencil-Read"); } else if(r.Swizzle[0] != TextureSwizzle::Red || r.Swizzle[1] != TextureSwizzle::Green || r.Swizzle[2] != TextureSwizzle::Blue || r.Swizzle[3] != TextureSwizzle::Alpha) { - format += QString(" swizzle[%1%2%3%4]") + format += tr(" swizzle[%1%2%3%4]") .arg(ToQStr(r.Swizzle[0])) .arg(ToQStr(r.Swizzle[1])) .arg(ToQStr(r.Swizzle[2])) @@ -673,7 +674,7 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * } RDTreeWidgetItem *node = - new RDTreeWidgetItem({slotname, name, typeName, w, h, d, a, format, ""}); + new RDTreeWidgetItem({slotname, name, typeName, w, h, d, a, format, QString()}); if(!filledSlot) setEmptyRow(node); @@ -689,23 +690,25 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * QString slotname = QString::number(i); if(shaderInput && !shaderInput->name.empty()) - slotname += ": " + ToQStr(shaderInput->name); + slotname += lit(": ") + ToQStr(shaderInput->name); - QString borderColor = - QString::number(s.BorderColor[0]) + ", " + QString::number(s.BorderColor[1]) + ", " + - QString::number(s.BorderColor[2]) + ", " + QString::number(s.BorderColor[3]); + QString borderColor = QFormatStr("%1, %2, %3, %4") + .arg(s.BorderColor[0]) + .arg(s.BorderColor[1]) + .arg(s.BorderColor[2]) + .arg(s.BorderColor[3]); - QString addressing = ""; + QString addressing; - QString addPrefix = ""; - QString addVal = ""; + QString addPrefix; + QString addVal; QString addr[] = {ToQStr(s.AddressS), ToQStr(s.AddressT), ToQStr(s.AddressR)}; // arrange like either STR: WRAP or ST: WRAP, R: CLAMP for(int a = 0; a < 3; a++) { - const QString str[] = {"S", "T", "R"}; + const QString str[] = {lit("S"), lit("T"), lit("R")}; QString prefix = str[a]; if(a == 0 || addr[a] == addr[a - 1]) @@ -714,38 +717,39 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * } else { - addressing += addPrefix + ": " + addVal + ", "; + addressing += QFormatStr("%1: %2, ").arg(addPrefix).arg(addVal); addPrefix = prefix; } addVal = addr[a]; } - addressing += addPrefix + ": " + addVal; + addressing += addPrefix + lit(": ") + addVal; if(s.UseBorder()) - addressing += QString("<%1>").arg(borderColor); + addressing += QFormatStr("<%1>").arg(borderColor); if(r.ResType == TextureDim::TextureCube || r.ResType == TextureDim::TextureCubeArray) { - addressing += s.SeamlessCube ? " Seamless" : " Non-Seamless"; + addressing += s.SeamlessCube ? tr(" Seamless") : tr(" Non-Seamless"); } QString filter = ToQStr(s.Filter); if(s.MaxAniso > 1) - filter += QString(" Aniso%1x").arg(s.MaxAniso); + filter += lit(" Aniso%1x").arg(s.MaxAniso); if(s.Filter.func == FilterFunc::Comparison) - filter += QString(" (%1)").arg(ToQStr(s.Comparison)); + filter += QFormatStr(" (%1)").arg(ToQStr(s.Comparison)); else if(s.Filter.func != FilterFunc::Normal) - filter += QString(" (%1)").arg(ToQStr(s.Filter.func)); + filter += QFormatStr(" (%1)").arg(ToQStr(s.Filter.func)); - RDTreeWidgetItem *node = - new RDTreeWidgetItem({slotname, addressing, filter, - (s.MinLOD == -FLT_MAX ? "0" : QString::number(s.MinLOD)) + " - " + - (s.MaxLOD == FLT_MAX ? "FLT_MAX" : QString::number(s.MaxLOD)), - s.MipLODBias}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {slotname, addressing, filter, + QFormatStr("%1 - %2") + .arg(s.MinLOD == -FLT_MAX ? lit("0") : QString::number(s.MinLOD)) + .arg(s.MaxLOD == FLT_MAX ? lit("FLT_MAX") : QString::number(s.MaxLOD)), + s.MipLODBias}); if(!filledSlot) setEmptyRow(node); @@ -788,28 +792,28 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * int numvars = shaderCBuf.variables.count; ulong byteSize = (ulong)shaderCBuf.byteSize; - QString slotname = "Uniforms"; - QString name = ""; + QString slotname = tr("Uniforms"); + QString name; QString sizestr = tr("%1 Variables").arg(numvars); - QString byterange = ""; + QString byterange; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); length = 0; } if(b) { - slotname = QString("%1: %2").arg(bindPoint).arg(ToQStr(shaderCBuf.name)); - name = "UBO " + ToQStr(b->Resource); + slotname = QFormatStr("%1: %2").arg(bindPoint).arg(ToQStr(shaderCBuf.name)); + name = lit("UBO ") + ToQStr(b->Resource); offset = b->Offset; length = b->Size; BufferDescription *buf = m_Ctx.GetBuffer(b->Resource); if(buf) { - name = buf->name; + name = ToQStr(buf->name); if(length == 0) length = buf->length; } @@ -823,10 +827,10 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * if(length < byteSize) filledSlot = false; - byterange = QString("%1 - %2").arg(offset).arg(offset + length); + byterange = QFormatStr("%1 - %2").arg(offset).arg(offset + length); } - RDTreeWidgetItem *node = new RDTreeWidgetItem({slotname, name, byterange, sizestr, ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem({slotname, name, byterange, sizestr, QString()}); node->setTag(QVariant::fromValue(i)); @@ -893,24 +897,25 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * if(showNode(usedSlot, filledSlot)) { - QString binding = readWriteType == GLReadWriteType::Image - ? "Image" - : readWriteType == GLReadWriteType::Atomic - ? "Atomic" - : readWriteType == GLReadWriteType::SSBO ? "SSBO" : "Unknown"; + QString binding = + readWriteType == GLReadWriteType::Image + ? tr("Image") + : readWriteType == GLReadWriteType::Atomic + ? tr("Atomic") + : readWriteType == GLReadWriteType::SSBO ? tr("SSBO") : tr("Unknown"); - QString slotname = QString("%1: %2").arg(bindPoint).arg(ToQStr(res.name)); - QString name = ""; - QString dimensions = ""; - QString format = "-"; - QString access = "Read/Write"; + QString slotname = QFormatStr("%1: %2").arg(bindPoint).arg(ToQStr(res.name)); + QString name; + QString dimensions; + QString format = lit("-"); + QString access = tr("Read/Write"); if(im) { if(im->readAllowed && !im->writeAllowed) - access = "Read-Only"; + access = tr("Read-Only"); if(!im->readAllowed && im->writeAllowed) - access = "Write-Only"; - format = im->Format.strname; + access = tr("Write-Only"); + format = ToQStr(im->Format.strname); } QVariant tag; @@ -922,23 +927,23 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * if(tex->dimension == 1) { if(tex->arraysize > 1) - dimensions = QString("%1[%2]").arg(tex->width).arg(tex->arraysize); + dimensions = QFormatStr("%1[%2]").arg(tex->width).arg(tex->arraysize); else - dimensions = QString("%1").arg(tex->width); + dimensions = QFormatStr("%1").arg(tex->width); } else if(tex->dimension == 2) { if(tex->arraysize > 1) - dimensions = QString("%1x%2[%3]").arg(tex->width).arg(tex->height).arg(tex->arraysize); + dimensions = QFormatStr("%1x%2[%3]").arg(tex->width).arg(tex->height).arg(tex->arraysize); else - dimensions = QString("%1x%2").arg(tex->width).arg(tex->height); + dimensions = QFormatStr("%1x%2").arg(tex->width).arg(tex->height); } else if(tex->dimension == 3) { - dimensions = QString("%1x%2x%3").arg(tex->width).arg(tex->height).arg(tex->depth); + dimensions = QFormatStr("%1x%2x%3").arg(tex->width).arg(tex->height).arg(tex->depth); } - name = tex->name; + name = ToQStr(tex->name); tag = QVariant::fromValue(id); } @@ -967,13 +972,13 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * if(!filledSlot) { - name = "Empty"; - dimensions = "-"; - access = "-"; + name = tr("Empty"); + dimensions = lit("-"); + access = lit("-"); } RDTreeWidgetItem *node = - new RDTreeWidgetItem({binding, slotname, name, dimensions, format, access, ""}); + new RDTreeWidgetItem({binding, slotname, name, dimensions, format, access, QString()}); node->setTag(tag); @@ -996,15 +1001,15 @@ void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, QLabel * QString GLPipelineStateViewer::MakeGenericValueString(uint32_t compCount, CompType compType, const GLPipe::VertexAttribute &val) { - QString ret = ""; + QString ret; if(compCount == 1) - ret = "<%1>"; + ret = QFormatStr("<%1>"); else if(compCount == 2) - ret = "<%1, %2>"; + ret = QFormatStr("<%1, %2>"); else if(compCount == 3) - ret = "<%1, %2, %3>"; + ret = QFormatStr("<%1, %2, %3>"); else if(compCount == 4) - ret = "<%1, %2, %3, %4>"; + ret = QFormatStr("<%1, %2, %3, %4>"); if(compType == CompType::UInt) { @@ -1100,7 +1105,7 @@ void GLPipelineStateViewer::setState() if(attrib >= 0 && attrib < state.m_VS.ShaderDetails->InputSig.count) { - name = state.m_VS.ShaderDetails->InputSig[attrib].varName; + name = ToQStr(state.m_VS.ShaderDetails->InputSig[attrib].varName); compCount = state.m_VS.ShaderDetails->InputSig[attrib].compCount; compType = state.m_VS.ShaderDetails->InputSig[attrib].compType; usedSlot = true; @@ -1109,7 +1114,7 @@ void GLPipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString genericVal = "Generic=" + MakeGenericValueString(compCount, compType, a); + QString genericVal = tr("Generic=") + MakeGenericValueString(compCount, compType, a); RDTreeWidgetItem *node = new RDTreeWidgetItem( {i, a.Enabled ? tr("Enabled") : tr("Disabled"), name, @@ -1136,7 +1141,7 @@ void GLPipelineStateViewer::setState() int numCPs = PatchList_Count(topo); if(numCPs > 0) { - ui->topology->setText(QString("PatchList (%1 Control Points)").arg(numCPs)); + ui->topology->setText(tr("PatchList (%1 Control Points)").arg(numCPs)); } else { @@ -1150,9 +1155,9 @@ void GLPipelineStateViewer::setState() ui->primRestart->setVisible(true); if(state.m_VtxIn.primitiveRestart) ui->primRestart->setText( - QString("Restart Idx: 0x%1").arg(state.m_VtxIn.restartIndex, 8, 16, QChar('0')).toUpper()); + tr("Restart Idx: 0x%1").arg(state.m_VtxIn.restartIndex, 8, 16, QLatin1Char('0')).toUpper()); else - ui->primRestart->setText("Restart Idx: Disabled"); + ui->primRestart->setText(tr("Restart Idx: Disabled")); } else { @@ -1189,7 +1194,7 @@ void GLPipelineStateViewer::setState() { if(ibufferUsed || showDisabled) { - QString name = "Buffer " + ToQStr(state.m_VtxIn.ibuffer); + QString name = tr("Buffer ") + ToQStr(state.m_VtxIn.ibuffer); uint64_t length = 1; if(!ibufferUsed) @@ -1199,12 +1204,13 @@ void GLPipelineStateViewer::setState() if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } - RDTreeWidgetItem *node = new RDTreeWidgetItem( - {"Element", name, 0, 0, draw ? draw->indexByteWidth : 0, (qulonglong)length, ""}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({tr("Element"), name, 0, 0, draw ? draw->indexByteWidth : 0, + (qulonglong)length, QString()}); node->setTag(QVariant::fromValue(VBIBTag(state.m_VtxIn.ibuffer, draw ? draw->indexOffset : 0))); @@ -1221,8 +1227,8 @@ void GLPipelineStateViewer::setState() { if(ibufferUsed || showEmpty) { - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Element", tr("No Buffer Set"), "-", "-", "-", "-", ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {tr("Element"), tr("No Buffer Set"), lit("-"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag(QVariant::fromValue(VBIBTag(state.m_VtxIn.ibuffer, draw ? draw->indexOffset : 0))); @@ -1246,25 +1252,25 @@ void GLPipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString name = "Buffer " + ToQStr(v.Buffer); + QString name = tr("Buffer ") + ToQStr(v.Buffer); uint64_t length = 1; uint64_t offset = v.Offset; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); length = 0; } BufferDescription *buf = m_Ctx.GetBuffer(v.Buffer); if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } RDTreeWidgetItem *node = new RDTreeWidgetItem( - {i, name, v.Stride, (qulonglong)offset, v.Divisor, (qulonglong)length, ""}); + {i, name, v.Stride, (qulonglong)offset, v.Divisor, (qulonglong)length, QString()}); node->setTag(QVariant::fromValue(VBIBTag(v.Buffer, v.Offset))); @@ -1309,25 +1315,25 @@ void GLPipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { - QString name = "Buffer " + ToQStr(state.m_Feedback.BufferBinding[i]); + QString name = tr("Buffer ") + ToQStr(state.m_Feedback.BufferBinding[i]); qulonglong length = state.m_Feedback.Size[i]; if(!filledSlot) { - name = "Empty"; + name = tr("Empty"); } BufferDescription *buf = m_Ctx.GetBuffer(state.m_Feedback.BufferBinding[i]); if(buf) { - name = buf->name; + name = ToQStr(buf->name); if(length == 0) length = buf->length; } - RDTreeWidgetItem *node = - new RDTreeWidgetItem({i, name, length, (qulonglong)state.m_Feedback.Offset[i], ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {i, name, length, (qulonglong)state.m_Feedback.Offset[i], QString()}); node->setTag(QVariant::fromValue(state.m_Feedback.BufferBinding[i])); @@ -1371,7 +1377,7 @@ void GLPipelineStateViewer::setState() { QString indexstring; if(prev < i - 1) - indexstring = QString("%1-%2").arg(prev).arg(i - 1); + indexstring = QFormatStr("%1-%2").arg(prev).arg(i - 1); else indexstring = QString::number(prev); @@ -1402,7 +1408,7 @@ void GLPipelineStateViewer::setState() { QString indexstring; if(prev < state.m_Rasterizer.Viewports.count - 1) - indexstring = QString("%1-%2").arg(prev).arg(state.m_Rasterizer.Viewports.count - 1); + indexstring = QFormatStr("%1-%2").arg(prev).arg(state.m_Rasterizer.Viewports.count - 1); else indexstring = QString::number(prev); @@ -1440,7 +1446,7 @@ void GLPipelineStateViewer::setState() { QString indexstring; if(prev < i - 1) - indexstring = QString("%1-%2").arg(prev).arg(i - 1); + indexstring = QFormatStr("%1-%2").arg(prev).arg(i - 1); else indexstring = QString::number(prev); @@ -1472,7 +1478,7 @@ void GLPipelineStateViewer::setState() { QString indexstring; if(prev < state.m_Rasterizer.Scissors.count - 1) - indexstring = QString("%1-%2").arg(prev).arg(state.m_Rasterizer.Scissors.count - 1); + indexstring = QFormatStr("%1-%2").arg(prev).arg(state.m_Rasterizer.Scissors.count - 1); else indexstring = QString::number(prev); @@ -1501,7 +1507,7 @@ void GLPipelineStateViewer::setState() ui->frontCCW->setPixmap(state.m_Rasterizer.m_State.FrontCCW ? tick : cross); ui->scissorEnabled->setPixmap(anyScissorEnable ? tick : cross); - ui->provoking->setText(state.m_VtxIn.provokingVertexLast ? "Last" : "First"); + ui->provoking->setText(state.m_VtxIn.provokingVertexLast ? tr("Last") : tr("First")); ui->rasterizerDiscard->setPixmap(state.m_VtxProcess.discard ? tick : cross); @@ -1511,20 +1517,20 @@ void GLPipelineStateViewer::setState() ui->pointSize->setText(Formatter::Format(state.m_Rasterizer.m_State.PointSize)); ui->lineWidth->setText(Formatter::Format(state.m_Rasterizer.m_State.LineWidth)); - QString clipSetup = ""; + QString clipSetup; if(state.m_VtxProcess.clipOriginLowerLeft) - clipSetup += "0,0 Lower Left"; + clipSetup += tr("0,0 Lower Left"); else - clipSetup += "0,0 Upper Left"; - clipSetup += ", "; + clipSetup += tr("0,0 Upper Left"); + clipSetup += lit(", "); if(state.m_VtxProcess.clipNegativeOneToOne) - clipSetup += "Z= -1 to 1"; + clipSetup += lit("Z= -1 to 1"); else - clipSetup += "Z= 0 to 1"; + clipSetup += lit("Z= 0 to 1"); ui->clipSetup->setText(clipSetup); - QString clipDistances = ""; + QString clipDistances; int numDist = 0; for(int i = 0; i < (int)ARRAY_COUNT(state.m_VtxProcess.clipPlanes); i++) @@ -1532,7 +1538,7 @@ void GLPipelineStateViewer::setState() if(state.m_VtxProcess.clipPlanes[i]) { if(numDist > 0) - clipDistances += ", "; + clipDistances += lit(", "); clipDistances += QString::number(i); numDist++; @@ -1540,9 +1546,9 @@ void GLPipelineStateViewer::setState() } if(numDist == 0) - clipDistances = "-"; + clipDistances = lit("-"); else - clipDistances += " enabled"; + clipDistances += tr(" enabled"); ui->clipDistance->setText(clipDistances); @@ -1552,7 +1558,7 @@ void GLPipelineStateViewer::setState() if(state.m_Rasterizer.m_State.OffsetClamp == 0.0f || qIsNaN(state.m_Rasterizer.m_State.OffsetClamp)) { - ui->offsetClamp->setText(""); + ui->offsetClamp->setText(QString()); ui->offsetClamp->setPixmap(cross); } else @@ -1570,25 +1576,27 @@ void GLPipelineStateViewer::setState() { QString sampleCoverage = Formatter::Format(state.m_Rasterizer.m_State.SampleCoverageValue); if(state.m_Rasterizer.m_State.SampleCoverageInvert) - sampleCoverage += " inverted"; + sampleCoverage += tr(" inverted"); ui->sampleCoverage->setText(sampleCoverage); ui->sampleCoverage->setPixmap(QPixmap()); } else { - ui->sampleCoverage->setText(""); + ui->sampleCoverage->setText(QString()); ui->sampleCoverage->setPixmap(cross); } if(state.m_Rasterizer.m_State.SampleMask) { ui->sampleMask->setText( - QString("%1").arg(state.m_Rasterizer.m_State.SampleMaskValue, 8, 16, QChar('0')).toUpper()); + QFormatStr("%1") + .arg(state.m_Rasterizer.m_State.SampleMaskValue, 8, 16, QLatin1Char('0')) + .toUpper()); ui->sampleMask->setPixmap(QPixmap()); } else { - ui->sampleMask->setText(""); + ui->sampleMask->setText(QString()); ui->sampleMask->setPixmap(cross); } @@ -1620,15 +1628,15 @@ void GLPipelineStateViewer::setState() { uint32_t w = 1, h = 1, d = 1; uint32_t a = 1; - QString format = "Unknown"; - QString name = "Texture " + ToQStr(p); - QString typeName = "Unknown"; + QString format = tr("Unknown"); + QString name = tr("Texture ") + ToQStr(p); + QString typeName = tr("Unknown"); if(p == ResourceId()) { - name = "Empty"; - format = "-"; - typeName = "-"; + name = tr("Empty"); + format = lit("-"); + typeName = lit("-"); w = h = d = a = 0; } @@ -1640,11 +1648,11 @@ void GLPipelineStateViewer::setState() d = tex->depth; a = tex->arraysize; format = ToQStr(tex->format.strname); - name = tex->name; + name = ToQStr(tex->name); typeName = ToQStr(tex->resType); if(tex->format.srgbCorrected && !state.m_FB.FramebufferSRGB) - name += " (GL_FRAMEBUFFER_SRGB = 0)"; + name += lit(" (GL_FRAMEBUFFER_SRGB = 0)"); if(!tex->customName && state.m_FS.ShaderDetails) { @@ -1654,7 +1662,7 @@ void GLPipelineStateViewer::setState() (state.m_FS.ShaderDetails->OutputSig[s].systemValue == ShaderBuiltin::Undefined || state.m_FS.ShaderDetails->OutputSig[s].systemValue == ShaderBuiltin::ColorOutput)) { - name = QString("<%1>").arg(ToQStr(state.m_FS.ShaderDetails->OutputSig[s].varName)); + name = QFormatStr("<%1>").arg(ToQStr(state.m_FS.ShaderDetails->OutputSig[s].varName)); } } } @@ -1670,7 +1678,8 @@ void GLPipelineStateViewer::setState() .arg(ToQStr(r->Swizzle[3])); } - RDTreeWidgetItem *node = new RDTreeWidgetItem({i, name, typeName, w, h, d, a, format, ""}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({i, name, typeName, w, h, d, a, format, QString()}); if(tex) node->setTag(QVariant::fromValue(p)); @@ -1704,15 +1713,15 @@ void GLPipelineStateViewer::setState() { uint32_t w = 1, h = 1, d = 1; uint32_t a = 1; - QString format = "Unknown"; - QString name = "Texture " + ToQStr(ds); - QString typeName = "Unknown"; + QString format = tr("Unknown"); + QString name = tr("Texture ") + ToQStr(ds); + QString typeName = tr("Unknown"); if(ds == ResourceId()) { - name = "Empty"; - format = "-"; - typeName = "-"; + name = tr("Empty"); + format = lit("-"); + typeName = lit("-"); w = h = d = a = 0; } @@ -1724,13 +1733,13 @@ void GLPipelineStateViewer::setState() d = tex->depth; a = tex->arraysize; format = ToQStr(tex->format.strname); - name = tex->name; + name = ToQStr(tex->name); typeName = ToQStr(tex->resType); } - QString slot = "Depth"; + QString slot = tr("Depth"); if(i == 1) - slot = "Stencil"; + slot = tr("Stencil"); bool depthstencil = false; @@ -1738,11 +1747,11 @@ void GLPipelineStateViewer::setState() state.m_FB.m_DrawFBO.Depth.Obj != ResourceId()) { depthstencil = true; - slot = "Depthstencil"; + slot = tr("Depth-Stencil"); } RDTreeWidgetItem *node = - new RDTreeWidgetItem({slot, name, typeName, w, h, d, a, format, ""}); + new RDTreeWidgetItem({slot, name, typeName, w, h, d, a, format, QString()}); if(tex) node->setTag(QVariant::fromValue(ds)); @@ -1787,15 +1796,15 @@ void GLPipelineStateViewer::setState() { node = new RDTreeWidgetItem({i, tr("True"), - "-", "-", ToQStr(blend.Logic), + lit("-"), lit("-"), ToQStr(blend.Logic), - "-", "-", "-", + lit("-"), lit("-"), lit("-"), - QString("%1%2%3%4") - .arg((blend.WriteMask & 0x1) == 0 ? "_" : "R") - .arg((blend.WriteMask & 0x2) == 0 ? "_" : "G") - .arg((blend.WriteMask & 0x4) == 0 ? "_" : "B") - .arg((blend.WriteMask & 0x8) == 0 ? "_" : "A")}); + QFormatStr("%1%2%3%4") + .arg((blend.WriteMask & 0x1) == 0 ? lit("_") : lit("R")) + .arg((blend.WriteMask & 0x2) == 0 ? lit("_") : lit("G")) + .arg((blend.WriteMask & 0x4) == 0 ? lit("_") : lit("B")) + .arg((blend.WriteMask & 0x8) == 0 ? lit("_") : lit("A"))}); } else { @@ -1808,11 +1817,11 @@ void GLPipelineStateViewer::setState() ToQStr(blend.m_AlphaBlend.Source), ToQStr(blend.m_AlphaBlend.Destination), ToQStr(blend.m_AlphaBlend.Operation), - QString("%1%2%3%4") - .arg((blend.WriteMask & 0x1) == 0 ? "_" : "R") - .arg((blend.WriteMask & 0x2) == 0 ? "_" : "G") - .arg((blend.WriteMask & 0x4) == 0 ? "_" : "B") - .arg((blend.WriteMask & 0x8) == 0 ? "_" : "A")}); + QFormatStr("%1%2%3%4") + .arg((blend.WriteMask & 0x1) == 0 ? lit("_") : lit("R")) + .arg((blend.WriteMask & 0x2) == 0 ? lit("_") : lit("G")) + .arg((blend.WriteMask & 0x4) == 0 ? lit("_") : lit("B")) + .arg((blend.WriteMask & 0x8) == 0 ? lit("_") : lit("A"))}); } if(!filledSlot) @@ -1831,7 +1840,7 @@ void GLPipelineStateViewer::setState() ui->blends->setUpdatesEnabled(true); ui->blends->verticalScrollBar()->setValue(vs); - ui->blendFactor->setText(QString("%1, %2, %3, %4") + ui->blendFactor->setText(QFormatStr("%1, %2, %3, %4") .arg(state.m_FB.m_Blending.BlendFactor[0], 2) .arg(state.m_FB.m_Blending.BlendFactor[1], 2) .arg(state.m_FB.m_Blending.BlendFactor[2], 2) @@ -1843,13 +1852,13 @@ void GLPipelineStateViewer::setState() if(state.m_DepthState.DepthBounds) { - ui->depthBounds->setText(Formatter::Format(state.m_DepthState.NearBound) + "-" + + ui->depthBounds->setText(Formatter::Format(state.m_DepthState.NearBound) + lit("-") + Formatter::Format(state.m_DepthState.FarBound)); ui->depthBounds->setPixmap(QPixmap()); } else { - ui->depthBounds->setText(""); + ui->depthBounds->setText(QString()); ui->depthBounds->setPixmap(cross); } @@ -1858,28 +1867,29 @@ void GLPipelineStateViewer::setState() if(state.m_StencilState.StencilEnable) { ui->stencils->addTopLevelItem(new RDTreeWidgetItem( - {"Front", ToQStr(state.m_StencilState.m_FrontFace.Func), + {tr("Front"), ToQStr(state.m_StencilState.m_FrontFace.Func), ToQStr(state.m_StencilState.m_FrontFace.FailOp), ToQStr(state.m_StencilState.m_FrontFace.DepthFailOp), ToQStr(state.m_StencilState.m_FrontFace.PassOp), - QString("%1").arg(state.m_StencilState.m_FrontFace.WriteMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.m_StencilState.m_FrontFace.ValueMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.m_StencilState.m_FrontFace.Ref, 2, 16, QChar('0')).toUpper()})); + QFormatStr("%1").arg(state.m_StencilState.m_FrontFace.WriteMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.m_StencilState.m_FrontFace.ValueMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.m_StencilState.m_FrontFace.Ref, 2, 16, QLatin1Char('0')).toUpper()})); ui->stencils->addTopLevelItem(new RDTreeWidgetItem( - {"Back", ToQStr(state.m_StencilState.m_BackFace.Func), + {tr("Back"), ToQStr(state.m_StencilState.m_BackFace.Func), ToQStr(state.m_StencilState.m_BackFace.FailOp), ToQStr(state.m_StencilState.m_BackFace.DepthFailOp), ToQStr(state.m_StencilState.m_BackFace.PassOp), - QString("%1").arg(state.m_StencilState.m_BackFace.WriteMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.m_StencilState.m_BackFace.ValueMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.m_StencilState.m_BackFace.Ref, 2, 16, QChar('0')).toUpper()})); + QFormatStr("%1").arg(state.m_StencilState.m_BackFace.WriteMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.m_StencilState.m_BackFace.ValueMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.m_StencilState.m_BackFace.Ref, 2, 16, QLatin1Char('0')).toUpper()})); } else { - ui->stencils->addTopLevelItem( - new RDTreeWidgetItem({"Front", "-", "-", "-", "-", "-", "-", "-"})); - ui->stencils->addTopLevelItem(new RDTreeWidgetItem({"Back", "-", "-", "-", "-", "-", "-", "-"})); + ui->stencils->addTopLevelItem(new RDTreeWidgetItem( + {tr("Front"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-")})); + ui->stencils->addTopLevelItem(new RDTreeWidgetItem( + {tr("Back"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-")})); } ui->stencils->clearSelection(); ui->stencils->setUpdatesEnabled(true); @@ -1904,9 +1914,9 @@ void GLPipelineStateViewer::setState() QString GLPipelineStateViewer::formatMembers(int indent, const QString &nameprefix, const rdctype::array &vars) { - QString indentstr(indent * 4, QChar(' ')); + QString indentstr(indent * 4, QLatin1Char(' ')); - QString ret = ""; + QString ret; int i = 0; @@ -1915,19 +1925,25 @@ QString GLPipelineStateViewer::formatMembers(int indent, const QString &namepref if(!v.type.members.empty()) { if(i > 0) - ret += "\n"; - ret += indentstr + QString("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); - ret += indentstr + "{\n" + formatMembers(indent + 1, ToQStr(v.name) + "_", v.type.members) + - indentstr + "}\n"; + ret += lit("\n"); + ret += indentstr + QFormatStr("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); + ret += indentstr + lit("{\n") + + formatMembers(indent + 1, ToQStr(v.name) + lit("_"), v.type.members) + indentstr + + lit("}\n"); if(i < vars.count - 1) - ret += "\n"; + ret += lit("\n"); } else { - QString arr = ""; + QString arr; if(v.type.descriptor.elements > 1) - arr = QString("[%1]").arg(v.type.descriptor.elements); - ret += indentstr + ToQStr(v.type.descriptor.name) + " " + nameprefix + v.name + arr + ";\n"; + arr = QFormatStr("[%1]").arg(v.type.descriptor.elements); + ret += QFormatStr("%1%2 %3%4%5;\n") + .arg(indentstr) + .arg(ToQStr(v.type.descriptor.name)) + .arg(nameprefix) + .arg(ToQStr(v.name)) + .arg(arr); } i++; @@ -1974,41 +1990,42 @@ void GLPipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, int c const ShaderResource &shaderRes = stage->ShaderDetails->ReadWriteResources[buf.bindPoint]; - QString format = QString("// struct %1\n").arg(ToQStr(shaderRes.variableType.descriptor.name)); + QString format = lit("// struct %1\n").arg(ToQStr(shaderRes.variableType.descriptor.name)); if(shaderRes.variableType.members.count > 1) { - format += "// members skipped as they are fixed size:\n"; + format += tr("// members skipped as they are fixed size:\n"); for(int i = 0; i < shaderRes.variableType.members.count - 1; i++) - format += QString("%1 %2;\n") + format += QFormatStr("%1 %2;\n") .arg(ToQStr(shaderRes.variableType.members[i].type.descriptor.name)) .arg(ToQStr(shaderRes.variableType.members[i].name)); } if(!shaderRes.variableType.members.empty()) { - format += - "{\n" + formatMembers(1, "", shaderRes.variableType.members.back().type.members) + "}"; + format += lit("{\n") + + formatMembers(1, QString(), shaderRes.variableType.members.back().type.members) + + lit("}"); } else { const auto &desc = shaderRes.variableType.descriptor; - format = ""; + format = QString(); if(desc.rowMajorStorage) - format += "row_major "; + format += lit("row_major "); format += ToQStr(desc.type); if(desc.rows > 1 && desc.cols > 1) - format += QString("%1x%2").arg(desc.rows).arg(desc.cols); + format += QFormatStr("%1x%2").arg(desc.rows).arg(desc.cols); else if(desc.cols > 1) format += desc.cols; if(!desc.name.empty()) - format += " " + ToQStr(desc.name); + format += lit(" ") + ToQStr(desc.name); if(desc.elements > 1) - format += QString("[%1]").arg(desc.elements); + format += QFormatStr("[%1]").arg(desc.elements); } if(buf.ID != ResourceId()) @@ -2197,9 +2214,9 @@ void GLPipelineStateViewer::shaderEdit_clicked() if(!shaderDetails) return; - QString entryFunc = QString("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::OpenGL)[0]); + QString entryFunc = lit("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::OpenGL)[0]); - QString mainfile = ""; + QString mainfile; QStringMap files; @@ -2207,9 +2224,9 @@ void GLPipelineStateViewer::shaderEdit_clicked() if(!hasOrigSource) { - QString glsl = "// TODO - disassemble SPIR-V"; + QString glsl = lit("// TODO - disassemble SPIR-V"); - mainfile = "generated.glsl"; + mainfile = lit("generated.glsl"); files[mainfile] = glsl; } diff --git a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp index 52493b203..9cbfbe148 100644 --- a/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp @@ -92,30 +92,30 @@ QVariant PipelineStateViewer::persistData() QVariantMap state; if(m_Current == m_D3D11) - state["type"] = "D3D11"; + state[lit("type")] = lit("D3D11"); else if(m_Current == m_D3D12) - state["type"] = "D3D12"; + state[lit("type")] = lit("D3D12"); else if(m_Current == m_GL) - state["type"] = "GL"; + state[lit("type")] = lit("GL"); else if(m_Current == m_Vulkan) - state["type"] = "Vulkan"; + state[lit("type")] = lit("Vulkan"); else - state["type"] = ""; + state[lit("type")] = lit(""); return state; } void PipelineStateViewer::setPersistData(const QVariant &persistData) { - QString str = persistData.toMap()["type"].toString(); + QString str = persistData.toMap()[lit("type")].toString(); - if(str == "D3D11") + if(str == lit("D3D11")) setToD3D11(); - else if(str == "D3D12") + else if(str == lit("D3D12")) setToD3D12(); - else if(str == "GL") + else if(str == lit("GL")) setToGL(); - else if(str == "Vulkan") + else if(str == lit("Vulkan")) setToVulkan(); } @@ -201,7 +201,7 @@ bool PipelineStateViewer::PrepareShaderEditing(const ShaderReflection *shaderDet QString filename = ToQStr(s.first); if(uniqueFiles.contains(filename.toLower())) { - qWarning() << "Duplicate full filename" << ToQStr(s.first); + qWarning() << lit("Duplicate full filename") << ToQStr(s.first); continue; } uniqueFiles.push_back(filename.toLower()); @@ -236,20 +236,21 @@ void PipelineStateViewer::EditShader(ShaderStage shaderType, ResourceId id, // possible as fxc only seems to include the source for files if something in // that file was included in the compiled output. So you might end up with // dangling #includes - we just have to ignore them - int offs = compileSource.indexOf("#include"); + int offs = compileSource.indexOf(lit("#include")); while(offs >= 0) { // search back to ensure this is a valid #include (ie. not in a comment). // Must only see whitespace before, then a newline. int ws = qMax(0, offs - 1); - while(ws >= 0 && (compileSource[ws] == ' ' || compileSource[ws] == '\t')) + while(ws >= 0 && + (compileSource[ws] == QLatin1Char(' ') || compileSource[ws] == QLatin1Char('\t'))) ws--; // not valid? jump to next. - if(ws > 0 && compileSource[ws] != '\n') + if(ws > 0 && compileSource[ws] != QLatin1Char('\n')) { - offs = compileSource.indexOf("#include", offs + 1); + offs = compileSource.indexOf(lit("#include"), offs + 1); continue; } @@ -257,7 +258,7 @@ void PipelineStateViewer::EditShader(ShaderStage shaderType, ResourceId id, bool tail = true; - int lineEnd = compileSource.indexOf("\n", start + 1); + int lineEnd = compileSource.indexOf(QLatin1Char('\n'), start + 1); if(lineEnd == -1) { lineEnd = compileSource.length(); @@ -265,23 +266,24 @@ void PipelineStateViewer::EditShader(ShaderStage shaderType, ResourceId id, } ws = offs + sizeof("#include") - 1; - while(compileSource[ws] == ' ' || compileSource[ws] == '\t') + while(compileSource[ws] == QLatin1Char(' ') || compileSource[ws] == QLatin1Char('\t')) ws++; QString line = compileSource.mid(offs, lineEnd - offs + 1); - if(compileSource[ws] != '<' && compileSource[ws] != '"') + if(compileSource[ws] != QLatin1Char('<') && compileSource[ws] != QLatin1Char('"')) { - viewer->ShowErrors("Invalid #include directive found:\r\n" + line); + viewer->ShowErrors(lit("Invalid #include directive found:\r\n") + line); return; } // find matching char, either <> or ""; - int end = compileSource.indexOf(compileSource[ws] == '"' ? '"' : '>', ws + 1); + int end = compileSource.indexOf( + compileSource[ws] == QLatin1Char('"') ? QLatin1Char('"') : QLatin1Char('>'), ws + 1); if(end == -1) { - viewer->ShowErrors("Invalid #include directive found:\r\n" + line); + viewer->ShowErrors(lit("Invalid #include directive found:\r\n") + line); return; } @@ -307,20 +309,20 @@ void PipelineStateViewer::EditShader(ShaderStage shaderType, ResourceId id, } } - if(fileText == "") - fileText = "// Can't find file " + fname + "\n"; + if(fileText.isEmpty()) + fileText = QFormatStr("// Can't find file %1\n").arg(fname); } - compileSource = compileSource.left(offs) + "\n\n" + fileText + "\n\n" + - (tail ? compileSource.mid(lineEnd + 1) : ""); + compileSource = compileSource.left(offs) + lit("\n\n") + fileText + lit("\n\n") + + (tail ? compileSource.mid(lineEnd + 1) : QString()); // need to start searching from the beginning - wasteful but allows nested includes to // work - offs = compileSource.indexOf("#include"); + offs = compileSource.indexOf(lit("#include")); } - if(updatedfiles.contains("@cmdline")) - compileSource = updatedfiles["@cmdline"] + "\n\n" + compileSource; + if(updatedfiles.contains(lit("@cmdline"))) + compileSource = updatedfiles[lit("@cmdline")] + lit("\n\n") + compileSource; // invoke off to the ReplayController to replace the log's shader // with our edited one @@ -385,7 +387,7 @@ bool PipelineStateViewer::SaveShaderFile(const ShaderReflection *shader) QString filename = RDDialog::getSaveFileName(this, tr("Save Shader As"), QString(), filter); - if(filename != "") + if(!filename.isEmpty()) { QDir dirinfo = QFileInfo(filename).dir(); if(dirinfo.exists()) diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 7cc0cc7b2..75d77c32a 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -191,8 +191,8 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, for(RDTreeWidget *res : resources) { - res->setColumns({"", tr("Set"), tr("Binding"), tr("Type"), tr("Resource"), tr("Contents"), - tr("cont.d"), tr("Go")}); + res->setColumns({QString(), tr("Set"), tr("Binding"), tr("Type"), tr("Resource"), + tr("Contents"), tr("cont.d"), tr("Go")}); res->header()->resizeSection(0, 30); res->header()->setSectionResizeMode(0, QHeaderView::Fixed); res->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); @@ -209,8 +209,8 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, for(RDTreeWidget *ubo : ubos) { - ubo->setColumns( - {"", tr("Set"), tr("Binding"), tr("Buffer"), tr("Byte Range"), tr("Size"), tr("Go")}); + ubo->setColumns({QString(), tr("Set"), tr("Binding"), tr("Buffer"), tr("Byte Range"), + tr("Size"), tr("Go")}); ubo->header()->resizeSection(0, 30); ubo->header()->setSectionResizeMode(0, QHeaderView::Fixed); ubo->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); @@ -308,12 +308,13 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, ui->pipeFlow->setStages( { - "VTX", "VS", "TCS", "TES", "GS", "RS", "FS", "FB", "CS", + lit("VTX"), lit("VS"), lit("TCS"), lit("TES"), lit("GS"), lit("RS"), lit("FS"), lit("FB"), + lit("CS"), }, { - "Vertex Input", "Vertex Shader", "Tess. Control Shader", "Tess. Eval. Shader", - "Geometry Shader", "Rasterizer", "Fragment Shader", "Framebuffer Output", - "Compute Shader", + tr("Vertex Input"), tr("Vertex Shader"), tr("Tess. Control Shader"), + tr("Tess. Eval. Shader"), tr("Geometry Shader"), tr("Rasterizer"), tr("Fragment Shader"), + tr("Framebuffer Output"), tr("Compute Shader"), }); ui->pipeFlow->setIsolatedStage(8); // compute shader isolated @@ -533,7 +534,7 @@ void VulkanPipelineStateViewer::clearState() ui->viAttrs->clear(); ui->viBuffers->clear(); - ui->topology->setText(""); + ui->topology->setText(QString()); ui->primRestart->setVisible(false); ui->topologyDiagram->setPixmap(QPixmap()); @@ -550,18 +551,18 @@ void VulkanPipelineStateViewer::clearState() ui->cullMode->setText(tr("Front", "Cull Mode")); ui->frontCCW->setPixmap(tick); - ui->depthBias->setText("0.0"); - ui->depthBiasClamp->setText("0.0"); - ui->slopeScaledBias->setText("0.0"); + ui->depthBias->setText(lit("0.0")); + ui->depthBiasClamp->setText(lit("0.0")); + ui->slopeScaledBias->setText(lit("0.0")); ui->depthClamp->setPixmap(tick); ui->rasterizerDiscard->setPixmap(tick); - ui->lineWidth->setText("1.0"); + ui->lineWidth->setText(lit("1.0")); - ui->sampleCount->setText("1"); + ui->sampleCount->setText(lit("1")); ui->sampleShading->setPixmap(tick); - ui->minSampleShading->setText("0.0"); - ui->sampleMask->setText("FFFFFFFF"); + ui->minSampleShading->setText(lit("0.0")); + ui->sampleMask->setText(lit("FFFFFFFF")); ui->viewports->clear(); ui->scissors->clear(); @@ -569,15 +570,15 @@ void VulkanPipelineStateViewer::clearState() ui->framebuffer->clear(); ui->blends->clear(); - ui->blendFactor->setText("0.00, 0.00, 0.00, 0.00"); - ui->logicOp->setText("-"); + ui->blendFactor->setText(lit("0.00, 0.00, 0.00, 0.00")); + ui->logicOp->setText(lit("-")); ui->alphaToOne->setPixmap(tick); ui->depthEnabled->setPixmap(tick); - ui->depthFunc->setText("GREATER_EQUAL"); + ui->depthFunc->setText(lit("GREATER_EQUAL")); ui->depthWrite->setPixmap(tick); - ui->depthBounds->setText("0.0-1.0"); + ui->depthBounds->setText(lit("0.0-1.0")); ui->depthBounds->setPixmap(QPixmap()); ui->stencils->clear(); @@ -587,11 +588,11 @@ RDTreeWidgetItem *VulkanPipelineStateViewer::makeSampler(const QString &bindset, const QString &slotname, const VKPipe::BindingElement &descriptor) { - QString addressing = ""; - QString addPrefix = ""; - QString addVal = ""; + QString addressing; + QString addPrefix; + QString addVal; - QString filter = ""; + QString filter; QString addr[] = {ToQStr(descriptor.AddressU), ToQStr(descriptor.AddressV), ToQStr(descriptor.AddressW)}; @@ -599,7 +600,7 @@ RDTreeWidgetItem *VulkanPipelineStateViewer::makeSampler(const QString &bindset, // arrange like either UVW: WRAP or UV: WRAP, W: CLAMP for(int a = 0; a < 3; a++) { - QString prefix = QChar("UVW"[a]); + QString prefix = QString(QLatin1Char("UVW"[a])); if(a == 0 || addr[a] == addr[a - 1]) { @@ -607,45 +608,47 @@ RDTreeWidgetItem *VulkanPipelineStateViewer::makeSampler(const QString &bindset, } else { - addressing += addPrefix + ": " + addVal + ", "; + addressing += addPrefix + lit(": ") + addVal + lit(", "); addPrefix = prefix; } addVal = addr[a]; } - addressing += addPrefix + ": " + addVal; + addressing += addPrefix + lit(": ") + addVal; if(descriptor.UseBorder()) - addressing += QString(" <%1, %2, %3, %4>") + addressing += QFormatStr(" <%1, %2, %3, %4>") .arg(descriptor.BorderColor[0]) .arg(descriptor.BorderColor[1]) .arg(descriptor.BorderColor[2]) .arg(descriptor.BorderColor[3]); if(descriptor.unnormalized) - addressing += " (Un-norm)"; + addressing += lit(" (Un-norm)"); filter = ToQStr(descriptor.Filter); if(descriptor.maxAniso > 1.0f) - filter += QString(" Aniso %1x").arg(descriptor.maxAniso); + filter += lit(" Aniso %1x").arg(descriptor.maxAniso); if(descriptor.Filter.func == FilterFunc::Comparison) - filter += QString(" (%1)").arg(ToQStr(descriptor.comparison)); + filter += QFormatStr(" (%1)").arg(ToQStr(descriptor.comparison)); else if(descriptor.Filter.func != FilterFunc::Normal) - filter += QString(" (%1)").arg(ToQStr(descriptor.Filter.func)); + filter += QFormatStr(" (%1)").arg(ToQStr(descriptor.Filter.func)); - QString lod = "LODs: " + - (descriptor.minlod == -FLT_MAX ? "0" : QString::number(descriptor.minlod)) + " - " + - (descriptor.maxlod == FLT_MAX ? "FLT_MAX" : QString::number(descriptor.maxlod)); + QString lod = + lit("LODs: %1 - %2") + .arg((descriptor.minlod == -FLT_MAX ? lit("0") : QString::number(descriptor.minlod))) + .arg((descriptor.maxlod == FLT_MAX ? lit("FLT_MAX") : QString::number(descriptor.maxlod))); if(descriptor.mipBias != 0.0f) - lod += QString(" Bias %1").arg(descriptor.mipBias); + lod += lit(" Bias %1").arg(descriptor.mipBias); - return new RDTreeWidgetItem({"", bindset, slotname, - descriptor.immutableSampler ? "Immutable Sampler" : "Sampler", - ToQStr(descriptor.name), addressing, filter + ", " + lod}); + return new RDTreeWidgetItem( + {QString(), bindset, slotname, + descriptor.immutableSampler ? tr("Immutable Sampler") : tr("Sampler"), + ToQStr(descriptor.name), addressing, filter + lit(", ") + lod}); } void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, @@ -744,7 +747,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, QString slotname = QString::number(bind); if(shaderRes != NULL && shaderRes->name.count > 0) - slotname += ": " + ToQStr(shaderRes->name); + slotname += lit(": ") + ToQStr(shaderRes->name); int arrayLength = 0; if(slotBinds != NULL) @@ -755,8 +758,9 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, // for arrays, add a parent element that we add the real cbuffers below if(arrayLength > 1) { - RDTreeWidgetItem *node = new RDTreeWidgetItem( - {"", setname, slotname, tr("Array[%1]").arg(arrayLength), "", "", "", ""}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({QString(), setname, slotname, tr("Array[%1]").arg(arrayLength), + QString(), QString(), QString(), QString()}); if(!filledSlot) setEmptyRow(node); @@ -780,9 +784,9 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(arrayLength > 1) { if(shaderRes != NULL && shaderRes->name.count > 0) - slotname = QString("%1[%2]: %3").arg(bind).arg(idx).arg(ToQStr(shaderRes->name)); + slotname = QFormatStr("%1[%2]: %3").arg(bind).arg(idx).arg(ToQStr(shaderRes->name)); else - slotname = QString("%1[%2]").arg(bind).arg(idx); + slotname = QFormatStr("%1[%2]").arg(bind).arg(idx); } bool isbuf = false; @@ -790,8 +794,8 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, uint32_t a = 1; uint32_t samples = 1; uint64_t len = 0; - QString format = "Unknown"; - QString name = "Empty"; + QString format = tr("Unknown"); + QString name = tr("Empty"); TextureDim restype = TextureDim::Unknown; QVariant tag; @@ -802,7 +806,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(filledSlot && descriptorBind != NULL) { - name = "Object " + ToQStr(descriptorBind->res); + name = tr("Object %1").arg(ToQStr(descriptorBind->res)); format = ToQStr(descriptorBind->viewfmt.strname); @@ -814,7 +818,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, h = tex->height; d = tex->depth; a = tex->arraysize; - name = tex->name; + name = ToQStr(tex->name); restype = tex->resType; samples = tex->msSamp; @@ -830,7 +834,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, h = 0; d = 0; a = 0; - name = buf->name; + name = ToQStr(buf->name); restype = TextureDim::Buffer; if(descriptorLen == 0xFFFFFFFFFFFFFFFFULL) @@ -844,8 +848,8 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, } else { - name = "Empty"; - format = "-"; + name = tr("Empty"); + format = lit("-"); w = h = d = a = 0; } @@ -858,19 +862,19 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(!isbuf) { node = new RDTreeWidgetItem({ - "", bindset, slotname, ToQStr(bindType), "-", "-", "", + QString(), bindset, slotname, ToQStr(bindType), lit("-"), lit("-"), QString(), }); setEmptyRow(node); } else { - QString range = "-"; + QString range = lit("-"); if(descriptorBind != NULL) - range = QString("%1 - %2").arg(descriptorBind->offset).arg(descriptorLen); + range = QFormatStr("%1 - %2").arg(descriptorBind->offset).arg(descriptorLen); node = new RDTreeWidgetItem({ - "", bindset, slotname, ToQStr(bindType), name, QString("%1 bytes").arg(len), range, + QString(), bindset, slotname, ToQStr(bindType), name, tr("%1 bytes").arg(len), range, }); node->setTag(tag); @@ -887,7 +891,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(descriptorBind == NULL || descriptorBind->sampler == ResourceId()) { node = new RDTreeWidgetItem({ - "", bindset, slotname, ToQStr(bindType), "-", "-", "", + QString(), bindset, slotname, ToQStr(bindType), lit("-"), lit("-"), QString(), }); setEmptyRow(node); @@ -915,23 +919,23 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(descriptorBind == NULL || descriptorBind->res == ResourceId()) { node = new RDTreeWidgetItem({ - "", bindset, slotname, ToQStr(bindType), "-", "-", "", + QString(), bindset, slotname, ToQStr(bindType), lit("-"), lit("-"), QString(), }); setEmptyRow(node); } else { - QString typeName = ToQStr(restype) + " " + ToQStr(bindType); + QString typeName = ToQStr(restype) + lit(" ") + ToQStr(bindType); QString dim; if(restype == TextureDim::Texture3D) - dim = QString("%1x%2x%3").arg(w).arg(h).arg(d); + dim = QFormatStr("%1x%2x%3").arg(w).arg(h).arg(d); else if(restype == TextureDim::Texture1D || restype == TextureDim::Texture1DArray) dim = QString::number(w); else - dim = QString("%1x%2").arg(w).arg(h); + dim = QFormatStr("%1x%2").arg(w).arg(h); if(descriptorBind->swizzle[0] != TextureSwizzle::Red || descriptorBind->swizzle[1] != TextureSwizzle::Green || @@ -948,14 +952,14 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(restype == TextureDim::Texture1DArray || restype == TextureDim::Texture2DArray || restype == TextureDim::Texture2DMSArray || restype == TextureDim::TextureCubeArray) { - dim += QString(" %1[%2]").arg(ToQStr(restype)).arg(a); + dim += QFormatStr(" %1[%2]").arg(ToQStr(restype)).arg(a); } if(restype == TextureDim::Texture2DMS || restype == TextureDim::Texture2DMSArray) - dim += QString(", %1x MSAA").arg(samples); + dim += QFormatStr(", %1x MSAA").arg(samples); node = new RDTreeWidgetItem({ - "", bindset, slotname, typeName, name, dim, format, + QString(), bindset, slotname, typeName, name, dim, format, }); node->setTag(tag); @@ -972,7 +976,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, if(descriptorBind == NULL || descriptorBind->sampler == ResourceId()) { samplerNode = new RDTreeWidgetItem({ - "", bindset, slotname, ToQStr(bindType), "-", "-", "", + QString(), bindset, slotname, ToQStr(bindType), lit("-"), lit("-"), QString(), }); setEmptyRow(node); @@ -981,7 +985,7 @@ void VulkanPipelineStateViewer::addResourceRow(ShaderReflection *shaderDetails, { if(!samplers.contains(descriptorBind->sampler)) { - samplerNode = makeSampler("", "", *descriptorBind); + samplerNode = makeSampler(QString(), QString(), *descriptorBind); if(!filledSlot) setEmptyRow(samplerNode); @@ -1083,7 +1087,7 @@ void VulkanPipelineStateViewer::addConstantBlockRow(ShaderReflection *shaderDeta QString slotname = QString::number(bind); if(cblock != NULL && cblock->name.count > 0) - slotname += ": " + ToQStr(cblock->name); + slotname += lit(": ") + ToQStr(cblock->name); int arrayLength = 0; if(slotBinds != NULL) @@ -1094,8 +1098,8 @@ void VulkanPipelineStateViewer::addConstantBlockRow(ShaderReflection *shaderDeta // for arrays, add a parent element that we add the real cbuffers below if(arrayLength > 1) { - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"", setname, slotname, tr("Array[%1]").arg(arrayLength), "", ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {QString(), setname, slotname, tr("Array[%1]").arg(arrayLength), QString(), QString()}); if(!filledSlot) setEmptyRow(node); @@ -1117,36 +1121,36 @@ void VulkanPipelineStateViewer::addConstantBlockRow(ShaderReflection *shaderDeta if(arrayLength > 1) { if(cblock != NULL && cblock->name.count > 0) - slotname = QString("%1[%2]: %3").arg(bind).arg(idx).arg(ToQStr(cblock->name)); + slotname = QFormatStr("%1[%2]: %3").arg(bind).arg(idx).arg(ToQStr(cblock->name)); else - slotname = QString("%1[%2]").arg(bind).arg(idx); + slotname = QFormatStr("%1[%2]").arg(bind).arg(idx); } - QString name = "Empty"; + QString name = tr("Empty"); uint64_t length = 0; int numvars = cblock != NULL ? cblock->variables.count : 0; uint64_t byteSize = cblock != NULL ? cblock->byteSize : 0; - QString vecrange = "-"; + QString vecrange = lit("-"); if(filledSlot && descriptorBind != NULL) { - name = ""; + name = QString(); length = descriptorBind->size; BufferDescription *buf = m_Ctx.GetBuffer(descriptorBind->res); if(buf) { - name = buf->name; + name = ToQStr(buf->name); if(length == 0xFFFFFFFFFFFFFFFFULL) length = buf->length - descriptorBind->offset; } - if(name == "") - name = "UBO " + ToQStr(descriptorBind->res); + if(name == QString()) + name = lit("UBO ") + ToQStr(descriptorBind->res); vecrange = - QString("%1 - %2").arg(descriptorBind->offset).arg(descriptorBind->offset + length); + QFormatStr("%1 - %2").arg(descriptorBind->offset).arg(descriptorBind->offset + length); } QString sizestr; @@ -1154,10 +1158,10 @@ void VulkanPipelineStateViewer::addConstantBlockRow(ShaderReflection *shaderDeta // push constants or specialization constants if(cblock != NULL && !cblock->bufferBacked) { - setname = ""; - slotname = cblock->name; - name = "Push constants"; - vecrange = ""; + setname = QString(); + slotname = ToQStr(cblock->name); + name = tr("Push constants"); + vecrange = QString(); sizestr = tr("%1 Variables").arg(numvars); // could maybe get range from ShaderVariable.reg if it's filled out @@ -1175,7 +1179,8 @@ void VulkanPipelineStateViewer::addConstantBlockRow(ShaderReflection *shaderDeta filledSlot = false; } - RDTreeWidgetItem *node = new RDTreeWidgetItem({"", setname, slotname, name, vecrange, sizestr}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({QString(), setname, slotname, name, vecrange, sizestr}); node->setTag(QVariant::fromValue(CBufferTag(slot, (uint)idx))); @@ -1204,12 +1209,12 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Shader &stage, if(shaderDetails != NULL && shaderDetails->DebugInfo.entryFunc.count > 0) { QString entryFunc = ToQStr(shaderDetails->DebugInfo.entryFunc); - if(shaderDetails->DebugInfo.files.count > 0 || entryFunc != "main") - shader->setText(entryFunc + "()"); + if(shaderDetails->DebugInfo.files.count > 0 || entryFunc != lit("main")) + shader->setText(entryFunc + lit("()")); if(shaderDetails->DebugInfo.files.count > 0) { - QString shaderfn = ""; + QString shaderfn = QString(); int entryFile = shaderDetails->DebugInfo.entryFile; if(entryFile < 0 || entryFile >= shaderDetails->DebugInfo.files.count) @@ -1217,7 +1222,7 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Shader &stage, shaderfn = QFileInfo(ToQStr(shaderDetails->DebugInfo.files[entryFile].first)).fileName(); - shader->setText(entryFunc + "() - " + shaderfn); + shader->setText(entryFunc + lit("() - ") + shaderfn); } } @@ -1371,8 +1376,8 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Shader &stage, // from SPIR-V side. RDTreeWidgetItem *node = - new RDTreeWidgetItem({"", "", ToQStr(cblock.name), "Push constants", "", - tr("%1 Variable(s)", "", cblock.variables.count)}); + new RDTreeWidgetItem({QString(), QString(), ToQStr(cblock.name), tr("Push constants"), + QString(), tr("%1 Variable(s)", "", cblock.variables.count)}); node->setTag(QVariant::fromValue(CBufferTag(cb, 0))); @@ -1431,7 +1436,7 @@ void VulkanPipelineStateViewer::setState() if(attrib >= 0 && attrib < state.m_VS.ShaderDetails->InputSig.count) { - name = state.m_VS.ShaderDetails->InputSig[attrib].varName; + name = ToQStr(state.m_VS.ShaderDetails->InputSig[attrib].varName); usedSlot = true; } } @@ -1463,7 +1468,7 @@ void VulkanPipelineStateViewer::setState() int numCPs = PatchList_Count(topo); if(numCPs > 0) { - ui->topology->setText(QString("PatchList (%1 Control Points)").arg(numCPs)); + ui->topology->setText(tr("PatchList (%1 Control Points)").arg(numCPs)); } else { @@ -1504,7 +1509,7 @@ void VulkanPipelineStateViewer::setState() { if(ibufferUsed || showDisabled) { - QString name = "Buffer " + ToQStr(state.IA.ibuffer.buf); + QString name = tr("Buffer ") + ToQStr(state.IA.ibuffer.buf); uint64_t length = 1; if(!ibufferUsed) @@ -1514,13 +1519,13 @@ void VulkanPipelineStateViewer::setState() if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Index", name, "Index", (qulonglong)state.IA.ibuffer.offs, - draw != NULL ? draw->indexByteWidth : 0, (qulonglong)length, ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {tr("Index"), name, tr("Index"), (qulonglong)state.IA.ibuffer.offs, + draw != NULL ? draw->indexByteWidth : 0, (qulonglong)length, QString()}); node->setTag( QVariant::fromValue(VBIBTag(state.IA.ibuffer.buf, draw != NULL ? draw->indexOffset : 0))); @@ -1538,8 +1543,8 @@ void VulkanPipelineStateViewer::setState() { if(ibufferUsed || showEmpty) { - RDTreeWidgetItem *node = - new RDTreeWidgetItem({"Index", tr("No Buffer Set"), "Index", "-", "-", "-", ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {tr("Index"), tr("No Buffer Set"), tr("Index"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag( QVariant::fromValue(VBIBTag(state.IA.ibuffer.buf, draw != NULL ? draw->indexOffset : 0))); @@ -1574,20 +1579,20 @@ void VulkanPipelineStateViewer::setState() if(showNode(usedSlot, filledSlot)) { QString name = tr("No Buffer"); - QString rate = "-"; + QString rate = lit("-"); uint64_t length = 1; uint64_t offset = 0; uint32_t stride = 0; if(vbuff != NULL) { - name = "Buffer " + ToQStr(vbuff->buffer); + name = tr("Buffer ") + ToQStr(vbuff->buffer); offset = vbuff->offset; BufferDescription *buf = m_Ctx.GetBuffer(vbuff->buffer); if(buf) { - name = buf->name; + name = ToQStr(buf->name); length = buf->length; } } @@ -1595,20 +1600,21 @@ void VulkanPipelineStateViewer::setState() if(bind != NULL) { stride = bind->bytestride; - rate = bind->perInstance ? "Instance" : "Vertex"; + rate = bind->perInstance ? tr("Instance") : tr("Vertex"); } else { - name += ", No Binding"; + name += tr(", No Binding"); } RDTreeWidgetItem *node = NULL; if(filledSlot) node = new RDTreeWidgetItem( - {i, name, rate, (qulonglong)offset, stride, (qulonglong)length, ""}); + {i, name, rate, (qulonglong)offset, stride, (qulonglong)length, QString()}); else - node = new RDTreeWidgetItem({i, tr("No Binding"), "-", "-", "-", "-", ""}); + node = new RDTreeWidgetItem( + {i, tr("No Binding"), lit("-"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag(QVariant::fromValue(VBIBTag(vbuff != NULL ? vbuff->buffer : ResourceId(), vbuff != NULL ? vbuff->offset : 0))); @@ -1629,7 +1635,8 @@ void VulkanPipelineStateViewer::setState() { if(usedBindings[i]) { - RDTreeWidgetItem *node = new RDTreeWidgetItem({i, tr("No Binding"), "-", "-", "-", "-", ""}); + RDTreeWidgetItem *node = new RDTreeWidgetItem( + {i, tr("No Binding"), lit("-"), lit("-"), lit("-"), lit("-"), QString()}); node->setTag(QVariant::fromValue(VBIBTag(ResourceId(), 0))); @@ -1668,7 +1675,7 @@ void VulkanPipelineStateViewer::setState() if(state.Pass.renderpass.obj != ResourceId()) { ui->scissors->addTopLevelItem( - new RDTreeWidgetItem({"Render Area", state.Pass.renderArea.x, state.Pass.renderArea.y, + new RDTreeWidgetItem({tr("Render Area"), state.Pass.renderArea.x, state.Pass.renderArea.y, state.Pass.renderArea.width, state.Pass.renderArea.height})); } @@ -1716,7 +1723,8 @@ void VulkanPipelineStateViewer::setState() ui->sampleCount->setText(QString::number(state.MSAA.rasterSamples)); ui->sampleShading->setPixmap(state.MSAA.sampleShadingEnable ? tick : cross); ui->minSampleShading->setText(Formatter::Format(state.MSAA.minSampleShading)); - ui->sampleMask->setText(QString("%1").arg(state.MSAA.sampleMask, 8, 16, QChar('0')).toUpper()); + ui->sampleMask->setText( + QFormatStr("%1").arg(state.MSAA.sampleMask, 8, 16, QLatin1Char('0')).toUpper()); //////////////////////////////////////////////// // Output Merger @@ -1748,14 +1756,14 @@ void VulkanPipelineStateViewer::setState() uint32_t w = 1, h = 1, d = 1; uint32_t a = 1; QString format = ToQStr(p.viewfmt.strname); - QString name = "Texture " + ToQStr(p.img); - QString typeName = "Unknown"; + QString name = tr("Texture ") + ToQStr(p.img); + QString typeName = tr("Unknown"); if(p.img == ResourceId()) { - name = "Empty"; - format = "-"; - typeName = "-"; + name = tr("Empty"); + format = lit("-"); + typeName = lit("-"); w = h = d = a = 0; } @@ -1766,7 +1774,7 @@ void VulkanPipelineStateViewer::setState() h = tex->height; d = tex->depth; a = tex->arraysize; - name = tex->name; + name = ToQStr(tex->name); typeName = ToQStr(tex->resType); if(!tex->customName && state.m_FS.ShaderDetails != NULL) @@ -1777,7 +1785,7 @@ void VulkanPipelineStateViewer::setState() (state.m_FS.ShaderDetails->OutputSig[s].systemValue == ShaderBuiltin::Undefined || state.m_FS.ShaderDetails->OutputSig[s].systemValue == ShaderBuiltin::ColorOutput)) { - name = QString("<%1>").arg(ToQStr(state.m_FS.ShaderDetails->OutputSig[s].varName)); + name = QFormatStr("<%1>").arg(ToQStr(state.m_FS.ShaderDetails->OutputSig[s].varName)); } } } @@ -1793,7 +1801,8 @@ void VulkanPipelineStateViewer::setState() .arg(ToQStr(p.swizzle[3])); } - RDTreeWidgetItem *node = new RDTreeWidgetItem({i, name, typeName, w, h, d, a, format, ""}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({i, name, typeName, w, h, d, a, format, QString()}); if(tex) node->setTag(QVariant::fromValue(p.img)); @@ -1845,11 +1854,11 @@ void VulkanPipelineStateViewer::setState() ToQStr(blend.alphaBlend.Source), ToQStr(blend.alphaBlend.Destination), ToQStr(blend.alphaBlend.Operation), - QString("%1%2%3%4") - .arg((blend.writeMask & 0x1) == 0 ? "_" : "R") - .arg((blend.writeMask & 0x2) == 0 ? "_" : "G") - .arg((blend.writeMask & 0x4) == 0 ? "_" : "B") - .arg((blend.writeMask & 0x8) == 0 ? "_" : "A")}); + QFormatStr("%1%2%3%4") + .arg((blend.writeMask & 0x1) == 0 ? lit("_") : lit("R")) + .arg((blend.writeMask & 0x2) == 0 ? lit("_") : lit("G")) + .arg((blend.writeMask & 0x4) == 0 ? lit("_") : lit("B")) + .arg((blend.writeMask & 0x8) == 0 ? lit("_") : lit("A"))}); if(!filledSlot) setEmptyRow(node); @@ -1867,12 +1876,12 @@ void VulkanPipelineStateViewer::setState() ui->blends->setUpdatesEnabled(true); ui->blends->verticalScrollBar()->setValue(vs); - ui->blendFactor->setText(QString("%1, %2, %3, %4") + ui->blendFactor->setText(QFormatStr("%1, %2, %3, %4") .arg(state.CB.blendConst[0], 2) .arg(state.CB.blendConst[1], 2) .arg(state.CB.blendConst[2], 2) .arg(state.CB.blendConst[3], 2)); - ui->logicOp->setText(state.CB.logicOpEnable ? ToQStr(state.CB.logic) : "-"); + ui->logicOp->setText(state.CB.logicOpEnable ? ToQStr(state.CB.logic) : lit("-")); ui->alphaToOne->setPixmap(state.CB.alphaToOneEnable ? tick : cross); ui->depthEnabled->setPixmap(state.DS.depthTestEnable ? tick : cross); @@ -1881,13 +1890,13 @@ void VulkanPipelineStateViewer::setState() if(state.DS.depthBoundsEnable) { - ui->depthBounds->setText(Formatter::Format(state.DS.minDepthBounds) + "-" + + ui->depthBounds->setText(Formatter::Format(state.DS.minDepthBounds) + lit("-") + Formatter::Format(state.DS.maxDepthBounds)); ui->depthBounds->setPixmap(QPixmap()); } else { - ui->depthBounds->setText(""); + ui->depthBounds->setText(QString()); ui->depthBounds->setPixmap(cross); } @@ -1896,23 +1905,24 @@ void VulkanPipelineStateViewer::setState() if(state.DS.stencilTestEnable) { ui->stencils->addTopLevelItem(new RDTreeWidgetItem( - {"Front", ToQStr(state.DS.front.Func), ToQStr(state.DS.front.FailOp), + {tr("Front"), ToQStr(state.DS.front.Func), ToQStr(state.DS.front.FailOp), ToQStr(state.DS.front.DepthFailOp), ToQStr(state.DS.front.PassOp), - QString("%1").arg(state.DS.front.writeMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.DS.front.compareMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.DS.front.ref, 2, 16, QChar('0')).toUpper()})); + QFormatStr("%1").arg(state.DS.front.writeMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.DS.front.compareMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.DS.front.ref, 2, 16, QLatin1Char('0')).toUpper()})); ui->stencils->addTopLevelItem(new RDTreeWidgetItem( - {"Back", ToQStr(state.DS.back.Func), ToQStr(state.DS.back.FailOp), + {tr("Back"), ToQStr(state.DS.back.Func), ToQStr(state.DS.back.FailOp), ToQStr(state.DS.back.DepthFailOp), ToQStr(state.DS.back.PassOp), - QString("%1").arg(state.DS.back.writeMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.DS.back.compareMask, 2, 16, QChar('0')).toUpper(), - QString("%1").arg(state.DS.back.ref, 2, 16, QChar('0')).toUpper()})); + QFormatStr("%1").arg(state.DS.back.writeMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.DS.back.compareMask, 2, 16, QLatin1Char('0')).toUpper(), + QFormatStr("%1").arg(state.DS.back.ref, 2, 16, QLatin1Char('0')).toUpper()})); } else { - ui->stencils->addTopLevelItem( - new RDTreeWidgetItem({"Front", "-", "-", "-", "-", "-", "-", "-"})); - ui->stencils->addTopLevelItem(new RDTreeWidgetItem({"Back", "-", "-", "-", "-", "-", "-", "-"})); + ui->stencils->addTopLevelItem(new RDTreeWidgetItem( + {tr("Front"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-")})); + ui->stencils->addTopLevelItem(new RDTreeWidgetItem( + {tr("Back"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-"), lit("-")})); } ui->stencils->clearSelection(); ui->stencils->setUpdatesEnabled(true); @@ -1937,9 +1947,9 @@ void VulkanPipelineStateViewer::setState() QString VulkanPipelineStateViewer::formatMembers(int indent, const QString &nameprefix, const rdctype::array &vars) { - QString indentstr(indent * 4, QChar(' ')); + QString indentstr(indent * 4, QLatin1Char(' ')); - QString ret = ""; + QString ret = QString(); int i = 0; @@ -1948,19 +1958,25 @@ QString VulkanPipelineStateViewer::formatMembers(int indent, const QString &name if(v.type.members.count > 0) { if(i > 0) - ret += "\n"; - ret += indentstr + QString("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); - ret += indentstr + "{\n" + formatMembers(indent + 1, ToQStr(v.name) + "_", v.type.members) + - indentstr + "}\n"; + ret += lit("\n"); + ret += indentstr + lit("// struct %1\n").arg(ToQStr(v.type.descriptor.name)); + ret += indentstr + lit("{\n") + + formatMembers(indent + 1, ToQStr(v.name) + lit("_"), v.type.members) + indentstr + + lit("}\n"); if(i < vars.count - 1) - ret += "\n"; + ret += lit("\n"); } else { - QString arr = ""; + QString arr = QString(); if(v.type.descriptor.elements > 1) - arr = QString("[%1]").arg(v.type.descriptor.elements); - ret += indentstr + ToQStr(v.type.descriptor.name) + " " + nameprefix + v.name + arr + ";\n"; + arr = QFormatStr("[%1]").arg(v.type.descriptor.elements); + ret += QFormatStr("%1%2 %3%4%5;\n") + .arg(indentstr) + .arg(ToQStr(v.type.descriptor.name)) + .arg(nameprefix) + .arg(ToQStr(v.name)) + .arg(arr); } i++; @@ -2009,41 +2025,42 @@ void VulkanPipelineStateViewer::resource_itemActivated(RDTreeWidgetItem *item, i ? stage->ShaderDetails->ReadWriteResources[buf.bindPoint] : stage->ShaderDetails->ReadOnlyResources[buf.bindPoint]; - QString format = QString("// struct %1\n").arg(ToQStr(shaderRes.variableType.descriptor.name)); + QString format = lit("// struct %1\n").arg(ToQStr(shaderRes.variableType.descriptor.name)); if(shaderRes.variableType.members.count > 1) { - format += "// members skipped as they are fixed size:\n"; + format += lit("// members skipped as they are fixed size:\n"); for(int i = 0; i < shaderRes.variableType.members.count - 1; i++) - format += QString("%1 %2;\n") + format += QFormatStr("%1 %2;\n") .arg(ToQStr(shaderRes.variableType.members[i].type.descriptor.name)) .arg(ToQStr(shaderRes.variableType.members[i].name)); } if(shaderRes.variableType.members.count > 0) { - format += - "{\n" + formatMembers(1, "", shaderRes.variableType.members.back().type.members) + "}"; + format += lit("{\n") + + formatMembers(1, QString(), shaderRes.variableType.members.back().type.members) + + lit("}"); } else { const auto &desc = shaderRes.variableType.descriptor; - format = ""; + format = QString(); if(desc.rowMajorStorage) - format += "row_major "; + format += lit("row_major "); format += ToQStr(desc.type); if(desc.rows > 1 && desc.cols > 1) - format += QString("%1x%2").arg(desc.rows).arg(desc.cols); + format += QFormatStr("%1x%2").arg(desc.rows).arg(desc.cols); else if(desc.cols > 1) format += desc.cols; if(desc.name.count > 0) - format += " " + ToQStr(desc.name); + format += lit(" ") + ToQStr(desc.name); if(desc.elements > 1) - format += QString("[%1]").arg(desc.elements); + format += QFormatStr("[%1]").arg(desc.elements); } if(buf.ID != ResourceId()) @@ -2238,9 +2255,9 @@ void VulkanPipelineStateViewer::shaderEdit_clicked() if(!shaderDetails) return; - QString entryFunc = QString("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::Vulkan)[0]); + QString entryFunc = lit("EditedShader%1S").arg(ToQStr(stage->stage, GraphicsAPI::Vulkan)[0]); - QString mainfile = ""; + QString mainfile; QStringMap files; @@ -2256,7 +2273,7 @@ void VulkanPipelineStateViewer::shaderEdit_clicked() if(glsl.isEmpty()) glsl = ToQStr(shaderDetails->Disassembly); - mainfile = "generated.glsl"; + mainfile = lit("generated.glsl"); files[mainfile] = glsl; } @@ -2274,9 +2291,9 @@ QString VulkanPipelineStateViewer::disassembleSPIRV(const ShaderReflection *shad const SPIRVDisassembler &disasm = m_Ctx.Config().SPIRVDisassemblers[0]; if(disasm.executable.isEmpty()) - return ""; + return QString(); - QString spv_bin_file = QDir(QDir::tempPath()).absoluteFilePath("spv_bin.spv"); + QString spv_bin_file = QDir(QDir::tempPath()).absoluteFilePath(lit("spv_bin.spv")); QFile binHandle(spv_bin_file); if(binHandle.open(QFile::WriteOnly | QIODevice::Truncate)) @@ -2289,26 +2306,26 @@ QString VulkanPipelineStateViewer::disassembleSPIRV(const ShaderReflection *shad { RDDialog::critical(this, tr("Error writing temp file"), tr("Couldn't write temporary SPIR-V file %1.").arg(spv_bin_file)); - return ""; + return QString(); } - if(!disasm.args.contains("{spv_bin}")) + if(!disasm.args.contains(lit("{spv_bin}"))) { RDDialog::critical( this, tr("Wrongly configured disassembler"), tr("Please use {spv_bin} in the disassembler arguments to specify the input file.")); - return ""; + return QString(); } LambdaThread *thread = new LambdaThread([this, &glsl, &disasm, spv_bin_file]() { - QString spv_disas_file = QDir(QDir::tempPath()).absoluteFilePath("spv_disas.txt"); + QString spv_disas_file = QDir(QDir::tempPath()).absoluteFilePath(lit("spv_disas.txt")); QString args = disasm.args; - bool writesToFile = disasm.args.contains("{spv_disas}"); + bool writesToFile = disasm.args.contains(lit("{spv_disas}")); - args.replace(QString::fromUtf8("{spv_bin}"), spv_bin_file); - args.replace(QString::fromUtf8("{spv_disas}"), spv_disas_file); + args.replace(lit("{spv_bin}"), spv_bin_file); + args.replace(lit("{spv_disas}"), spv_disas_file); QStringList argList = ParseArgsList(args); diff --git a/qrenderdoc/Windows/PixelHistoryView.cpp b/qrenderdoc/Windows/PixelHistoryView.cpp index 325de171a..19d19cba2 100644 --- a/qrenderdoc/Windows/PixelHistoryView.cpp +++ b/qrenderdoc/Windows/PixelHistoryView.cpp @@ -158,7 +158,7 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role) const override { if(orientation == Qt::Horizontal && role == Qt::DisplayRole && section == 0) - return "Event"; + return lit("Event"); // sizes for the colour previews if(orientation == Qt::Horizontal && role == Qt::SizeHintRole && (section == 2 || section == 4)) @@ -183,7 +183,7 @@ public: if(m_Loading) { if(role == Qt::DisplayRole && col == 0) - return "Loading..."; + return tr("Loading..."); return QVariant(); } @@ -200,7 +200,7 @@ public: if(!drawcall) return QVariant(); - QString ret = ""; + QString ret; QList drawstack; const DrawcallDescription *parent = m_Ctx.GetDrawcall(drawcall->parent); while(parent) @@ -211,19 +211,19 @@ public: if(!drawstack.isEmpty()) { - ret += "> " + ToQStr(drawstack.back()->name); + ret += lit("> ") + ToQStr(drawstack.back()->name); if(drawstack.count() > 3) - ret += " ..."; + ret += lit(" ..."); - ret += "\n"; + ret += lit("\n"); if(drawstack.count() > 2) - ret += "> " + ToQStr(drawstack[1]->name) + "\n"; + ret += lit("> ") + ToQStr(drawstack[1]->name) + lit("\n"); if(drawstack.count() > 1) - ret += "> " + ToQStr(drawstack[0]->name) + "\n"; + ret += lit("> ") + ToQStr(drawstack[0]->name) + lit("\n"); - ret += "\n"; + ret += lit("\n"); } bool passed = true; @@ -248,7 +248,7 @@ public: for(const PixelModification &m : mods) passed |= m.passed(); - QString failure = passed ? "" : failureString(mods[0]); + QString failure = passed ? QString() : failureString(mods[0]); ret += tr("EID %1\n%2%3\n%4 Fragments touching pixel\n") .arg(mods.front().eventID) @@ -488,51 +488,51 @@ private: QString modString(const ModificationValue &val) const { - QString s = ""; + QString s; int numComps = (int)(m_Tex->format.compCount); - static const QString colourLetterPrefix[] = {"R: ", "G: ", "B: ", "A: "}; + static const QString colourLetterPrefix[] = {lit("R: "), lit("G: "), lit("B: "), lit("A: ")}; if(!m_IsDepth) { if(m_IsUint) { for(int i = 0; i < numComps; i++) - s += colourLetterPrefix[i] + Formatter::Format(val.col.value_u[i]) + "\n"; + s += colourLetterPrefix[i] + Formatter::Format(val.col.value_u[i]) + lit("\n"); } else if(m_IsSint) { for(int i = 0; i < numComps; i++) - s += colourLetterPrefix[i] + Formatter::Format(val.col.value_i[i]) + "\n"; + s += colourLetterPrefix[i] + Formatter::Format(val.col.value_i[i]) + lit("\n"); } else { for(int i = 0; i < numComps; i++) - s += colourLetterPrefix[i] + Formatter::Format(val.col.value_f[i]) + "\n"; + s += colourLetterPrefix[i] + Formatter::Format(val.col.value_f[i]) + lit("\n"); } } if(val.depth >= 0.0f) - s += "\nD: " + Formatter::Format(val.depth); + s += lit("\nD: ") + Formatter::Format(val.depth); else if(val.depth < -1.5f) - s += "\nD: ?"; + s += lit("\nD: ?"); else - s += "\nD: -"; + s += lit("\nD: -"); if(val.stencil >= 0) - s += "\nS: 0x" + QString("%1").arg(val.stencil, 2, 16, QChar('0')).toUpper(); + s += lit("\nS: 0x") + QFormatStr("%1").arg(val.stencil, 2, 16, QLatin1Char('0')).toUpper(); else if(val.stencil == -2) - s += "\nS: ?"; + s += lit("\nS: ?"); else - s += "\nS: -"; + s += lit("\nS: -"); return s; } QString failureString(const PixelModification &mod) const { - QString s = ""; + QString s; if(mod.sampleMasked) s += tr("\nMasked by SampleMask"); @@ -570,13 +570,13 @@ PixelHistoryView::PixelHistoryView(ICaptureContext &ctx, ResourceId id, QPoint p title += tr(" @ Sample %1").arg(display.sampleIdx); setWindowTitle(title); - QString channelStr = ""; + QString channelStr; if(display.Red) - channelStr += "R"; + channelStr += lit("R"); if(display.Green) - channelStr += "G"; + channelStr += lit("G"); if(display.Blue) - channelStr += "B"; + channelStr += lit("B"); if(channelStr.length() > 1) channelStr += tr(" channels"); @@ -584,7 +584,7 @@ PixelHistoryView::PixelHistoryView(ICaptureContext &ctx, ResourceId id, QPoint p channelStr += tr(" channel"); if(!display.Red && !display.Green && !display.Blue && display.Alpha) - channelStr = "Alpha"; + channelStr = lit("Alpha"); QString text; text = tr("Preview colours displayed in visible range %1 - %2 with %3 visible.\n\n") @@ -592,8 +592,8 @@ PixelHistoryView::PixelHistoryView(ICaptureContext &ctx, ResourceId id, QPoint p .arg(Formatter::Format(display.rangemax)) .arg(channelStr); text += - "Double click to jump to an event.\n" - "Right click to debug an event, or hide failed events."; + tr("Double click to jump to an event.\n" + "Right click to debug an event, or hide failed events."); ui->label->setText(text); @@ -652,7 +652,7 @@ void PixelHistoryView::startDebug(EventTag tag) } GUIInvoke::call([this, trace]() { - QString debugContext = QString("Pixel %1,%2").arg(m_Pixel.x()).arg(m_Pixel.y()); + QString debugContext = QFormatStr("Pixel %1,%2").arg(m_Pixel.x()).arg(m_Pixel.y()); const ShaderReflection *shaderDetails = m_Ctx.CurPipelineState().GetShaderReflection(ShaderStage::Pixel); diff --git a/qrenderdoc/Windows/PythonShell.cpp b/qrenderdoc/Windows/PythonShell.cpp index 68ccb61fb..aaabd75f3 100644 --- a/qrenderdoc/Windows/PythonShell.cpp +++ b/qrenderdoc/Windows/PythonShell.cpp @@ -49,7 +49,7 @@ PythonShell::PythonShell(ICaptureContext &ctx, QWidget *parent) scriptEditor->setMarginWidthN(0, 32); scriptEditor->setMarginWidthN(1, 0); scriptEditor->setMarginWidthN(2, 16); - scriptEditor->setObjectName("scriptEditor"); + scriptEditor->setObjectName(lit("scriptEditor")); scriptEditor->markerSetBack(CURRENT_MARKER, SCINTILLA_COLOUR(240, 128, 128)); scriptEditor->markerSetBack(CURRENT_MARKER + 1, SCINTILLA_COLOUR(240, 128, 128)); @@ -102,7 +102,7 @@ void PythonShell::on_execute_clicked() { QString command = ui->lineInput->text(); - appendText(ui->interactiveOutput, command + "\n"); + appendText(ui->interactiveOutput, command + lit("\n")); if(command.trimmed().length() > 0) interactiveContext->executeString(command, true); @@ -112,14 +112,14 @@ void PythonShell::on_execute_clicked() ui->lineInput->clear(); - appendText(ui->interactiveOutput, ">> "); + appendText(ui->interactiveOutput, lit(">> ")); } void PythonShell::on_clear_clicked() { QString minidocHeader = scriptHeader(); - minidocHeader += "\n\n>> "; + minidocHeader += lit("\n\n>> "); ui->interactiveOutput->setText(minidocHeader); @@ -133,9 +133,9 @@ void PythonShell::on_newScript_clicked() { QString minidocHeader = scriptHeader(); - minidocHeader.replace('\n', "\n# "); + minidocHeader.replace(QLatin1Char('\n'), lit("\n# ")); - minidocHeader = "# " + minidocHeader + "\n\n"; + minidocHeader = QFormatStr("# %1\n\n").arg(minidocHeader); scriptEditor->setText(minidocHeader.toUtf8().data()); @@ -144,10 +144,10 @@ void PythonShell::on_newScript_clicked() void PythonShell::on_openScript_clicked() { - QString filename = - RDDialog::getOpenFileName(this, "Open Python Script", "", tr("Python scripts (*.py)")); + QString filename = RDDialog::getOpenFileName(this, tr("Open Python Script"), QString(), + tr("Python scripts (*.py)")); - if(filename != "") + if(!filename.isEmpty()) { QFile f(filename); if(f.open(QIODevice::ReadOnly | QIODevice::Text)) @@ -156,7 +156,8 @@ void PythonShell::on_openScript_clicked() } else { - RDDialog::critical(this, "Error loading script", tr("Couldn't open path %1.").arg(filename)); + RDDialog::critical(this, tr("Error loading script"), + tr("Couldn't open path %1.").arg(filename)); } } } @@ -166,7 +167,7 @@ void PythonShell::on_saveScript_clicked() QString filename = RDDialog::getSaveFileName(this, tr("Save Python Script"), QString(), tr("Python scripts (*.py)")); - if(filename != "") + if(!filename.isEmpty()) { QDir dirinfo = QFileInfo(filename).dir(); if(dirinfo.exists()) @@ -204,7 +205,7 @@ void PythonShell::on_runScript_clicked() LambdaThread *thread = new LambdaThread([this, script, context]() { scriptContext = context; - context->executeString("script.py", script); + context->executeString(lit("script.py"), script); scriptContext = NULL; context->Finish(); @@ -242,15 +243,15 @@ void PythonShell::exception(const QString &type, const QString &value, QListtoPlainText().endsWith('\n')) - exString = "\n"; + if(!out->toPlainText().endsWith(QLatin1Char('\n'))) + exString = lit("\n"); if(!frames.isEmpty()) { - exString += "Traceback (most recent call last):\n"; + exString += tr("Traceback (most recent call last):\n"); for(const QString &f : frames) - exString += QString(" %1\n").arg(f); + exString += QFormatStr(" %1\n").arg(f); } - exString += QString("%1: %2\n").arg(type).arg(value); + exString += QFormatStr("%1: %2\n").arg(type).arg(value); appendText(out, exString); } @@ -278,7 +279,7 @@ void PythonShell::interactive_keypress(QKeyEvent *event) moved = true; } - QString workingtext = ""; + QString workingtext; if(event->key() == Qt::Key_Up && historyidx + 1 < history.count()) { diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index f6d734b45..74a3a6dc0 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -62,9 +62,9 @@ ShaderViewer::ShaderViewer(ICaptureContext &ctx, QWidget *parent) // we create this up front so its state stays persistent as much as possible. m_FindReplace = new FindReplace(this); - m_FindResults = MakeEditor("findresults", "", SCLEX_NULL); + m_FindResults = MakeEditor(lit("findresults"), QString(), SCLEX_NULL); m_FindResults->setReadOnly(true); - m_FindResults->setWindowTitle("Find Results"); + m_FindResults->setWindowTitle(lit("Find Results")); // remove margins m_FindResults->setMarginWidthN(0, 0); @@ -85,7 +85,7 @@ ShaderViewer::ShaderViewer(ICaptureContext &ctx, QWidget *parent) { m_DisassemblyView = - MakeEditor("scintillaDisassem", "", + MakeEditor(lit("scintillaDisassem"), QString(), m_Ctx.APIProps().pipelineType == GraphicsAPI::Vulkan ? SCLEX_GLSL : SCLEX_HLSL); m_DisassemblyView->setReadOnly(true); m_DisassemblyView->setWindowTitle(tr("Disassembly")); @@ -228,9 +228,9 @@ void ShaderViewer::editShader(bool customShader, const QString &entryPoint, cons if(files.count() > 2) addFileList(); - m_Errors = MakeEditor("errors", "", SCLEX_NULL); + m_Errors = MakeEditor(lit("errors"), QString(), SCLEX_NULL); m_Errors->setReadOnly(true); - m_Errors->setWindowTitle("Errors"); + m_Errors->setWindowTitle(lit("Errors")); // remove margins m_Errors->setMarginWidthN(0, 0); @@ -262,7 +262,7 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR m_Trace = NULL; if(trace) - setWindowTitle(QString("Debugging %1 - %2") + setWindowTitle(QFormatStr("Debugging %1 - %2") .arg(m_Ctx.CurPipelineState().GetShaderName(stage)) .arg(debugContext)); else @@ -290,7 +290,7 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR { if(trace) setWindowTitle( - QString("Debug %1() - %2").arg(ToQStr(shader->DebugInfo.entryFunc)).arg(debugContext)); + QFormatStr("Debug %1() - %2").arg(ToQStr(shader->DebugInfo.entryFunc)).arg(debugContext)); else setWindowTitle(ToQStr(shader->DebugInfo.entryFunc)); @@ -430,11 +430,11 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR { QString name = s.varName.count == 0 ? ToQStr(s.semanticName) - : QString("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName)); + : QFormatStr("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName)); if(s.semanticName.count == 0) - name = s.varName; + name = ToQStr(s.varName); - QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : ""; + QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : QString(); ui->inputSig->addTopLevelItem(new RDTreeWidgetItem( {name, semIdx, s.regIndex, TypeString(s), ToQStr(s.systemValue), @@ -455,14 +455,14 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR { QString name = s.varName.count == 0 ? ToQStr(s.semanticName) - : QString("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName)); + : QFormatStr("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName)); if(s.semanticName.count == 0) - name = s.varName; + name = ToQStr(s.varName); if(multipleStreams) - name = QString("Stream %1 : %2").arg(s.stream).arg(name); + name = QFormatStr("Stream %1 : %2").arg(s.stream).arg(name); - QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : ""; + QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : QString(); ui->outputSig->addTopLevelItem(new RDTreeWidgetItem( {name, semIdx, s.regIndex, TypeString(s), ToQStr(s.systemValue), @@ -516,7 +516,7 @@ void ShaderViewer::OnEventChanged(uint32_t eventID) ScintillaEdit *ShaderViewer::AddFileScintilla(const QString &name, const QString &text) { ScintillaEdit *scintilla = - MakeEditor("scintilla" + name, text, + MakeEditor(lit("scintilla") + name, text, m_Ctx.APIProps().localRenderer == GraphicsAPI::OpenGL ? SCLEX_GLSL : SCLEX_HLSL); scintilla->setReadOnly(true); scintilla->setWindowTitle(name); @@ -708,9 +708,9 @@ void ShaderViewer::runToCursor() int ShaderViewer::instructionForLine(sptr_t line) { - QString trimmed = m_DisassemblyView->getLine(line).trimmed(); + QString trimmed = QString::fromUtf8(m_DisassemblyView->getLine(line).trimmed()); - int colon = trimmed.indexOf(QChar(':')); + int colon = trimmed.indexOf(QLatin1Char(':')); if(colon > 0) { @@ -794,7 +794,7 @@ RDTreeWidgetItem *ShaderViewer::makeResourceRegister(const BindpointMap &bind, u const BoundResource &bound, const ShaderResource &res) { - QString name = QString(" (%1)").arg(ToQStr(res.name)); + QString name = QFormatStr(" (%1)").arg(ToQStr(res.name)); const TextureDescription *tex = m_Ctx.GetTexture(bound.Id); const BufferDescription *buf = m_Ctx.GetBuffer(bound.Id); @@ -802,26 +802,28 @@ RDTreeWidgetItem *ShaderViewer::makeResourceRegister(const BindpointMap &bind, u if(res.IsSampler) return NULL; - QChar regChar('u'); + QChar regChar(QLatin1Char('u')); if(res.IsReadOnly) - regChar = QChar('t'); + regChar = QLatin1Char('t'); - // %1 = reg prefix (t or u for D3D11) - // %2 = bind slot - // %3 = bind set - // %4 = array index - - const char *fmt = "%1%2"; + QString regname; if(m_Ctx.APIProps().pipelineType == GraphicsAPI::D3D12) - fmt = bind.arraySize == 1 ? "t%3:%2" : "t%3:%2[%4]"; - - QString regname = QString(fmt).arg(regChar).arg(bind.bind).arg(bind.bindset).arg(idx); + { + if(bind.arraySize == 1) + regname = QFormatStr("%1%2:%3").arg(regChar).arg(bind.bindset).arg(bind.bind); + else + regname = QFormatStr("%1%2:%3[%4]").arg(regChar).arg(bind.bindset).arg(bind.bind).arg(idx); + } + else + { + regname = QFormatStr("%1%2").arg(regChar).arg(bind.bind); + } if(tex) { - QString type = QString("%1x%2x%3[%4] @ %5 - %6") + QString type = QFormatStr("%1x%2x%3[%4] @ %5 - %6") .arg(tex->width) .arg(tex->height) .arg(tex->depth > 1 ? tex->depth : tex->arraysize) @@ -829,17 +831,17 @@ RDTreeWidgetItem *ShaderViewer::makeResourceRegister(const BindpointMap &bind, u .arg(ToQStr(tex->format.strname)) .arg(ToQStr(tex->name)); - return new RDTreeWidgetItem({regname + name, "Texture", type}); + return new RDTreeWidgetItem({regname + name, lit("Texture"), type}); } else if(buf) { - QString type = QString("%1 - %2").arg(buf->length).arg(ToQStr(buf->name)); + QString type = QFormatStr("%1 - %2").arg(buf->length).arg(ToQStr(buf->name)); - return new RDTreeWidgetItem({regname + name, "Buffer", type}); + return new RDTreeWidgetItem({regname + name, lit("Buffer"), type}); } else { - return new RDTreeWidgetItem({regname + name, "Resource", "unknown"}); + return new RDTreeWidgetItem({regname + name, lit("Resource"), lit("unknown")}); } } @@ -887,7 +889,7 @@ void ShaderViewer::updateDebugging() for(sptr_t i = 0; i < m_DisassemblyView->lineCount(); i++) { if(QString::fromUtf8(m_DisassemblyView->getLine(i).trimmed()) - .startsWith(QString("%1:").arg(nextInst))) + .startsWith(QFormatStr("%1:").arg(nextInst))) { m_DisassemblyView->markerAdd(i, done ? FINISHED_MARKER : CURRENT_MARKER); m_DisassemblyView->markerAdd(i, done ? FINISHED_MARKER + 1 : CURRENT_MARKER + 1); @@ -912,7 +914,7 @@ void ShaderViewer::updateDebugging() if(m_Trace->cbuffers[i][j].rows > 0 || m_Trace->cbuffers[i][j].columns > 0) { RDTreeWidgetItem *node = - new RDTreeWidgetItem({ToQStr(m_Trace->cbuffers[i][j].name), "cbuffer", + new RDTreeWidgetItem({ToQStr(m_Trace->cbuffers[i][j].name), lit("cbuffer"), stringRep(m_Trace->cbuffers[i][j], false)}); node->setTag(QVariant::fromValue(CBufferTag(i, j))); @@ -928,7 +930,7 @@ void ShaderViewer::updateDebugging() if(input.rows > 0 || input.columns > 0) { RDTreeWidgetItem *node = new RDTreeWidgetItem( - {ToQStr(input.name), ToQStr(input.type) + " input", stringRep(input, true)}); + {ToQStr(input.name), ToQStr(input.type) + lit(" input"), stringRep(input, true)}); node->setTag(QVariant::fromValue(ResourceTag(i))); ui->constants->addTopLevelItem(node); @@ -961,7 +963,7 @@ void ShaderViewer::updateDebugging() { RDTreeWidgetItem *node = new RDTreeWidgetItem({ToQStr(m_ShaderDetails->ReadWriteResources[i].name), - QString("[%1]").arg(bind.arraySize), ""}); + QFormatStr("[%1]").arg(bind.arraySize), QString()}); for(uint32_t a = 0; a < bind.arraySize; a++) node->addChild( @@ -992,7 +994,7 @@ void ShaderViewer::updateDebugging() { RDTreeWidgetItem *node = new RDTreeWidgetItem({ToQStr(m_ShaderDetails->ReadOnlyResources[i].name), - QString("[%1]").arg(bind.arraySize), ""}); + QFormatStr("[%1]").arg(bind.arraySize), QString()}); for(uint32_t a = 0; a < bind.arraySize; a++) node->addChild( @@ -1015,20 +1017,21 @@ void ShaderViewer::updateDebugging() { for(int i = 0; i < state.registers.count; i++) ui->variables->addTopLevelItem( - new RDTreeWidgetItem({ToQStr(state.registers[i].name), "temporary", ""})); + new RDTreeWidgetItem({ToQStr(state.registers[i].name), lit("temporary"), QString()})); for(int i = 0; i < state.indexableTemps.count; i++) { - RDTreeWidgetItem *node = new RDTreeWidgetItem({QString("x%1").arg(i), "indexable", ""}); + RDTreeWidgetItem *node = + new RDTreeWidgetItem({QFormatStr("x%1").arg(i), lit("indexable"), QString()}); for(int t = 0; t < state.indexableTemps[i].count; t++) - node->addChild( - new RDTreeWidgetItem({ToQStr(state.indexableTemps[i][t].name), "indexable", ""})); + node->addChild(new RDTreeWidgetItem( + {ToQStr(state.indexableTemps[i][t].name), lit("indexable"), QString()})); ui->variables->addTopLevelItem(node); } for(int i = 0; i < state.outputs.count; i++) ui->variables->addTopLevelItem( - new RDTreeWidgetItem({ToQStr(state.outputs[i].name), "output", ""})); + new RDTreeWidgetItem({ToQStr(state.outputs[i].name), lit("output"), QString()})); } ui->variables->setUpdatesEnabled(false); @@ -1559,7 +1562,7 @@ void ShaderViewer::find(bool down) FindReplace::SearchContext context = m_FindReplace->context(); - QString findHash = QString("%1%2%3").arg(find).arg(flags).arg((int)context); + QString findHash = QFormatStr("%1%2%3").arg(find).arg(flags).arg((int)context); if(findHash != m_FindState.hash) { @@ -1706,11 +1709,11 @@ void ShaderViewer::performFindAll() QString lineText = QString::fromUtf8(s->textRange(lineStart, lineEnd)); - results += QString(" %1(%2): ").arg(s->windowTitle()).arg(line, 4); + results += QFormatStr(" %1(%2): ").arg(s->windowTitle()).arg(line, 4); int startPos = results.length(); results += lineText; - results += "\n"; + results += lit("\n"); resultList.push_back( qMakePair(result.first - lineStart + startPos, result.second - lineStart + startPos)); @@ -1772,7 +1775,7 @@ void ShaderViewer::performReplace() FindReplace::SearchContext context = m_FindReplace->context(); - QString findHash = QString("%1%2%3").arg(find).arg(flags).arg((int)context); + QString findHash = QFormatStr("%1%2%3").arg(find).arg(flags).arg((int)context); // if we didn't have a valid previous find, just do a find and bail if(findHash != m_FindState.hash) diff --git a/qrenderdoc/Windows/ShaderViewer.h b/qrenderdoc/Windows/ShaderViewer.h index 796197553..51a331787 100644 --- a/qrenderdoc/Windows/ShaderViewer.h +++ b/qrenderdoc/Windows/ShaderViewer.h @@ -71,7 +71,7 @@ public: static IShaderViewer *ViewShader(ICaptureContext &ctx, const ShaderBindpointMapping *bind, const ShaderReflection *shader, ShaderStage stage, QWidget *parent) { - return DebugShader(ctx, bind, shader, stage, NULL, "", parent); + return DebugShader(ctx, bind, shader, stage, NULL, QString(), parent); } ~ShaderViewer(); diff --git a/qrenderdoc/Windows/StatisticsViewer.cpp b/qrenderdoc/Windows/StatisticsViewer.cpp index ffe2604ae..be8c08a03 100644 --- a/qrenderdoc/Windows/StatisticsViewer.cpp +++ b/qrenderdoc/Windows/StatisticsViewer.cpp @@ -27,7 +27,7 @@ #include "ui_StatisticsViewer.h" static const int HistogramWidth = 128; -static const QString Stars = QString(HistogramWidth, QChar('*')); +static const QString Stars = QString(HistogramWidth, QLatin1Char('*')); QString Pow2IndexAsReadable(int index) { @@ -36,16 +36,16 @@ QString Pow2IndexAsReadable(int index) if(value >= (1024 * 1024)) { float slice = (float)value / (1024 * 1024); - return QString("%1MB").arg(Formatter::Format(slice)); + return QFormatStr("%1MB").arg(Formatter::Format(slice)); } else if(value >= 1024) { float slice = (float)value / 1024; - return QString("%1KB").arg(Formatter::Format(slice)); + return QFormatStr("%1KB").arg(Formatter::Format(slice)); } else { - return QString("%1B").arg(Formatter::Format((float)value)); + return QFormatStr("%1B").arg(Formatter::Format((float)value)); } } @@ -62,9 +62,9 @@ int SliceForString(const QString &s, uint32_t value, uint32_t maximum) QString CountOrEmpty(uint32_t count) { if(count == 0) - return ""; + return QString(); else - return QString("(%1)").arg(count); + return QFormatStr("(%1)").arg(count); } QString CreateSimpleIntegerHistogram(const QString &legend, const rdctype::array &array) @@ -80,13 +80,13 @@ QString CreateSimpleIntegerHistogram(const QString &legend, const rdctype::array maxCount = qMax(maxCount, value); } - QString text = QString("\n%1:\n").arg(legend); + QString text = QFormatStr("\n%1:\n").arg(legend); for(int o = 0; o <= maxWithValue; o++) { uint32_t count = array[o]; int slice = SliceForString(Stars, count, maxCount); - text += QString("%1: %2 %3\n").arg(o, 4).arg(Stars.left(slice)).arg(CountOrEmpty(count)); + text += QFormatStr("%1: %2 %3\n").arg(o, 4).arg(Stars.left(slice)).arg(CountOrEmpty(count)); } return text; @@ -101,7 +101,7 @@ void StatisticsViewer::AppendDrawStatistics() m_Report.append(tr("\n*** Draw Statistics ***\n\n")); - m_Report.append(QString("Total calls: %1, instanced: %2, indirect: %3\n") + m_Report.append(tr("Total calls: %1, instanced: %2, indirect: %3\n") .arg(draws.calls) .arg(draws.instanced) .arg(draws.indirect)); @@ -124,8 +124,8 @@ void StatisticsViewer::AppendDrawStatistics() { uint32_t count = draws.counts[s]; int slice = SliceForString(Stars, count, maxCount); - m_Report.append(QString("%1%2: %3 %4\n") - .arg((s == maximum - 1) ? ">=" : " ") + m_Report.append(QFormatStr("%1%2: %3 %4\n") + .arg((s == maximum - 1) ? lit(">=") : lit(" ")) .arg(s, 2) .arg(Stars.left(slice)) .arg(CountOrEmpty(count))); @@ -138,7 +138,7 @@ void StatisticsViewer::AppendDispatchStatistics() const FrameDescription &frameInfo = m_Ctx.FrameInfo(); m_Report.append(tr("\n*** Dispatch Statistics ***\n\n")); - m_Report.append(QString("Total calls: %1, indirect: %2\n") + m_Report.append(tr("Total calls: %1, indirect: %2\n") .arg(frameInfo.stats.dispatches.calls) .arg(frameInfo.stats.dispatches.indirect)); } @@ -152,24 +152,22 @@ void StatisticsViewer::AppendInputAssemblerStatistics() const VertexBindStats &vertices = frameInfo.stats.vertices; - m_Report.append("\n*** Input Assembler Statistics ***\n\n"); + m_Report.append(tr("\n*** Input Assembler Statistics ***\n\n")); - m_Report.append(QString("Total index calls: %1, non-null index sets: %2, null index sets: %3\n") + m_Report.append(tr("Total index calls: %1, non-null index sets: %2, null index sets: %3\n") .arg(indices.calls) .arg(indices.sets) .arg(indices.nulls)); - m_Report.append( - QString("Total layout calls: %1, non-null layout sets: %2, null layout sets: %3\n") - .arg(layouts.calls) - .arg(layouts.sets) - .arg(layouts.nulls)); - m_Report.append( - QString("Total vertex calls: %1, non-null vertex sets: %2, null vertex sets: %3\n") - .arg(vertices.calls) - .arg(vertices.sets) - .arg(vertices.nulls)); + m_Report.append(tr("Total layout calls: %1, non-null layout sets: %2, null layout sets: %3\n") + .arg(layouts.calls) + .arg(layouts.sets) + .arg(layouts.nulls)); + m_Report.append(tr("Total vertex calls: %1, non-null vertex sets: %2, null vertex sets: %3\n") + .arg(vertices.calls) + .arg(vertices.sets) + .arg(vertices.nulls)); - m_Report.append(CreateSimpleIntegerHistogram("Aggregate vertex slot counts per invocation", + m_Report.append(CreateSimpleIntegerHistogram(tr("Aggregate vertex slot counts per invocation"), vertices.bindslots)); } @@ -188,12 +186,12 @@ void StatisticsViewer::AppendShaderStatistics() totalShadersPerStage.redundants += shaders[s].redundants; } - m_Report.append("\n*** Shader Set Statistics ***\n\n"); + m_Report.append(tr("\n*** Shader Set Statistics ***\n\n")); for(auto s : indices()) { - m_Report.append(QString("%1 calls: %2, non-null shader sets: %3, null shader sets: %4, " - "redundant shader sets: %5\n") + m_Report.append(tr("%1 calls: %2, non-null shader sets: %3, null shader sets: %4, " + "redundant shader sets: %5\n") .arg(m_Ctx.CurPipelineState().Abbrev(StageFromIndex(s))) .arg(shaders[s].calls) .arg(shaders[s].sets) @@ -201,8 +199,8 @@ void StatisticsViewer::AppendShaderStatistics() .arg(shaders[s].redundants)); } - m_Report.append(QString("Total calls: %1, non-null shader sets: %2, null shader sets: %3, " - "reundant shader sets: %4\n") + m_Report.append(tr("Total calls: %1, non-null shader sets: %2, null shader sets: %3, " + "reundant shader sets: %4\n") .arg(totalShadersPerStage.calls) .arg(totalShadersPerStage.sets) .arg(totalShadersPerStage.nulls) @@ -265,26 +263,27 @@ void StatisticsViewer::AppendConstantBindStatistics() totalConstantsForAllStages.sizes[z] += perStage.sizes[z]; } - m_Report.append("\n*** Constant Bind Statistics ***\n\n"); + m_Report.append(tr("\n*** Constant Bind Statistics ***\n\n")); for(auto s : indices()) { - m_Report.append(QString("%1 calls: %2, non-null buffer sets: %3, null buffer sets: %4\n") + m_Report.append(tr("%1 calls: %2, non-null buffer sets: %3, null buffer sets: %4\n") .arg(m_Ctx.CurPipelineState().Abbrev(StageFromIndex(s))) .arg(totalConstantsPerStage[s].calls) .arg(totalConstantsPerStage[s].sets) .arg(totalConstantsPerStage[s].nulls)); } - m_Report.append(QString("Total calls: %1, non-null buffer sets: %2, null buffer sets: %3\n") + m_Report.append(tr("Total calls: %1, non-null buffer sets: %2, null buffer sets: %3\n") .arg(totalConstantsForAllStages.calls) .arg(totalConstantsForAllStages.sets) .arg(totalConstantsForAllStages.nulls)); - m_Report.append(CreateSimpleIntegerHistogram( - "Aggregate slot counts per invocation across all stages", totalConstantsForAllStages.bindslots)); + m_Report.append( + CreateSimpleIntegerHistogram(tr("Aggregate slot counts per invocation across all stages"), + totalConstantsForAllStages.bindslots)); - m_Report.append("\nAggregate constant buffer sizes across all stages:\n"); + m_Report.append(tr("\nAggregate constant buffer sizes across all stages:\n")); uint32_t maxCount = 0; int maxWithValue = 0; for(int s = 0; s < totalConstantsForAllStages.sizes.count; s++) @@ -299,7 +298,7 @@ void StatisticsViewer::AppendConstantBindStatistics() { uint32_t count = totalConstantsForAllStages.sizes[s]; int slice = SliceForString(Stars, count, maxCount); - m_Report.append(QString("%1: %2 %3\n") + m_Report.append(QFormatStr("%1: %2 %3\n") .arg(Pow2IndexAsReadable(s), 8) .arg(Stars.left(slice)) .arg(CountOrEmpty(count))); @@ -351,24 +350,25 @@ void StatisticsViewer::AppendSamplerBindStatistics() } } - m_Report.append("\n*** Sampler Bind Statistics ***\n\n"); + m_Report.append(tr("\n*** Sampler Bind Statistics ***\n\n")); for(auto s : indices()) { - m_Report.append(QString("%1 calls: %2, non-null sampler sets: %3, null sampler sets: %4\n") + m_Report.append(tr("%1 calls: %2, non-null sampler sets: %3, null sampler sets: %4\n") .arg(m_Ctx.CurPipelineState().Abbrev(StageFromIndex(s))) .arg(totalSamplersPerStage[s].calls) .arg(totalSamplersPerStage[s].sets) .arg(totalSamplersPerStage[s].nulls)); } - m_Report.append(QString("Total calls: %1, non-null sampler sets: %2, null sampler sets: %3\n") + m_Report.append(tr("Total calls: %1, non-null sampler sets: %2, null sampler sets: %3\n") .arg(totalSamplersForAllStages.calls) .arg(totalSamplersForAllStages.sets) .arg(totalSamplersForAllStages.nulls)); - m_Report.append(CreateSimpleIntegerHistogram( - "Aggregate slot counts per invocation across all stages", totalSamplersForAllStages.bindslots)); + m_Report.append( + CreateSimpleIntegerHistogram(tr("Aggregate slot counts per invocation across all stages"), + totalSamplersForAllStages.bindslots)); } void StatisticsViewer::AppendResourceBindStatistics() @@ -427,18 +427,18 @@ void StatisticsViewer::AppendResourceBindStatistics() } } - m_Report.append("\n*** Resource Bind Statistics ***\n\n"); + m_Report.append(tr("\n*** Resource Bind Statistics ***\n\n")); for(auto s : indices()) { - m_Report.append(QString("%1 calls: %2 non-null resource sets: %3 null resource sets: %4\n") + m_Report.append(tr("%1 calls: %2 non-null resource sets: %3 null resource sets: %4\n") .arg(m_Ctx.CurPipelineState().Abbrev(StageFromIndex(s))) .arg(totalResourcesPerStage[s].calls) .arg(totalResourcesPerStage[s].sets) .arg(totalResourcesPerStage[s].nulls)); } - m_Report.append(QString("Total calls: %1 non-null resource sets: %2 null resource sets: %3\n") + m_Report.append(tr("Total calls: %1 non-null resource sets: %2 null resource sets: %3\n") .arg(totalResourcesForAllStages.calls) .arg(totalResourcesForAllStages.sets) .arg(totalResourcesForAllStages.nulls)); @@ -446,7 +446,7 @@ void StatisticsViewer::AppendResourceBindStatistics() uint32_t maxCount = 0; int maxWithCount = 0; - m_Report.append("\nResource types across all stages:\n"); + m_Report.append(tr("\nResource types across all stages:\n")); for(int s = 0; s < totalResourcesForAllStages.types.count; s++) { uint32_t count = totalResourcesForAllStages.types[s]; @@ -461,11 +461,12 @@ void StatisticsViewer::AppendResourceBindStatistics() int slice = SliceForString(Stars, count, maxCount); TextureDim type = (TextureDim)s; m_Report.append( - QString("%1: %2 %3\n").arg(ToQStr(type), 20).arg(Stars.left(slice)).arg(CountOrEmpty(count))); + QFormatStr("%1: %2 %3\n").arg(ToQStr(type), 20).arg(Stars.left(slice)).arg(CountOrEmpty(count))); } - m_Report.append(CreateSimpleIntegerHistogram( - "Aggregate slot counts per invocation across all stages", totalResourcesForAllStages.bindslots)); + m_Report.append( + CreateSimpleIntegerHistogram(tr("Aggregate slot counts per invocation across all stages"), + totalResourcesForAllStages.bindslots)); } void StatisticsViewer::AppendUpdateStatistics() @@ -494,14 +495,14 @@ void StatisticsViewer::AppendUpdateStatistics() totalUpdates.sizes[t] += updates.sizes[t]; } - m_Report.append("\n*** Resource Update Statistics ***\n\n"); + m_Report.append(tr("\n*** Resource Update Statistics ***\n\n")); - m_Report.append(QString("Total calls: %1, client-updated memory: %2, server-updated memory: %3\n") + m_Report.append(tr("Total calls: %1, client-updated memory: %2, server-updated memory: %3\n") .arg(totalUpdates.calls) .arg(totalUpdates.clients) .arg(totalUpdates.servers)); - m_Report.append("\nUpdated resource types:\n"); + m_Report.append(tr("\nUpdated resource types:\n")); uint32_t maxCount = 0; int maxWithValue = 0; for(int s = 1; s < totalUpdates.types.count; s++) @@ -518,10 +519,10 @@ void StatisticsViewer::AppendUpdateStatistics() int slice = SliceForString(Stars, count, maxCount); TextureDim type = (TextureDim)s; m_Report.append( - QString("%1: %2 %3\n").arg(ToQStr(type), 20).arg(Stars.left(slice)).arg(CountOrEmpty(count))); + QFormatStr("%1: %2 %3\n").arg(ToQStr(type), 20).arg(Stars.left(slice)).arg(CountOrEmpty(count))); } - m_Report.append("\nUpdated resource sizes:\n"); + m_Report.append(tr("\nUpdated resource sizes:\n")); maxCount = 0; maxWithValue = 0; for(int s = 0; s < totalUpdates.sizes.count; s++) @@ -536,7 +537,7 @@ void StatisticsViewer::AppendUpdateStatistics() { uint32_t count = totalUpdates.sizes[s]; int slice = SliceForString(Stars, count, maxCount); - m_Report.append(QString("%1: %2 %3\n") + m_Report.append(QFormatStr("%1: %2 %3\n") .arg(Pow2IndexAsReadable(s), 8) .arg(Stars.left(slice)) .arg(CountOrEmpty(count))); @@ -548,9 +549,9 @@ void StatisticsViewer::AppendBlendStatistics() const FrameDescription &frameInfo = m_Ctx.FrameInfo(); BlendStats blends = frameInfo.stats.blends; - m_Report.append("\n*** Blend Statistics ***\n"); + m_Report.append(tr("\n*** Blend Statistics ***\n")); m_Report.append( - QString("Blend calls: %1 non-null sets: %2, null (default) sets: %3, redundant sets: %4\n") + tr("Blend calls: %1 non-null sets: %2, null (default) sets: %3, redundant sets: %4\n") .arg(blends.calls) .arg(blends.sets) .arg(blends.nulls) @@ -562,9 +563,9 @@ void StatisticsViewer::AppendDepthStencilStatistics() const FrameDescription &frameInfo = m_Ctx.FrameInfo(); DepthStencilStats depths = frameInfo.stats.depths; - m_Report.append("\n*** Depth Stencil Statistics ***\n"); - m_Report.append(QString("Depth/stencil calls: %1 non-null sets: %2, null (default) sets: " - "%3, redundant sets: %4\n") + m_Report.append(tr("\n*** Depth Stencil Statistics ***\n")); + m_Report.append(tr("Depth/stencil calls: %1 non-null sets: %2, null (default) sets: " + "%3, redundant sets: %4\n") .arg(depths.calls) .arg(depths.sets) .arg(depths.nulls) @@ -576,15 +577,15 @@ void StatisticsViewer::AppendRasterizationStatistics() const FrameDescription &frameInfo = m_Ctx.FrameInfo(); RasterizationStats rasters = frameInfo.stats.rasters; - m_Report.append("\n*** Rasterization Statistics ***\n"); - m_Report.append(QString("Rasterization calls: %1 non-null sets: %2, null (default) sets: " - "%3, redundant sets: %4\n") + m_Report.append(tr("\n*** Rasterization Statistics ***\n")); + m_Report.append(tr("Rasterization calls: %1 non-null sets: %2, null (default) sets: " + "%3, redundant sets: %4\n") .arg(rasters.calls) .arg(rasters.sets) .arg(rasters.nulls) .arg(rasters.redundants)); - m_Report.append(CreateSimpleIntegerHistogram("Viewports set", rasters.viewports)); - m_Report.append(CreateSimpleIntegerHistogram("Scissors set", rasters.rects)); + m_Report.append(CreateSimpleIntegerHistogram(tr("Viewports set"), rasters.viewports)); + m_Report.append(CreateSimpleIntegerHistogram(tr("Scissors set"), rasters.rects)); } void StatisticsViewer::AppendOutputStatistics() @@ -592,12 +593,12 @@ void StatisticsViewer::AppendOutputStatistics() const FrameDescription &frameInfo = m_Ctx.FrameInfo(); OutputTargetStats outputs = frameInfo.stats.outputs; - m_Report.append("\n*** Output Statistics ***\n"); - m_Report.append(QString("Output calls: %1 non-null sets: %2, null sets: %3\n") + m_Report.append(tr("\n*** Output Statistics ***\n")); + m_Report.append(tr("Output calls: %1 non-null sets: %2, null sets: %3\n") .arg(outputs.calls) .arg(outputs.sets) .arg(outputs.nulls)); - m_Report.append(CreateSimpleIntegerHistogram("Outputs set", outputs.bindslots)); + m_Report.append(CreateSimpleIntegerHistogram(tr("Outputs set"), outputs.bindslots)); } void StatisticsViewer::AppendDetailedInformation() @@ -669,16 +670,16 @@ void StatisticsViewer::AppendAPICallSummary() uint32_t numRasterizationSets = frameInfo.stats.rasters.calls; uint32_t numOutputSets = frameInfo.stats.outputs.calls; - m_Report += QString("\tIndex/vertex bind calls: %1\n").arg(numIndexVertexSets); - m_Report += QString("\tConstant bind calls: %1\n").arg(numConstantSets); - m_Report += QString("\tSampler bind calls: %1\n").arg(numSamplerSets); - m_Report += QString("\tResource bind calls: %1\n").arg(numResourceSets); - m_Report += QString("\tShader set calls: %1\n").arg(numShaderSets); - m_Report += QString("\tBlend set calls: %1\n").arg(numBlendSets); - m_Report += QString("\tDepth/stencil set calls: %1\n").arg(numDepthStencilSets); - m_Report += QString("\tRasterization set calls: %1\n").arg(numRasterizationSets); - m_Report += QString("\tResource update calls: %1\n").arg(numResourceUpdates); - m_Report += QString("\tOutput set calls: %1\n").arg(numOutputSets); + m_Report += tr("\tIndex/vertex bind calls: %1\n").arg(numIndexVertexSets); + m_Report += tr("\tConstant bind calls: %1\n").arg(numConstantSets); + m_Report += tr("\tSampler bind calls: %1\n").arg(numSamplerSets); + m_Report += tr("\tResource bind calls: %1\n").arg(numResourceSets); + m_Report += tr("\tShader set calls: %1\n").arg(numShaderSets); + m_Report += tr("\tBlend set calls: %1\n").arg(numBlendSets); + m_Report += tr("\tDepth/stencil set calls: %1\n").arg(numDepthStencilSets); + m_Report += tr("\tRasterization set calls: %1\n").arg(numRasterizationSets); + m_Report += tr("\tResource update calls: %1\n").arg(numResourceUpdates); + m_Report += tr("\tOutput set calls: %1\n").arg(numOutputSets); } void StatisticsViewer::GenerateReport() @@ -763,22 +764,19 @@ void StatisticsViewer::GenerateReport() float initDataMB = (float)frameInfo.initDataSize / (1024.0f * 1024.0f); QString header = - QString( - "Stats for %1.\n\nFile size: %2MB (%3MB uncompressed, compression ratio %4:1)\n" - "Persistent Data (approx): %5MB, Frame-initial data (approx): %6MB\n") + tr("Stats for %1.\n\nFile size: %2MB (%3MB uncompressed, compression ratio %4:1)\n" + "Persistent Data (approx): %5MB, Frame-initial data (approx): %6MB\n") .arg(QFileInfo(m_Ctx.LogFilename()).fileName()) .arg(compressedMB, 2, 'f', 2) .arg(uncompressedMB, 2, 'f', 2) .arg(compressRatio, 2, 'f', 2) .arg(persistentMB, 2, 'f', 2) .arg(initDataMB, 2, 'f', 2); - QString drawList = - QString("Draw calls: %1\nDispatch calls: %2\n").arg(drawCount).arg(dispatchCount); - QString ratio = QString("API:Draw/Dispatch call ratio: %1\n\n") + QString drawList = tr("Draw calls: %1\nDispatch calls: %2\n").arg(drawCount).arg(dispatchCount); + QString ratio = tr("API:Draw/Dispatch call ratio: %1\n\n") .arg((float)numAPIcalls / (float)(drawCount + dispatchCount)); - QString textures = QString( - "%1 Textures - %2 MB (%3 MB over 32x32), %4 RTs - %5 MB.\n" - "Avg. tex dimension: %6x%7 (%8x%9 over 32x32)\n") + QString textures = tr("%1 Textures - %2 MB (%3 MB over 32x32), %4 RTs - %5 MB.\n" + "Avg. tex dimension: %6x%7 (%8x%9 over 32x32)\n") .arg(numTextures) .arg((float)TexBytes / (1024.0f * 1024.0f), 2, 'f', 2) .arg((float)LargeTexBytes / (1024.0f * 1024.0f), 2, 'f', 2) @@ -788,19 +786,19 @@ void StatisticsViewer::GenerateReport() .arg(texH) .arg(largeTexW) .arg(largeTexH); - QString buffers = QString("%1 Buffers - %2 MB total %3 MB IBs %4 MB VBs.\n") + QString buffers = tr("%1 Buffers - %2 MB total %3 MB IBs %4 MB VBs.\n") .arg(numBuffers) .arg((float)BufBytes / (1024.0f * 1024.0f), 2, 'f', 2) .arg((float)IBBytes / (1024.0f * 1024.0f), 2, 'f', 2) .arg((float)VBBytes / (1024.0f * 1024.0f), 2, 'f', 2); - QString load = QString("%1 MB - Grand total GPU buffer + texture load.\n") + QString load = tr("%1 MB - Grand total GPU buffer + texture load.\n") .arg((float)(TexBytes + BufBytes + RTBytes) / (1024.0f * 1024.0f), 2, 'f', 2); m_Report = header; - m_Report.append("\n*** Summary ***\n\n"); + m_Report.append(tr("\n*** Summary ***\n\n")); m_Report.append(drawList); - m_Report += tr("API calls: %1\n").arg(numAPICalls); + m_Report += tr("API calls: %1\n").arg(numAPIcalls); AppendAPICallSummary(); m_Report.append(ratio); m_Report.append(textures); diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index bb6657c2f..c6069493b 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -358,7 +358,7 @@ public: { if(filter.isEmpty()) texs.push_back(t); - else if(QString(t.name).contains(filter, Qt::CaseInsensitive)) + else if(ToQStr(t.name).contains(filter, Qt::CaseInsensitive)) texs.push_back(t); } } @@ -392,7 +392,7 @@ public: if(role == Qt::DisplayRole) { if(index.row() >= 0 && index.row() < texs.count()) - return QVariant(texs[index.row()].name); + return ToQStr(texs[index.row()].name); } if(role == Qt::UserRole) @@ -612,9 +612,10 @@ TextureViewer::TextureViewer(ICaptureContext &ctx, QWidget *parent) ui->channels->addItems({tr("RGBA"), tr("RGBM"), tr("Custom")}); - ui->zoomOption->addItems({"10%", "25%", "50%", "75%", "100%", "200%", "400%", "800%"}); + ui->zoomOption->addItems({lit("10%"), lit("25%"), lit("50%"), lit("75%"), lit("100%"), + lit("200%"), lit("400%"), lit("800%")}); - ui->hdrMul->addItems({"2", "4", "8", "16", "32", "128"}); + ui->hdrMul->addItems({lit("2"), lit("4"), lit("8"), lit("16"), lit("32"), lit("128")}); ui->overlay->addItems({tr("None"), tr("Highlight Drawcall"), tr("Wireframe Mesh"), tr("Depth Test"), tr("Stencil Test"), tr("Backface Cull"), @@ -623,13 +624,13 @@ TextureViewer::TextureViewer(ICaptureContext &ctx, QWidget *parent) tr("Quad Overdraw (Pass)"), tr("Quad Overdraw (Draw)"), tr("Triangle Size (Pass)"), tr("Triangle Size (Draw)")}); - ui->textureListFilter->addItems({"", "Textures", "Render Targets"}); + ui->textureListFilter->addItems({QString(), tr("Textures"), tr("Render Targets")}); ui->textureList->setModel(new TextureListItemModel(this)); ui->textureList->setItemDelegate(new TextureListItemDelegate(ui->textureList)); ui->textureList->viewport()->setAttribute(Qt::WA_Hover); - ui->zoomOption->setCurrentText(""); + ui->zoomOption->setCurrentText(QString()); ui->fitToWindow->toggle(); SetupTextureTabs(); @@ -804,7 +805,7 @@ void TextureViewer::UI_UpdateStatusText() float invWidth = mipWidth > 0 ? 1.0f / mipWidth : 0.0f; float invHeight = mipHeight > 0 ? 1.0f / mipHeight : 0.0f; - QString hoverCoords = QString("%1, %2 (%3, %4)") + QString hoverCoords = QFormatStr("%1, %2 (%3, %4)") .arg(x, 4) .arg(y, 4) .arg((x * invWidth), 5, 'f', 4) @@ -816,7 +817,7 @@ void TextureViewer::UI_UpdateStatusText() uint32_t hoverY = (uint32_t)m_CurHoverPixel.y(); if(hoverX > tex.width || hoverY > tex.height) - statusText = tr("Hover - ") + "[" + hoverCoords + "]"; + statusText = tr("Hover - [%1]").arg(hoverCoords); if(m_PickedPoint.x() >= 0) { @@ -829,15 +830,17 @@ void TextureViewer::UI_UpdateStatusText() y = qMax(0, y); - statusText += tr(" - Right click - ") + QString("%1, %2: ").arg(x, 4).arg(y, 4); + statusText += tr(" - Right click - %1, %2: ").arg(x, 4).arg(y, 4); PixelValue val = m_CurPixelValue; if(m_TexDisplay.CustomShader != ResourceId()) { - statusText += Formatter::Format(val.value_f[0]) + ", " + Formatter::Format(val.value_f[1]) + - ", " + Formatter::Format(val.value_f[2]) + ", " + - Formatter::Format(val.value_f[3]); + statusText += QFormatStr("%1, %2, %3, %4") + .arg(Formatter::Format(val.value_f[0])) + .arg(Formatter::Format(val.value_f[1])) + .arg(Formatter::Format(val.value_f[2])) + .arg(Formatter::Format(val.value_f[3])); val = m_CurRealValue; @@ -867,26 +870,32 @@ void TextureViewer::UI_UpdateStatusText() { if(uintTex) { - statusText += Formatter::Format(val.value_u[0]) + ", " + Formatter::Format(val.value_u[1]) + - ", " + Formatter::Format(val.value_u[2]) + ", " + - Formatter::Format(val.value_u[3]); + statusText += QFormatStr("%1, %2, %3, %4") + .arg(Formatter::Format(val.value_u[0])) + .arg(Formatter::Format(val.value_u[1])) + .arg(Formatter::Format(val.value_u[2])) + .arg(Formatter::Format(val.value_u[3])); } else if(sintTex) { - statusText += Formatter::Format(val.value_i[0]) + ", " + Formatter::Format(val.value_i[1]) + - ", " + Formatter::Format(val.value_i[2]) + ", " + - Formatter::Format(val.value_i[3]); + statusText += QFormatStr("%1, %2, %3, %4") + .arg(Formatter::Format(val.value_i[0])) + .arg(Formatter::Format(val.value_i[1])) + .arg(Formatter::Format(val.value_i[2])) + .arg(Formatter::Format(val.value_i[3])); } else { - statusText += Formatter::Format(val.value_f[0]) + ", " + Formatter::Format(val.value_f[1]) + - ", " + Formatter::Format(val.value_f[2]) + ", " + - Formatter::Format(val.value_f[3]); + statusText += QFormatStr("%1, %2, %3, %4") + .arg(Formatter::Format(val.value_f[0])) + .arg(Formatter::Format(val.value_f[1])) + .arg(Formatter::Format(val.value_f[2])) + .arg(Formatter::Format(val.value_f[3])); } } if(m_TexDisplay.CustomShader != ResourceId()) - statusText += ")"; + statusText += lit(")"); // PixelPicked = true; } @@ -910,7 +919,7 @@ void TextureViewer::UI_UpdateStatusText() m_HighWaterStatusLength = statusText.length(); if(statusText.length() < m_HighWaterStatusLength) - statusText += QString(m_HighWaterStatusLength - statusText.length(), ' '); + statusText += QString(m_HighWaterStatusLength - statusText.length(), QLatin1Char(' ')); ui->statusText->setText(statusText); } @@ -947,9 +956,9 @@ void TextureViewer::UI_UpdateTextureDetails() QString name; if(followtex) - name = followtex->name; + name = ToQStr(followtex->name); else - name = followbuf->name; + name = ToQStr(followbuf->name); switch(m_Following.Type) { @@ -985,24 +994,24 @@ void TextureViewer::UI_UpdateTextureDetails() ui->renderContainer->setWindowTitle(title); } - status = QString(current.name) + " - "; + status = ToQStr(current.name) + lit(" - "); if(current.dimension >= 1) status += QString::number(current.width); if(current.dimension >= 2) - status += "x" + QString::number(current.height); + status += lit("x") + QString::number(current.height); if(current.dimension >= 3) - status += "x" + QString::number(current.depth); + status += lit("x") + QString::number(current.depth); if(current.arraysize > 1) - status += "[" + QString::number(current.arraysize) + "]"; + status += QFormatStr("[%1]").arg(QString::number(current.arraysize)); if(current.msQual > 0 || current.msSamp > 1) - status += QString(" MS{%1x %2Q}").arg(current.msSamp).arg(current.msQual); + status += QFormatStr(" MS{%1x %2Q}").arg(current.msSamp).arg(current.msQual); - status += QString(" %1 mips").arg(current.mips); + status += QFormatStr(" %1 mips").arg(current.mips); - status += " - " + QString(current.format.strname); + status += lit(" - ") + ToQStr(current.format.strname); if(current.format.compType != m_TexDisplay.typeHint && m_TexDisplay.typeHint != CompType::Typeless) { @@ -1114,7 +1123,7 @@ void TextureViewer::UI_OnTextureSelectionChanged(bool newdraw) if(tex.msSamp > 1) { for(uint32_t i = 0; i < tex.msSamp; i++) - ui->mipLevel->addItem(QString("Sample %1").arg(i)); + ui->mipLevel->addItem(tr("Sample %1").arg(i)); // add an option to display unweighted average resolved value, // to get an idea of how the samples average @@ -1129,9 +1138,8 @@ void TextureViewer::UI_OnTextureSelectionChanged(bool newdraw) else { for(uint32_t i = 0; i < tex.mips; i++) - ui->mipLevel->addItem(QString::number(i) + QString(" - ") + - QString::number(qMax(1U, tex.width >> i)) + QString("x") + - QString::number(qMax(1U, tex.height >> i))); + ui->mipLevel->addItem( + QFormatStr("%1 - %2x%3").arg(i).arg(qMax(1U, tex.width >> i)).arg(qMax(1U, tex.height >> i))); ui->mipLabel->setText(tr("Mip")); @@ -1174,7 +1182,7 @@ void TextureViewer::UI_OnTextureSelectionChanged(bool newdraw) { ui->sliceFace->setEnabled(true); - QString cubeFaces[] = {"X+", "X-", "Y+", "Y-", "Z+", "Z-"}; + QString cubeFaces[] = {lit("X+"), lit("X-"), lit("Y+"), lit("Y-"), lit("Z+"), lit("Z-")}; uint32_t numSlices = tex.arraysize; @@ -1188,7 +1196,7 @@ void TextureViewer::UI_OnTextureSelectionChanged(bool newdraw) { QString name = cubeFaces[i % 6]; if(numSlices > 6) - name = QString("[%1] %2").arg(i / 6).arg( + name = QFormatStr("[%1] %2").arg(i / 6).arg( cubeFaces[i % 6]); // Front 1, Back 2, 3, 4 etc for cube arrays ui->sliceFace->addItem(name); } @@ -1257,7 +1265,7 @@ void TextureViewer::UI_OnTextureSelectionChanged(bool newdraw) // if we are using per-tex settings, reset back to RGB ui->channels->setCurrentIndex(0); - ui->customShader->setCurrentText(""); + ui->customShader->setCurrentText(QString()); ui->channelRed->setChecked(true); ui->channelGreen->setChecked(true); @@ -1441,7 +1449,7 @@ void TextureViewer::UI_UpdateChannels() if(!ok) { mul = 32.0f; - ui->hdrMul->setCurrentText("32"); + ui->hdrMul->setCurrentText(lit("32")); } m_TexDisplay.HDRMul = mul; @@ -1672,7 +1680,7 @@ void TextureViewer::ViewTexture(ResourceId ID, bool focus) if(tex) { QWidget *lockedContainer = new QWidget(this); - lockedContainer->setWindowTitle(QString(tex->name)); + lockedContainer->setWindowTitle(ToQStr(tex->name)); lockedContainer->setProperty("id", QVariant::fromValue(ID)); ToolWindowManagerArea *textureTabs = ui->dockarea->areaOf(ui->renderContainer); @@ -1753,11 +1761,11 @@ void TextureViewer::AddResourceUsageEntry(QMenu &menu, uint32_t start, uint32_t if(start == end) item = new QAction( - "EID " + QString::number(start) + ": " + ToQStr(usage, m_Ctx.APIProps().pipelineType), this); + QFormatStr("EID %1: %2").arg(start).arg(ToQStr(usage, m_Ctx.APIProps().pipelineType)), this); else - item = new QAction("EID " + QString::number(start) + "-" + QString::number(end) + ": " + - ToQStr(usage, m_Ctx.APIProps().pipelineType), - this); + item = new QAction( + QFormatStr("EID %1-%2: %3").arg(start).arg(end).arg(ToQStr(usage, m_Ctx.APIProps().pipelineType)), + this); QObject::connect(item, &QAction::triggered, this, &TextureViewer::texContextItem_triggered); item->setProperty("eid", QVariant(end)); @@ -1889,11 +1897,11 @@ void TextureViewer::InitResourcePreview(ResourcePreview *prev, ResourceId id, Co if(texptr->customName) { if(!fullname.isEmpty()) - fullname += " = "; - fullname += texptr->name; + fullname += lit(" = "); + fullname += ToQStr(texptr->name); } if(fullname.isEmpty()) - fullname = texptr->name; + fullname = ToQStr(texptr->name); prev->setResourceName(fullname); WId handle = prev->thumbWinId(); @@ -1908,11 +1916,11 @@ void TextureViewer::InitResourcePreview(ResourcePreview *prev, ResourceId id, Co if(bufptr->customName) { if(!fullname.isEmpty()) - fullname += " = "; - fullname += bufptr->name; + fullname += lit(" = "); + fullname += ToQStr(bufptr->name); } if(fullname.isEmpty()) - fullname = bufptr->name; + fullname = ToQStr(bufptr->name); prev->setResourceName(fullname); WId handle = prev->thumbWinId(); @@ -1923,7 +1931,7 @@ void TextureViewer::InitResourcePreview(ResourcePreview *prev, ResourceId id, Co } else { - prev->setResourceName(""); + prev->setResourceName(QString()); WId handle = prev->thumbWinId(); m_Ctx.Replay().AsyncInvoke([this, handle](IReplayController *) { m_Output->AddThumbnail(m_Ctx.CurWindowingSystem(), m_Ctx.FillWindowingData(handle), @@ -1950,7 +1958,7 @@ void TextureViewer::InitResourcePreview(ResourcePreview *prev, ResourceId id, Co } else { - prev->setResourceName(""); + prev->setResourceName(QString()); prev->setActive(false); prev->setSelected(false); } @@ -1990,7 +1998,7 @@ void TextureViewer::InitStageResourcePreviews(ShaderStage stage, const ShaderResource &bind = resourceDetails[b]; if(bind.bindPoint == idx && bind.IsReadOnly) { - bindName = bind.name; + bindName = ToQStr(bind.name); otherBind = true; break; } @@ -2010,18 +2018,20 @@ void TextureViewer::InitStageResourcePreviews(ShaderStage stage, if(copy) { used = true; - bindName = "Source"; + bindName = tr("Source"); } Following follow(rw ? FollowType::ReadWrite : FollowType::ReadOnly, stage, idx, arrayIdx); - QString slotName = - QString("%1 %2%3").arg(m_Ctx.CurPipelineState().Abbrev(stage)).arg(rw ? "RW " : "").arg(idx); + QString slotName = QFormatStr("%1 %2%3") + .arg(m_Ctx.CurPipelineState().Abbrev(stage)) + .arg(rw ? lit("RW ") : lit("")) + .arg(idx); if(arrayLen > 1) - slotName += QString("[%1]").arg(arrayIdx); + slotName += QFormatStr("[%1]").arg(arrayIdx); if(copy) - slotName = "SRC"; + slotName = tr("SRC"); // show if it's referenced by the shader - regardless of empty or not bool show = used; @@ -2165,12 +2175,12 @@ void TextureViewer::render_mouseMove(QMouseEvent *e) m_PickedPoint.setX(qBound(0, m_PickedPoint.x(), (int)texptr->width - 1)); m_PickedPoint.setY(qBound(0, m_PickedPoint.y(), (int)texptr->height - 1)); - m_Ctx.Replay().AsyncInvoke("PickPixelClick", + m_Ctx.Replay().AsyncInvoke(lit("PickPixelClick"), [this](IReplayController *r) { RT_PickPixelsAndUpdate(r); }); } else if(e->buttons() == Qt::NoButton) { - m_Ctx.Replay().AsyncInvoke("PickPixelHover", + m_Ctx.Replay().AsyncInvoke(lit("PickPixelHover"), [this](IReplayController *r) { RT_PickHoverAndUpdate(r); }); } } @@ -2232,7 +2242,7 @@ void TextureViewer::render_keyPress(QKeyEvent *e) if((e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_C) { QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(ui->texStatusDim->text() + " | " + ui->statusText->text()); + clipboard->setText(ui->texStatusDim->text() + lit(" | ") + ui->statusText->text()); } if(!m_Ctx.LogLoaded()) @@ -2459,7 +2469,7 @@ void TextureViewer::OnLogfileLoaded() TextureListItemModel *model = (TextureListItemModel *)ui->textureList->model(); - model->reset(TextureListItemModel::String, "", m_Ctx); + model->reset(TextureListItemModel::String, QString(), m_Ctx); m_TexDisplay.darkBackgroundColor = FloatVector(darkBack.redF(), darkBack.greenF(), darkBack.blueF(), 1.0f); @@ -2480,13 +2490,13 @@ void TextureViewer::OnLogfileLoaded() GUIInvoke::call([this]() { OnEventChanged(m_Ctx.CurEvent()); }); }); - m_Watcher = new QFileSystemWatcher({ConfigFilePath("")}, this); + m_Watcher = new QFileSystemWatcher({ConfigFilePath(QString())}, this); QObject::connect(m_Watcher, &QFileSystemWatcher::fileChanged, this, &TextureViewer::customShaderModified); QObject::connect(m_Watcher, &QFileSystemWatcher::directoryChanged, this, &TextureViewer::customShaderModified); - reloadCustomShaders(""); + reloadCustomShaders(QString()); } void TextureViewer::Reset() @@ -2515,9 +2525,9 @@ void TextureViewer::Reset() // PixelPicked = false; - ui->statusText->setText(""); + ui->statusText->setText(QString()); ui->renderContainer->setWindowTitle(tr("Current")); - ui->zoomOption->setCurrentText(""); + ui->zoomOption->setCurrentText(QString()); ui->mipLevel->clear(); ui->sliceFace->clear(); @@ -2597,7 +2607,7 @@ void TextureViewer::OnEventChanged(uint32_t eventID) outIndex++; Following follow(FollowType::OutputColour, ShaderStage::Pixel, rt, 0); - QString bindName = copy ? tr("Destination") : ""; + QString bindName = copy ? tr("Destination") : QString(); QString slotName = copy ? tr("DST") : (m_Ctx.CurPipelineState().OutputAbbrev() + QString::number(rt)); @@ -2617,7 +2627,7 @@ void TextureViewer::OnEventChanged(uint32_t eventID) Following follow(FollowType::OutputDepth, ShaderStage::Pixel, 0, 0); - InitResourcePreview(prev, Depth.Id, Depth.typeHint, false, follow, "", tr("DS")); + InitResourcePreview(prev, Depth.Id, Depth.typeHint, false, follow, QString(), tr("DS")); } ShaderStage stages[] = {ShaderStage::Vertex, ShaderStage::Hull, ShaderStage::Domain, @@ -2658,7 +2668,7 @@ void TextureViewer::OnEventChanged(uint32_t eventID) for(; outIndex < outThumbs.size(); outIndex++) { ResourcePreview *prev = outThumbs[outIndex]; - prev->setResourceName(""); + prev->setResourceName(QString()); prev->setActive(false); prev->setSelected(false); } @@ -2670,7 +2680,7 @@ void TextureViewer::OnEventChanged(uint32_t eventID) for(; inIndex < inThumbs.size(); inIndex++) { ResourcePreview *prev = inThumbs[inIndex]; - prev->setResourceName(""); + prev->setResourceName(QString()); prev->setActive(false); prev->setSelected(false); } @@ -2687,8 +2697,8 @@ QVariant TextureViewer::persistData() { QVariantMap state = ui->dockarea->saveState(); - state["darkBack"] = darkBack; - state["lightBack"] = lightBack; + state[lit("darkBack")] = darkBack; + state[lit("lightBack")] = lightBack; return state; } @@ -2697,8 +2707,8 @@ void TextureViewer::setPersistData(const QVariant &persistData) { QVariantMap state = persistData.toMap(); - darkBack = state["darkBack"].value(); - lightBack = state["lightBack"].value(); + darkBack = state[lit("darkBack")].value(); + lightBack = state[lit("lightBack")].value(); if(darkBack != lightBack) { @@ -2775,7 +2785,7 @@ void TextureViewer::UI_SetScale(float s, int x, int y) void TextureViewer::setCurrentZoomValue(float zoom) { - ui->zoomOption->setCurrentText(QString::number(ceil(zoom * 100)) + "%"); + ui->zoomOption->setCurrentText(QString::number(ceil(zoom * 100)) + lit("%")); } float TextureViewer::getCurrentZoomValue() @@ -2783,7 +2793,7 @@ float TextureViewer::getCurrentZoomValue() if(ui->fitToWindow->isChecked()) return m_TexDisplay.scale; - QString zoomText = ui->zoomOption->currentText().replace('%', ' '); + QString zoomText = ui->zoomOption->currentText().replace(QLatin1Char('%'), QLatin1Char(' ')); bool ok = false; int zoom = zoomText.toInt(&ok); @@ -2805,7 +2815,7 @@ void TextureViewer::setFitToWindow(bool checked) { ui->fitToWindow->setChecked(false); float curScale = m_TexDisplay.scale; - ui->zoomOption->setCurrentText(""); + ui->zoomOption->setCurrentText(QString()); setCurrentZoomValue(curScale); } } @@ -3342,7 +3352,7 @@ void TextureViewer::on_texListShow_clicked() } else { - ui->textureListFilter->setCurrentText(""); + ui->textureListFilter->setCurrentText(QString()); ui->dockarea->moveToolWindow( ui->textureListFrame, ToolWindowManager::AreaReference(ToolWindowManager::LeftOf, @@ -3353,7 +3363,7 @@ void TextureViewer::on_texListShow_clicked() void TextureViewer::on_cancelTextureListFilter_clicked() { - ui->textureListFilter->setCurrentText(""); + ui->textureListFilter->setCurrentText(QString()); } void TextureViewer::on_textureListFilter_editTextChanged(const QString &text) @@ -3374,9 +3384,9 @@ void TextureViewer::on_textureListFilter_currentIndexChanged(int index) return; if(ui->textureListFilter->currentIndex() == 1) - model->reset(TextureListItemModel::Textures, "", m_Ctx); + model->reset(TextureListItemModel::Textures, QString(), m_Ctx); else if(ui->textureListFilter->currentIndex() == 2) - model->reset(TextureListItemModel::RenderTargets, "", m_Ctx); + model->reset(TextureListItemModel::RenderTargets, QString(), m_Ctx); else model->reset(TextureListItemModel::String, ui->textureListFilter->currentText(), m_Ctx); } @@ -3439,8 +3449,8 @@ void TextureViewer::reloadCustomShaders(const QString &filter) } QStringList files = - QDir(ConfigFilePath("")) - .entryList({QString("*.%1").arg(m_Ctx.CurPipelineState().GetShaderExtension())}, + QDir(ConfigFilePath(QString())) + .entryList({QFormatStr("*.%1").arg(m_Ctx.CurPipelineState().GetShaderExtension())}, QDir::Files | QDir::NoDotAndDotDot, QDir::Name | QDir::IgnoreCase); QStringList watchedFiles = m_Watcher->files(); @@ -3510,33 +3520,33 @@ void TextureViewer::on_customCreate_clicked() { RDDialog::critical(this, tr("Error Creating Shader"), tr("Selected shader already exists.\nEnter a new name in the textbox.")); - ui->customShader->setCurrentText(""); + ui->customShader->setCurrentText(QString()); UI_UpdateChannels(); return; } - QString path = ConfigFilePath(filename + "." + m_Ctx.CurPipelineState().GetShaderExtension()); + QString path = ConfigFilePath(filename + lit(".") + m_Ctx.CurPipelineState().GetShaderExtension()); QString src; if(IsD3D(m_Ctx.APIProps().pipelineType)) { src = - "float4 main(float4 pos : SV_Position, float4 uv : TEXCOORD0) : SV_Target0\n" - "{\n" - " return float4(0,0,0,1);\n" - "}\n"; + lit("float4 main(float4 pos : SV_Position, float4 uv : TEXCOORD0) : SV_Target0\n" + "{\n" + " return float4(0,0,0,1);\n" + "}\n"); } else { src = - "#version 420 core\n\n" - "layout (location = 0) in vec2 uv;\n\n" - "layout (location = 0) out vec4 color_out;\n\n" - "void main()\n" - "{\n" - " color_out = vec4(0,0,0,1);\n" - "}\n"; + lit("#version 420 core\n\n" + "layout (location = 0) in vec2 uv;\n\n" + "layout (location = 0) out vec4 color_out;\n\n" + "void main()\n" + "{\n" + " color_out = vec4(0,0,0,1);\n" + "}\n"); } QFile fileHandle(path); @@ -3570,7 +3580,7 @@ void TextureViewer::on_customEdit_clicked() return; } - QString path = ConfigFilePath(filename + "." + m_Ctx.CurPipelineState().GetShaderExtension()); + QString path = ConfigFilePath(filename + lit(".") + m_Ctx.CurPipelineState().GetShaderExtension()); QString src; @@ -3593,7 +3603,7 @@ void TextureViewer::on_customEdit_clicked() files[filename] = src; IShaderViewer *s = m_Ctx.EditShader( - true, "main", files, + true, lit("main"), files, // Save Callback [this, key, filename, path](ICaptureContext *ctx, IShaderViewer *viewer, const QStringMap &updatedfiles) { @@ -3648,7 +3658,8 @@ void TextureViewer::on_customDelete_clicked() if(res == QMessageBox::Yes) { - QString path = ConfigFilePath(shaderName + "." + m_Ctx.CurPipelineState().GetShaderExtension()); + QString path = + ConfigFilePath(shaderName + lit(".") + m_Ctx.CurPipelineState().GetShaderExtension()); if(!QFileInfo::exists(path)) { RDDialog::critical( @@ -3665,7 +3676,7 @@ void TextureViewer::on_customDelete_clicked() return; } - ui->customShader->setCurrentText(""); + ui->customShader->setCurrentText(QString()); UI_UpdateChannels(); } } @@ -3675,5 +3686,5 @@ void TextureViewer::customShaderModified(const QString &path) // allow time for modifications to finish QThread::msleep(15); - reloadCustomShaders(""); + reloadCustomShaders(QString()); } \ No newline at end of file diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro index 0ab5abaf4..6c2af0d3c 100644 --- a/qrenderdoc/qrenderdoc.pro +++ b/qrenderdoc/qrenderdoc.pro @@ -29,6 +29,9 @@ INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/flowlayout INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/include/qt INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/include +# Disable conversions to/from const char * in QString +DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII + # Different output folders per platform win32 { diff --git a/qrenderdoc/qrenderdoc_local.vcxproj b/qrenderdoc/qrenderdoc_local.vcxproj index 6183bf818..af9b32dde 100644 --- a/qrenderdoc/qrenderdoc_local.vcxproj +++ b/qrenderdoc/qrenderdoc_local.vcxproj @@ -87,7 +87,7 @@ true $(ProjectDir);$(IntDir)generated\;$(SolutionDir)\renderdoc\api\replay;3rdparty\python\include;3rdparty\pyside\include\PySide2;3rdparty\pyside\include\PySide2\QtCore;3rdparty\pyside\include\PySide2\QtGui;3rdparty\pyside\include\PySide2\QtWidgets;3rdparty\pyside\include\shiboken2;3rdparty\qt\$(Platform)\include;3rdparty\qt\$(Platform)\include\QtWidgets;3rdparty\qt\$(Platform)\include\QtGui;3rdparty\qt\$(Platform)\include\QtCore;%(AdditionalIncludeDirectories) /Zc:strictStrings /Zc:throwingNew %(AdditionalOptions) - _WINDOWS;UNICODE;WIN32;WIN64;RENDERDOC_PLATFORM_WIN32;PYSIDE2_ENABLED=1;SCINTILLA_QT=1;MAKING_LIBRARY=1;SCI_LEXER=1;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;WIN32;WIN64;RENDERDOC_PLATFORM_WIN32;PYSIDE2_ENABLED=1;SCINTILLA_QT=1;MAKING_LIBRARY=1;SCI_LEXER=1;QT_NO_CAST_FROM_ASCII;QT_NO_CAST_TO_ASCII;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) Level4 true 4100;4127;4189;4714;4718;4996;%(DisableSpecificWarnings)