Browse Source

Merge pull request #98391 from RandomShaper/rd_thread_switch

Implement thread ownership change for RenderingDevice
Clay John 9 months ago
parent
commit
533c616cb8

+ 4 - 0
servers/rendering/rendering_device.cpp

@@ -7260,6 +7260,10 @@ void RenderingDevice::_bind_methods() {
 	BIND_ENUM_CONSTANT(DEBUG_PASS);
 	BIND_ENUM_CONSTANT(DEBUG_PASS);
 }
 }
 
 
+void RenderingDevice::make_current() {
+	render_thread_id = Thread::get_caller_id();
+}
+
 RenderingDevice::~RenderingDevice() {
 RenderingDevice::~RenderingDevice() {
 	finalize();
 	finalize();
 
 

+ 2 - 0
servers/rendering/rendering_device.h

@@ -1496,6 +1496,8 @@ public:
 
 
 	static RenderingDevice *get_singleton();
 	static RenderingDevice *get_singleton();
 
 
+	void make_current();
+
 	RenderingDevice();
 	RenderingDevice();
 	~RenderingDevice();
 	~RenderingDevice();
 
 

+ 2 - 0
servers/rendering/rendering_server_default.cpp

@@ -370,6 +370,8 @@ Size2i RenderingServerDefault::get_maximum_viewport_size() const {
 void RenderingServerDefault::_assign_mt_ids(WorkerThreadPool::TaskID p_pump_task_id) {
 void RenderingServerDefault::_assign_mt_ids(WorkerThreadPool::TaskID p_pump_task_id) {
 	server_thread = Thread::get_caller_id();
 	server_thread = Thread::get_caller_id();
 	server_task_id = p_pump_task_id;
 	server_task_id = p_pump_task_id;
+	// This is needed because the main RD is created on the main thread.
+	RenderingDevice::get_singleton()->make_current();
 }
 }
 
 
 void RenderingServerDefault::_thread_exit() {
 void RenderingServerDefault::_thread_exit() {