diff options
Diffstat (limited to 'servers/rendering/rendering_server_default.cpp')
| -rw-r--r-- | servers/rendering/rendering_server_default.cpp | 31 | 
1 files changed, 13 insertions, 18 deletions
diff --git a/servers/rendering/rendering_server_default.cpp b/servers/rendering/rendering_server_default.cpp index bed6ade1f6..2ce9a20b6b 100644 --- a/servers/rendering/rendering_server_default.cpp +++ b/servers/rendering/rendering_server_default.cpp @@ -38,13 +38,16 @@  #include "renderer_scene_cull.h"  #include "rendering_server_globals.h" -// careful, these may run in different threads than the visual server +// careful, these may run in different threads than the rendering server  int RenderingServerDefault::changes = 0;  /* FREE */  void RenderingServerDefault::_free(RID p_rid) { +	if (unlikely(p_rid.is_null())) { +		return; +	}  	if (RSG::storage->free(p_rid)) {  		return;  	} @@ -61,14 +64,8 @@ void RenderingServerDefault::_free(RID p_rid) {  /* EVENT QUEUING */ -void RenderingServerDefault::request_frame_drawn_callback(Object *p_where, const StringName &p_method, const Variant &p_userdata) { -	ERR_FAIL_NULL(p_where); -	FrameDrawnCallbacks fdc; -	fdc.object = p_where->get_instance_id(); -	fdc.method = p_method; -	fdc.param = p_userdata; - -	frame_drawn_callbacks.push_back(fdc); +void RenderingServerDefault::request_frame_drawn_callback(const Callable &p_callable) { +	frame_drawn_callbacks.push_back(p_callable);  }  void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) { @@ -100,15 +97,13 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {  	RSG::scene->update_visibility_notifiers();  	while (frame_drawn_callbacks.front()) { -		Object *obj = ObjectDB::get_instance(frame_drawn_callbacks.front()->get().object); -		if (obj) { -			Callable::CallError ce; -			const Variant *v = &frame_drawn_callbacks.front()->get().param; -			obj->call(frame_drawn_callbacks.front()->get().method, &v, 1, ce); -			if (ce.error != Callable::CallError::CALL_OK) { -				String err = Variant::get_call_error_text(obj, frame_drawn_callbacks.front()->get().method, &v, 1, ce); -				ERR_PRINT("Error calling frame drawn function: " + err); -			} +		Callable c = frame_drawn_callbacks.front()->get(); +		Variant result; +		Callable::CallError ce; +		c.call(nullptr, 0, result, ce); +		if (ce.error != Callable::CallError::CALL_OK) { +			String err = Variant::get_callable_error_text(c, nullptr, 0, ce); +			ERR_PRINT("Error calling frame drawn function: " + err);  		}  		frame_drawn_callbacks.pop_front();  |