### Godot version

v4.1.stable.official.970459615

### System information

Windows 10 OpenGL API 3.3.0

### Issue description

Calling force_draw from a thread crashes compatibility renderer. Not sure if bug or this is not something that we should be doing, but it seems to not cause any issue with mobile/desktop forward+ renderer. Reason why i do this because it lets the engine run at a higher frame rate than the renderer.

### Steps to reproduce

🧵

### Minimal reproduction project

[forcedraw.zip](https://github.com/godotengine/godot/files/11988748/forcedraw.zip)

Callable c = frame_drawn_callbacks.front()->get();
		Variant result;
		Callable::CallError ce;
		c.callp(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();
	}
	RS::get_singleton()->emit_signal(SNAME("frame_post_draw"));
	if (RSG::utilities->get_captured_timestamps_count()) {
		Vector<FrameProfileArea> new_profile;
		if (RSG::utilities->capturing_timestamps) {
			new_profile.resize(RSG::utilities->get_captured_timestamps_count());
		}
		uint64_t base_cpu = RSG::utilities->get_captured_timestamp_cpu_time(0);
		uint64_t base_gpu = RSG::utilities->get_captured_timestamp_gpu_time(0);
		for (uint32_t i = 0; i < RSG::utilities->get_captured_timestamps_count(); i++) {
			uint64_t time_cpu = RSG::utilities->get_captured_timestamp_cpu_time(i);
			uint64_t time_gpu = RSG::utilities->get_captured_timestamp_gpu_time(i);
			String name = RSG::utilities->get_captured_timestamp_name(i);
			if (name.begins_with("vp_")) {
				RSG::viewport->handle_timestamp(name, time_cpu, time_gpu);
			}
			if (RSG::utilities->capturing_timestamps) {
				new_profile.write[i].gpu_msec = double((time_gpu - base_gpu) / 1000) / 1000.0;
				new_profile.write[i].cpu_msec = double(time_cpu - base_cpu) / 1000.0;
				new_profile.write[i].name = RSG::utilities->get_captured_timestamp_name(i);
			}