ui: clarify render-vs-output resolution in the settings menu

This commit is contained in:
mchughalex 2026-07-17 06:42:45 +01:00
parent 0084c84542
commit 855ed66c82

View file

@ -1074,12 +1074,31 @@ void SimpleSettingsDialog::BuildRows(std::vector<RowSpec>& rows, int category) {
rows.push_back(std::move(row)); rows.push_back(std::move(row));
} }
{ {
// Read-only: where frames are actually displayed, so the difference
// from Render Scale (the internal render size) is visible in the
// menu. Single option = the steppers grey out on their own; the row
// stays focusable so its description shows.
RowSpec row; RowSpec row;
row.kind = RowSpec::kEnum; row.kind = RowSpec::kEnum;
row.label = "Resolution Scale"; row.label = "Output Resolution";
row.desc = row.desc =
"Render resolution as a multiple of the game's native 720p. Higher values are " "The resolution frames are displayed at (informational): your "
"sharper but cost GPU time."; "monitor's native resolution in fullscreen, the window size when "
"windowed. Rendering happens at the Render Scale setting and is "
"scaled to this.";
const ImVec2 out_size = ImGui::GetIO().DisplaySize;
row.options.push_back(std::to_string(int(out_size.x)) + " x " +
std::to_string(int(out_size.y)));
rows.push_back(std::move(row));
}
{
RowSpec row;
row.kind = RowSpec::kEnum;
row.label = "Render Scale";
row.desc =
"Internal 3D render resolution, as a multiple of the game's native 720p. "
"The image is always displayed at your monitor's native resolution - "
"higher settings supersample down to it.";
for (const char* label : kResolutionLabels) { for (const char* label : kResolutionLabels) {
row.options.push_back(label); row.options.push_back(label);
} }
@ -1222,13 +1241,13 @@ void SimpleSettingsDialog::BuildRows(std::vector<RowSpec>& rows, int category) {
row.label = "Shadow Quality"; row.label = "Shadow Quality";
row.desc = row.desc =
"Dynamic character/prop shadow resolution in the native renderer. " "Dynamic character/prop shadow resolution in the native renderer. "
"Auto follows the Resolution Scale setting; 512 matches the " "Auto follows the Render Scale setting; 512 matches the original "
"original game's shadow maps."; "game's shadow maps.";
for (size_t i = 0; i < kShadowQualityLabels.size(); ++i) { for (size_t i = 0; i < kShadowQualityLabels.size(); ++i) {
if (i == 1) { if (i == 1) {
// Auto = the game's 512 tiles at the render resolution scale; // Auto = the game's 512 tiles at the render resolution scale;
// the renderer sizes the atlas from its scaled output (see the // the renderer sizes the atlas from its scaled output (see the
// shadow_tile cvar), so the label follows the Resolution Scale // shadow_tile cvar), so the label follows the Render Scale
// row's STAGED selection: both apply on restart, and changing // row's STAGED selection: both apply on restart, and changing
// the scale updates what Auto reads as immediately. // the scale updates what Auto reads as immediately.
const int scale_index = std::clamp( const int scale_index = std::clamp(