You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Control::get_theme_constant: This function in this node can only be accessed from either the main thread or a thread group. Use call_deferred() instead.
The error comes from the var vb = VBoxContainer.new() line, so using call_deferred() is obviously not possible (unless we were able to await it somehow). The reason for error is that controls initialize their theme cache in NOTIFICATION_POSTINITIALIZE.
The code above is perfectly thread-safe and not allowing it makes it very inconvenient to create Control branches in thread (e.g. when you populate a list or something). Well, it does work, but the error results in a spam, so it should be prevented. Either we could remove the theme initialization from POSTINITIALIZE (the node is not inside tree yet, so not sure how much is it useful) or remove it, but only when the node is not in main thread.
Steps to reproduce
Run the code above.
Minimal reproduction project
N/A
The text was updated successfully, but these errors were encountered:
Godot version
4.1 621d68e
System information
Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 (NVIDIA; 30.0.15.1403) - Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (8 Threads)
Issue description
When you create a Control node, that contains theme items, in a thread, e.g.
it results in an error
The error comes from the
var vb = VBoxContainer.new()
line, so usingcall_deferred()
is obviously not possible (unless we were able to await it somehow). The reason for error is that controls initialize their theme cache inNOTIFICATION_POSTINITIALIZE
.The code above is perfectly thread-safe and not allowing it makes it very inconvenient to create Control branches in thread (e.g. when you populate a list or something). Well, it does work, but the error results in a spam, so it should be prevented. Either we could remove the theme initialization from POSTINITIALIZE (the node is not inside tree yet, so not sure how much is it useful) or remove it, but only when the node is not in main thread.
Steps to reproduce
Run the code above.
Minimal reproduction project
N/A
The text was updated successfully, but these errors were encountered: