You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Add ability to call code on rendering thread
As more users use compute in Godot 4, the way they do is most likely incompatible when running on separate threads and will start erroring soon as we improve the thread safety of the render thread. To properly run code on the render thread, this function was added. Use like this: ```GDScript func initialize_compute_code(): .... func update_compute_code(custom_data): ... func _ready(): RenderingServer.call_on_render_thread( initialize_compute_code ) func _process(): RenderingServer.call_on_render_thread( update_compute_code.bind(with_data) ) ```
This commit is contained in:
@@ -97,6 +97,8 @@ class RenderingServerDefault : public RenderingServer {
|
||||
|
||||
void _free(RID p_rid);
|
||||
|
||||
void _call_on_render_thread(const Callable &p_callable);
|
||||
|
||||
public:
|
||||
//if editor is redrawing when it shouldn't, enable this and put a breakpoint in _changes_changed()
|
||||
//#define DEBUG_CHANGES
|
||||
@@ -987,6 +989,15 @@ public:
|
||||
virtual void init() override;
|
||||
virtual void finish() override;
|
||||
|
||||
virtual void call_on_render_thread(const Callable &p_callable) override {
|
||||
if (Thread::get_caller_id() == server_thread) {
|
||||
command_queue.flush_if_pending();
|
||||
_call_on_render_thread(p_callable);
|
||||
} else {
|
||||
command_queue.push(this, &RenderingServerDefault::_call_on_render_thread, p_callable);
|
||||
}
|
||||
}
|
||||
|
||||
/* TESTING */
|
||||
|
||||
virtual double get_frame_setup_time_cpu() const override;
|
||||
|
||||
Reference in New Issue
Block a user