OpenXR: Change timing of xrWaitFrame and add thread safety features to OpenXR

This commit is contained in:
Bastiaan Olij
2024-03-21 18:58:24 +11:00
parent d282e4f0e6
commit cbab7dc049
19 changed files with 617 additions and 246 deletions

View File

@ -41,6 +41,32 @@
#include "servers/display_server.h"
#include "servers/rendering/rendering_device.h"
// Helper macros for code outside of the rendering server, but that is
// called by the rendering server.
#ifdef DEBUG_ENABLED
#define ERR_ON_RENDER_THREAD \
RenderingServer *rendering_server = RenderingServer::get_singleton(); \
ERR_FAIL_NULL(rendering_server); \
ERR_FAIL_COND(rendering_server->is_on_render_thread());
#define ERR_ON_RENDER_THREAD_V(m_ret) \
RenderingServer *rendering_server = RenderingServer::get_singleton(); \
ERR_FAIL_NULL_V(rendering_server, m_ret); \
ERR_FAIL_COND_V(rendering_server->is_on_render_thread(), m_ret);
#define ERR_NOT_ON_RENDER_THREAD \
RenderingServer *rendering_server = RenderingServer::get_singleton(); \
ERR_FAIL_NULL(rendering_server); \
ERR_FAIL_COND(!rendering_server->is_on_render_thread());
#define ERR_NOT_ON_RENDER_THREAD_V(m_ret) \
RenderingServer *rendering_server = RenderingServer::get_singleton(); \
ERR_FAIL_NULL_V(rendering_server, m_ret); \
ERR_FAIL_COND_V(!rendering_server->is_on_render_thread(), m_ret);
#else
#define ERR_ON_RENDER_THREAD
#define ERR_ON_RENDER_THREAD_V(m_ret)
#define ERR_NOT_ON_RENDER_THREAD
#define ERR_NOT_ON_RENDER_THREAD_V(m_ret)
#endif
template <typename T>
class TypedArray;
@ -1684,7 +1710,7 @@ public:
#ifndef DISABLE_DEPRECATED
// Never actually used, should be removed when we can break compatibility.
enum Features {
enum Features{
FEATURE_SHADERS,
FEATURE_MULTITHREADED,
};
@ -1708,6 +1734,7 @@ public:
bool is_render_loop_enabled() const;
void set_render_loop_enabled(bool p_enabled);
virtual bool is_on_render_thread() = 0;
virtual void call_on_render_thread(const Callable &p_callable) = 0;
#ifdef TOOLS_ENABLED