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:
parent
4d113d37e5
commit
3ef73eacea
6 changed files with 356 additions and 244 deletions
|
@ -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 ""
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue