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