1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-20 12:33:14 +00:00

Expose GLES driver to the preferences

Users can now change from GLES2 to GLES3 and vice versa. The change requires a restart of Pixelorama to take effect. Does not have any effect if Pixelorama is being run from the Godot editor. I suppose we should add logic that detects if GLES3 is even supported in the first place in that device before allowing it as an option, but at least I enabled GLES2 fallback in the project settings, so it *should* fall back to GLES2.
This commit is contained in:
Emmanouil Papadeas 2022-11-29 19:58:24 +02:00
parent 4d113d37e5
commit 3ef73eacea
6 changed files with 356 additions and 244 deletions

View file

@ -562,6 +562,10 @@ msgstr ""
msgid "Performance"
msgstr ""
#. Found in the preferences. Refers to device drivers, such as video drivers and tablet drivers.
msgid "Drivers"
msgstr ""
msgid "Extensions"
msgstr ""
@ -571,6 +575,10 @@ msgstr ""
msgid "Indicators"
msgstr ""
#. Found in the preferences. Used for options that require restart when they are changed.
msgid "Pixelorama must be restarted for changes to take effect."
msgstr ""
msgid "On"
msgstr ""

View file

@ -934,6 +934,7 @@ file_logging/enable_file_logging=true
[rendering]
quality/driver/driver_name="GLES2"
quality/driver/fallback_to_gles2=true
quality/intended_usage/framebuffer_allocation=0
quality/intended_usage/framebuffer_allocation.mobile=0
threads/thread_model=2

View file

@ -47,6 +47,8 @@ enum HelpMenu {
ABOUT_PIXELORAMA
}
const OVERRIDE_FILE := "override.cfg"
var root_directory := "."
var window_title := "" setget _title_changed # Why doesn't Godot have get_window_title()?
var config_cache := ConfigFile.new()
@ -116,6 +118,7 @@ var fps_limit := 0
var autosave_interval := 1.0
var enable_autosave := true
var renderer := OS.get_current_video_driver() setget _renderer_changed
# Tools & options
var show_left_tool_icon := true
@ -483,6 +486,15 @@ func _project_changed(value: int) -> void:
disconnect("project_changed", current_project, "change_project")
func _renderer_changed(value: int) -> void:
renderer = value
if OS.has_feature("editor"):
return
var renderer_name := OS.get_video_driver_name(renderer)
ProjectSettings.set_setting("rendering/quality/driver/driver_name", renderer_name)
ProjectSettings.save_custom(OVERRIDE_FILE)
func dialog_open(open: bool) -> void:
var dim_color := Color.white
if open:

View file

@ -79,6 +79,9 @@ var preferences := [
Preference.new(
"pause_when_unfocused", "Performance/PerformanceContainer/PauseAppFocus", "pressed"
),
Preference.new(
"renderer", "Drivers/DriversContainer/Renderer", "selected", true, OS.VIDEO_DRIVER_GLES2
)
]
var content_list := []
@ -86,31 +89,44 @@ var selected_item := 0
var restore_default_button_tcsn := preload("res://src/Preferences/RestoreDefaultButton.tscn")
onready var list: ItemList = $HSplitContainer/List
onready var right_side: VBoxContainer = $HSplitContainer/ScrollContainer/VBoxContainer
onready var right_side: VBoxContainer = $"%RightSide"
onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer")
onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval")
onready var shrink_slider: ValueSlider = $"%ShrinkSlider"
onready var themes: BoxContainer = right_side.get_node("Interface/Themes")
onready var shortcuts: Control = right_side.get_node("Shortcuts/ShortcutEdit")
onready var extensions: BoxContainer = right_side.get_node("Extensions")
onready var must_restart: BoxContainer = $"%MustRestart"
class Preference:
var prop_name: String
var node_path: String
var value_type: String
var require_restart := false
var default_value
func _init(_prop_name: String, _node_path: String, _value_type: String) -> void:
func _init(
_prop_name: String,
_node_path: String,
_value_type: String,
_require_restart := false,
_default_value = null
) -> void:
prop_name = _prop_name
node_path = _node_path
value_type = _value_type
default_value = Global.get(prop_name)
require_restart = _require_restart
if _default_value:
default_value = _default_value
else:
default_value = Global.get(prop_name)
func _ready() -> void:
# Replace OK since preference changes are being applied immediately, not after OK confirmation
get_ok().text = "Close"
get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL
shrink_slider.value = Global.shrink # In case shrink is not equal to 1
for child in shortcuts.get_children():
@ -129,11 +145,11 @@ func _ready() -> void:
for pref in preferences:
var node: Node = right_side.get_node(pref.node_path)
var restore_default_button: BaseButton = restore_default_button_tcsn.instance()
restore_default_button.setting_name = pref.prop_name
restore_default_button.value_type = pref.value_type
restore_default_button.default_value = pref.default_value
restore_default_button.require_restart = pref.require_restart
restore_default_button.node = node
if pref.node_path == "%ShrinkSlider":
# Add the default button to the shrink slider's grandparent
@ -148,17 +164,14 @@ func _ready() -> void:
match pref.value_type:
"pressed":
node.connect(
"toggled",
self,
"_on_Preference_toggled",
[pref.prop_name, pref.default_value, restore_default_button]
"toggled", self, "_on_Preference_toggled", [pref, restore_default_button]
)
"value":
node.connect(
"value_changed",
self,
"_on_Preference_value_changed",
[pref.prop_name, pref.default_value, restore_default_button]
[pref, restore_default_button]
)
"color":
node.get_picker().presets_visible = false
@ -166,74 +179,88 @@ func _ready() -> void:
"color_changed",
self,
"_on_Preference_color_changed",
[pref.prop_name, pref.default_value, restore_default_button]
[pref, restore_default_button]
)
"selected":
node.connect(
"item_selected",
self,
"_on_Preference_item_selected",
[pref.prop_name, pref.default_value, restore_default_button]
[pref, restore_default_button]
)
var global_value = Global.get(pref.prop_name)
if Global.config_cache.has_section_key("preferences", pref.prop_name):
var value = Global.config_cache.get_value("preferences", pref.prop_name)
Global.set(pref.prop_name, value)
node.set(pref.value_type, value)
var global_value = Global.get(pref.prop_name)
# This is needed because color_changed doesn't fire if the color changes in code
if pref.value_type == "color":
preference_update(pref.prop_name)
preference_update(pref.prop_name, pref.require_restart)
disable_restore_default_button(
restore_default_button, global_value.is_equal_approx(pref.default_value)
)
elif pref.value_type == "selected":
preference_update(pref.prop_name)
preference_update(pref.prop_name, pref.require_restart)
disable_restore_default_button(
restore_default_button, global_value == pref.default_value
)
else:
node.set(pref.value_type, global_value)
disable_restore_default_button(
restore_default_button, global_value == pref.default_value
)
func _on_Preference_toggled(
button_pressed: bool, prop: String, default_value, restore_default_button: BaseButton
) -> void:
Global.set(prop, button_pressed)
Global.config_cache.set_value("preferences", prop, button_pressed)
preference_update(prop)
disable_restore_default_button(restore_default_button, Global.get(prop) == default_value)
func _on_Preference_toggled(pressed: bool, pref: Preference, restore_default: BaseButton) -> void:
var prop := pref.prop_name
var default_value = pref.default_value
Global.set(prop, pressed)
if not pref.require_restart:
Global.config_cache.set_value("preferences", prop, pressed)
preference_update(prop, pref.require_restart)
disable_restore_default_button(restore_default, Global.get(prop) == default_value)
func _on_Preference_value_changed(
value: float, prop: String, default_value, restore_default_button: BaseButton
value: float, pref: Preference, restore_default: BaseButton
) -> void:
var prop := pref.prop_name
var default_value = pref.default_value
Global.set(prop, value)
Global.config_cache.set_value("preferences", prop, value)
preference_update(prop)
disable_restore_default_button(restore_default_button, Global.get(prop) == default_value)
if not pref.require_restart:
Global.config_cache.set_value("preferences", prop, value)
preference_update(prop, pref.require_restart)
disable_restore_default_button(restore_default, Global.get(prop) == default_value)
func _on_Preference_color_changed(
color: Color, prop: String, default_value, restore_default_button: BaseButton
color: Color, pref: Preference, restore_default: BaseButton
) -> void:
var prop := pref.prop_name
var default_value = pref.default_value
Global.set(prop, color)
Global.config_cache.set_value("preferences", prop, color)
preference_update(prop)
disable_restore_default_button(
restore_default_button, Global.get(prop).is_equal_approx(default_value)
)
if not pref.require_restart:
Global.config_cache.set_value("preferences", prop, color)
preference_update(prop, pref.require_restart)
disable_restore_default_button(restore_default, Global.get(prop).is_equal_approx(default_value))
func _on_Preference_item_selected(
id: int, prop: String, default_value, restore_default_button: BaseButton
) -> void:
func _on_Preference_item_selected(id: int, pref: Preference, restore_default: BaseButton) -> void:
var prop := pref.prop_name
var default_value = pref.default_value
Global.set(prop, id)
Global.config_cache.set_value("preferences", prop, id)
preference_update(prop)
disable_restore_default_button(restore_default_button, Global.get(prop) == default_value)
if not pref.require_restart:
Global.config_cache.set_value("preferences", prop, id)
preference_update(prop, pref.require_restart)
disable_restore_default_button(restore_default, Global.get(prop) == default_value)
func preference_update(prop: String) -> void:
func preference_update(prop: String, require_restart := false) -> void:
if require_restart:
must_restart.visible = true
return
if prop in ["autosave_interval", "enable_autosave"]:
OpenSave.update_autosave()
autosave_interval.editable = Global.enable_autosave

File diff suppressed because it is too large Load diff

View file

@ -3,6 +3,7 @@ extends TextureButton
var setting_name: String
var value_type: String
var default_value
var require_restart := false
var node: Node
@ -12,7 +13,8 @@ func _ready() -> void:
func _on_RestoreDefaultButton_pressed() -> void:
Global.set(setting_name, default_value)
Global.config_cache.set_value("preferences", setting_name, default_value)
Global.preferences_dialog.preference_update(setting_name)
if not require_restart:
Global.config_cache.set_value("preferences", setting_name, default_value)
Global.preferences_dialog.preference_update(setting_name, require_restart)
Global.preferences_dialog.disable_restore_default_button(self, true)
node.set(value_type, default_value)