You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-22 15:06:45 +00:00
Remove redundant thread sync counter draw_pending
The functions that used it already use a threadsafe FIFO queue to communicate between threads and a sync to have the main thread wait for the render thread. Fixes #35718
This commit is contained in:
committed by
Rémi Verschelde
parent
3b17447d43
commit
9fbdace917
@@ -37,13 +37,10 @@ void VisualServerWrapMT::thread_exit() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void VisualServerWrapMT::thread_draw(bool p_swap_buffers, double frame_step) {
|
void VisualServerWrapMT::thread_draw(bool p_swap_buffers, double frame_step) {
|
||||||
if (!draw_pending.decrement()) {
|
|
||||||
visual_server->draw(p_swap_buffers, frame_step);
|
visual_server->draw(p_swap_buffers, frame_step);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualServerWrapMT::thread_flush() {
|
void VisualServerWrapMT::thread_flush() {
|
||||||
draw_pending.decrement();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualServerWrapMT::_thread_callback(void *_instance) {
|
void VisualServerWrapMT::_thread_callback(void *_instance) {
|
||||||
@@ -75,7 +72,6 @@ void VisualServerWrapMT::thread_loop() {
|
|||||||
|
|
||||||
void VisualServerWrapMT::sync() {
|
void VisualServerWrapMT::sync() {
|
||||||
if (create_thread) {
|
if (create_thread) {
|
||||||
draw_pending.increment();
|
|
||||||
command_queue.push_and_sync(this, &VisualServerWrapMT::thread_flush);
|
command_queue.push_and_sync(this, &VisualServerWrapMT::thread_flush);
|
||||||
} else {
|
} else {
|
||||||
command_queue.flush_all(); //flush all pending from other threads
|
command_queue.flush_all(); //flush all pending from other threads
|
||||||
@@ -84,7 +80,6 @@ void VisualServerWrapMT::sync() {
|
|||||||
|
|
||||||
void VisualServerWrapMT::draw(bool p_swap_buffers, double frame_step) {
|
void VisualServerWrapMT::draw(bool p_swap_buffers, double frame_step) {
|
||||||
if (create_thread) {
|
if (create_thread) {
|
||||||
draw_pending.increment();
|
|
||||||
command_queue.push(this, &VisualServerWrapMT::thread_draw, p_swap_buffers, frame_step);
|
command_queue.push(this, &VisualServerWrapMT::thread_draw, p_swap_buffers, frame_step);
|
||||||
} else {
|
} else {
|
||||||
visual_server->draw(p_swap_buffers, frame_step);
|
visual_server->draw(p_swap_buffers, frame_step);
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ class VisualServerWrapMT : public VisualServer {
|
|||||||
SafeFlag draw_thread_up;
|
SafeFlag draw_thread_up;
|
||||||
bool create_thread;
|
bool create_thread;
|
||||||
|
|
||||||
SafeNumeric<uint64_t> draw_pending;
|
|
||||||
void thread_draw(bool p_swap_buffers, double frame_step);
|
void thread_draw(bool p_swap_buffers, double frame_step);
|
||||||
void thread_flush();
|
void thread_flush();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user