1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-30 10:15:36 +01:00

Simplify UI scaling display quality options (#6764)

Simplify UI scaling display quality options.

This removes three options:
* 'Use NN scaling at integer scales', as NN is decidedly preferable at integer scales.
* Anisotropic scaling, as it produces results very similar (if not equal) to linear scaling.
* NN as a selectable option in the dropdown - NN is forced on integer scales and unavailable for non-integer scales.
This commit is contained in:
Aaron van Geffen
2017-12-03 22:35:16 +01:00
committed by Michael Steenbeek
parent 107461bbe8
commit 837b177d9d
6 changed files with 48 additions and 54 deletions

View File

@@ -4032,13 +4032,13 @@ STR_5723 :Heavy Rain
STR_5724 :Thunderstorm
STR_5725 :{BLACK}Force weather:
STR_5726 :{SMALLFONT}{BLACK}Sets the current weather in park
STR_5727 :Scaling quality
STR_5727 :Scaling quality:
STR_5728 :Requires hardware display option
STR_5729 :{SMALLFONT}{BLACK}Requires hardware display option
STR_5730 :Nearest neighbour
STR_5730 :<removed string - do not use>
STR_5731 :Linear
STR_5732 :Anisotropic
STR_5733 :Use NN scaling at integer scales
STR_5732 :<removed string - do not use>
STR_5733 :<removed string - do not use>
# tooltip for tab in options window
STR_5734 :{SMALLFONT}{BLACK}Rendering
STR_5735 :Network Status
@@ -4125,8 +4125,8 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
#tooltips
STR_5815 :{SMALLFONT}{BLACK}Display FPS counter in-game
STR_5816 :{SMALLFONT}{BLACK}Sets ratio to scale the game by.{NEWLINE}Most useful when playing in{NEWLINE}high resolutions
STR_5817 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Sets UI scaling type{NEWLINE}{NEWLINE}Nearest Neighbour is sharp but causes distortion at non-integer scales.{NEWLINE}Linear and Anisotropic are smooth but blurry.{NEWLINE}Smooth NN is sharp even at non-integer scales but can cause a minor performance hit.
STR_5818 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Use nearest neighbour scaling{NEWLINE}when window scaling factor set{NEWLINE}to integer values (1, 2, 3, etc)
STR_5817 :{SMALLFONT}{BLACK}Sets UI scaling type. Requires hardware display to be used.{NEWLINE}Linear scaling is smooth, but blurry. Smooth Nearest Neighbour scaling is sharp, but can cause a minor performance hit.
STR_5818 :<removed string - do not use>
STR_5819 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Pause the game if Steam{NEWLINE}in-game overlay is opened
STR_5820 :{SMALLFONT}{BLACK}Minimise the game if focus is{NEWLINE}lost while in fullscreen mode
STR_5821 :{SMALLFONT}{BLACK}Changes the colour of the construction marker when building rides,{NEWLINE}paths, shops, scenery, etc.

View File

@@ -492,12 +492,11 @@ public:
{
char scaleQualityBuffer[4];
_scaleQuality = gConfigGeneral.scale_quality;
if (gConfigGeneral.use_nn_at_integer_scales &&
gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale))
if (gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale))
{
_scaleQuality = SCALE_QUALITY_NN;
}
sint32 scaleQuality = _scaleQuality;
if (_scaleQuality == SCALE_QUALITY_SMOOTH_NN)
{

View File

@@ -22,6 +22,8 @@
* Padding between the widgets and the window needs reducing, an artifact from originally being inside group boxes.
*/
#include <cmath>
#include <openrct2/audio/AudioMixer.h>
#include <openrct2/config/Config.h>
#include <openrct2/Context.h>
@@ -87,7 +89,6 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
WIDX_DRAWING_ENGINE_DROPDOWN,
WIDX_SCALE_QUALITY,
WIDX_SCALE_QUALITY_DROPDOWN,
WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX,
WIDX_STEAM_OVERLAY_PAUSE,
WIDX_UNCAP_FPS_CHECKBOX,
WIDX_SHOW_FPS_CHECKBOX,
@@ -212,7 +213,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
static rct_widget window_options_display_widgets[] = {
MAIN_OPTIONS_WIDGETS,
{ WWT_GROUPBOX, 1, 5, 304, 53, 205, STR_HARDWARE_GROUP, STR_NONE }, // Hardware group
{ WWT_GROUPBOX, 1, 5, 304, 53, 192, STR_HARDWARE_GROUP, STR_NONE }, // Hardware group
{ WWT_DROPDOWN, 1, 155, 299, 68, 79, STR_ARG_12_STRINGID, STR_NONE }, // Fullscreen
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, STR_DROPDOWN_GLYPH, STR_FULLSCREEN_MODE_TIP },
@@ -229,13 +230,12 @@ static rct_widget window_options_display_widgets[] = {
{ WWT_DROPDOWN, 1, 155, 299, 128, 139, STR_NONE, STR_NONE }, // Scaling quality hint
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 129, 138, STR_DROPDOWN_GLYPH, STR_SCALE_QUALITY_TIP },
{ WWT_CHECKBOX, 1, 25, 290, 143, 154, STR_USE_NN_AT_INTEGER_SCALE, STR_USE_NN_AT_INTEGER_SCALE_TIP }, // Use nn scaling at integer scales
{ WWT_CHECKBOX, 1, 25, 290, 158, 169, STR_STEAM_OVERLAY_PAUSE, STR_STEAM_OVERLAY_PAUSE_TIP }, // Pause on steam overlay
{ WWT_CHECKBOX, 1, 25, 290, 150, 151, STR_STEAM_OVERLAY_PAUSE, STR_STEAM_OVERLAY_PAUSE_TIP }, // Pause on steam overlay
{ WWT_CHECKBOX, 1, 10, 290, 174, 185, STR_UNCAP_FPS, STR_UNCAP_FPS_TIP }, // Uncap fps
{ WWT_CHECKBOX, 1, 155, 299, 174, 185, STR_SHOW_FPS, STR_SHOW_FPS_TIP }, // Show fps
{ WWT_CHECKBOX, 1, 10, 290, 189, 200, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP }, // Minimise fullscreen focus loss
{ WWT_CHECKBOX, 1, 11, 290, 161, 172, STR_UNCAP_FPS, STR_UNCAP_FPS_TIP }, // Uncap fps
{ WWT_CHECKBOX, 1, 155, 299, 161, 172, STR_SHOW_FPS, STR_SHOW_FPS_TIP }, // Show fps
{ WWT_CHECKBOX, 1, 11, 290, 176, 187, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP }, // Minimise fullscreen focus loss
{ WIDGETS_END },
@@ -382,9 +382,7 @@ static const rct_string_id window_options_title_music_names[] = {
};
static const rct_string_id window_options_scale_quality_names[] = {
STR_SCALING_QUALITY_NN,
STR_SCALING_QUALITY_LINEAR,
STR_SCALING_QUALITY_ANISOTROPIC,
STR_SCALING_QUALITY_SMOOTH_NN
};
@@ -480,8 +478,7 @@ static uint64 window_options_page_enabled_widgets[] = {
(1 << WIDX_SCALE_UP) |
(1 << WIDX_SCALE_DOWN) |
(1 << WIDX_SCALE_QUALITY) |
(1 << WIDX_SCALE_QUALITY_DROPDOWN) |
(1 << WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX),
(1 << WIDX_SCALE_QUALITY_DROPDOWN),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_TILE_SMOOTHING_CHECKBOX) |
@@ -650,12 +647,6 @@ static void window_options_mouseup(rct_window *w, rct_widgetindex widgetIndex)
config_save_default();
window_invalidate(w);
break;
case WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX:
gConfigGeneral.use_nn_at_integer_scales ^= 1;
config_save_default();
gfx_invalidate_screen();
context_trigger_resize();
break;
}
break;
@@ -1022,16 +1013,13 @@ static void window_options_mousedown(rct_window *w, rct_widgetindex widgetIndex,
case WIDX_SCALE_QUALITY_DROPDOWN:
gDropdownItemsFormat[0] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsFormat[1] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsFormat[2] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsFormat[3] = STR_DROPDOWN_MENU_LABEL;
gDropdownItemsArgs[0] = STR_SCALING_QUALITY_NN;
gDropdownItemsArgs[1] = STR_SCALING_QUALITY_LINEAR;
gDropdownItemsArgs[2] = STR_SCALING_QUALITY_ANISOTROPIC;
gDropdownItemsArgs[3] = STR_SCALING_QUALITY_SMOOTH_NN;
gDropdownItemsArgs[0] = STR_SCALING_QUALITY_LINEAR;
gDropdownItemsArgs[1] = STR_SCALING_QUALITY_SMOOTH_NN;
window_options_show_dropdown(w, widget, 4);
window_options_show_dropdown(w, widget, 2);
dropdown_set_checked(gConfigGeneral.scale_quality, true);
// Note: offset by one to compensate for lack of NN option.
dropdown_set_checked(gConfigGeneral.scale_quality - 1, true);
break;
}
break;
@@ -1321,8 +1309,10 @@ static void window_options_dropdown(rct_window *w, rct_widgetindex widgetIndex,
}
break;
case WIDX_SCALE_QUALITY_DROPDOWN:
if (dropdownIndex != gConfigGeneral.scale_quality) {
gConfigGeneral.scale_quality = (uint8)dropdownIndex;
// Note: offset by one to compensate for lack of NN option.
if ((dropdownIndex + 1) != gConfigGeneral.scale_quality)
{
gConfigGeneral.scale_quality = (uint8)dropdownIndex + 1;
config_save_default();
gfx_invalidate_screen();
context_trigger_resize();
@@ -1534,25 +1524,36 @@ static void window_options_invalidate(rct_window *w)
w->disabled_widgets &= ~(1 << WIDX_RESOLUTION);
}
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE) {
// Disable Steam Overlay checkbox when using software rendering.
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE)
{
w->disabled_widgets |= (1 << WIDX_STEAM_OVERLAY_PAUSE);
}
else
{
w->disabled_widgets &= ~(1 << WIDX_STEAM_OVERLAY_PAUSE);
}
// Disable scaling quality dropdown when using software rendering or when using an integer scalar.
// In the latter case, nearest neighbour rendering will be used to scale.
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE ||
gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale))
{
w->disabled_widgets |= (1 << WIDX_SCALE_QUALITY);
w->disabled_widgets |= (1 << WIDX_SCALE_QUALITY_DROPDOWN);
w->disabled_widgets |= (1 << WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX);
w->disabled_widgets |= (1 << WIDX_STEAM_OVERLAY_PAUSE);
} else {
}
else
{
w->disabled_widgets &= ~(1 << WIDX_SCALE_QUALITY);
w->disabled_widgets &= ~(1 << WIDX_SCALE_QUALITY_DROPDOWN);
w->disabled_widgets &= ~(1 << WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX);
w->disabled_widgets &= ~(1 << WIDX_STEAM_OVERLAY_PAUSE);
}
widget_set_checkbox_value(w, WIDX_UNCAP_FPS_CHECKBOX, gConfigGeneral.uncap_fps);
widget_set_checkbox_value(w, WIDX_SHOW_FPS_CHECKBOX, gConfigGeneral.show_fps);
widget_set_checkbox_value(w, WIDX_MINIMIZE_FOCUS_LOSS, gConfigGeneral.minimize_fullscreen_focus_loss);
widget_set_checkbox_value(w, WIDX_STEAM_OVERLAY_PAUSE, gConfigGeneral.steam_overlay_pause);
widget_set_checkbox_value(w, WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX, gConfigGeneral.use_nn_at_integer_scales);
window_options_display_widgets[WIDX_SCALE_QUALITY].text = window_options_scale_quality_names[gConfigGeneral.scale_quality];
window_options_display_widgets[WIDX_SCALE_QUALITY].text = window_options_scale_quality_names[gConfigGeneral.scale_quality - 1];
window_options_display_widgets[WIDX_RESOLUTION].type = WWT_DROPDOWN;
window_options_display_widgets[WIDX_RESOLUTION_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
@@ -1592,6 +1593,7 @@ static void window_options_invalidate(rct_window *w)
w->enabled_widgets |= (1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
w->disabled_widgets &= ~(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX);
}
widget_set_checkbox_value(w, WIDX_SHOW_GUEST_PURCHASES_CHECKBOX, gConfigGeneral.show_guest_purchases);
// construction marker: white/translucent
static const rct_string_id construction_marker_colours[] = {
@@ -1847,7 +1849,9 @@ static void window_options_paint(rct_window *w, rct_drawpixelinfo *dpi)
gfx_draw_string_left(dpi, STR_WINDOW_OBJECTIVE_VALUE_RATING, &scale, w->colours[1], w->x + w->widgets[WIDX_SCALE].left + 1, w->y + w->widgets[WIDX_SCALE].top + 1);
colour = w->colours[1];
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE) {
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE ||
gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale))
{
colour |= 0x40;
}
gfx_draw_string_left(dpi, STR_SCALING_QUALITY, w, colour, w->x + 25, w->y + window_options_display_widgets[WIDX_SCALE_QUALITY].top + 1);

View File

@@ -105,7 +105,6 @@ namespace Config
{
ConfigEnumEntry<sint32>("NEAREST_NEIGHBOUR", SCALE_QUALITY_NN),
ConfigEnumEntry<sint32>("LINEAR", SCALE_QUALITY_LINEAR),
ConfigEnumEntry<sint32>("ANISOTROPIC_FILTERING", SCALE_QUALITY_ANISOTROPIC),
ConfigEnumEntry<sint32>("SMOOTH_NEAREST_NEIGHBOUR", SCALE_QUALITY_SMOOTH_NN),
});
@@ -194,7 +193,6 @@ namespace Config
model->steam_overlay_pause = reader->GetBoolean("steam_overlay_pause", true);
model->window_scale = reader->GetFloat("window_scale", platform_get_default_scale());
model->scale_quality = reader->GetEnum<sint32>("scale_quality", SCALE_QUALITY_SMOOTH_NN, Enum_ScaleQuality);
model->use_nn_at_integer_scales = reader->GetBoolean("use_nn_at_integer_scales", true);
model->show_fps = reader->GetBoolean("show_fps", false);
model->trap_cursor = reader->GetBoolean("trap_cursor", false);
model->auto_open_shops = reader->GetBoolean("auto_open_shops", false);
@@ -264,7 +262,6 @@ namespace Config
writer->WriteBoolean("steam_overlay_pause", model->steam_overlay_pause);
writer->WriteFloat("window_scale", model->window_scale);
writer->WriteEnum<sint32>("scale_quality", model->scale_quality, Enum_ScaleQuality);
writer->WriteBoolean("use_nn_at_integer_scales", model->use_nn_at_integer_scales);
writer->WriteBoolean("show_fps", model->show_fps);
writer->WriteBoolean("trap_cursor", model->trap_cursor);
writer->WriteBoolean("auto_open_shops", model->auto_open_shops);

View File

@@ -34,7 +34,6 @@ typedef struct GeneralConfiguration
float window_scale;
sint32 drawing_engine;
sint32 scale_quality;
bool use_nn_at_integer_scales;
bool uncap_fps;
bool show_fps;
bool minimize_fullscreen_focus_loss;
@@ -213,7 +212,6 @@ enum SCALE_QUALITY
{
SCALE_QUALITY_NN,
SCALE_QUALITY_LINEAR,
SCALE_QUALITY_ANISOTROPIC,
SCALE_QUALITY_SMOOTH_NN
};

View File

@@ -3350,10 +3350,7 @@ enum {
STR_SCALING_QUALITY = 5727,
STR_REQUIRES_HW_DISPLAY = 5728, // unused
STR_REQUIRES_HW_DISPLAY_TIP = 5729, // unused
STR_SCALING_QUALITY_NN = 5730,
STR_SCALING_QUALITY_LINEAR = 5731,
STR_SCALING_QUALITY_ANISOTROPIC = 5732,
STR_USE_NN_AT_INTEGER_SCALE = 5733,
STR_OPTIONS_RENDERING_TIP = 5734,
STR_THEMES_WINDOW_NETWORK_STATUS = 5735,
STR_THEMES_WINDOW_PLAYER = 5736,
@@ -3438,7 +3435,6 @@ enum {
STR_SHOW_FPS_TIP = 5815,
STR_WINDOW_SCALE_TIP = 5816,
STR_SCALE_QUALITY_TIP = 5817,
STR_USE_NN_AT_INTEGER_SCALE_TIP = 5818,
STR_STEAM_OVERLAY_PAUSE_TIP = 5819,
STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP = 5820,
STR_CONSTRUCTION_MARKER_COLOUR_TIP = 5821,