1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-21 13:03:13 +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" msgid "Performance"
msgstr "" msgstr ""
#. Found in the preferences. Refers to device drivers, such as video drivers and tablet drivers.
msgid "Drivers"
msgstr ""
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
@ -571,6 +575,10 @@ msgstr ""
msgid "Indicators" msgid "Indicators"
msgstr "" 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" msgid "On"
msgstr "" msgstr ""

View file

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

View file

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

View file

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