66 GHOST_XrSessionBeginInfo *r_begin_info)
71 r_begin_info->exit_customdata = xr_data;
84 GHOST_XrSessionBeginInfo begin_info;
119 GHOST_XrPose *r_base_pose)
127 float tmp_quatx[4], tmp_quatz[4];
132 mul_qt_qtqt(r_base_pose->orientation_quat, tmp_quatz, tmp_quatx);
134 else if (base_pose_object) {
144 eul_to_quat(r_base_pose->orientation_quat, tmp_eul);
159 memset(r_draw_data, 0,
sizeof(*r_draw_data));
162 r_draw_data->
xr_data = xr_data;
215 if (
state->force_reset_to_base_pose) {
226 if (!
state->is_view_data_set) {
233 const bool position_tracking_toggled = ((
state->prev_settings_flag &
236 if (position_tracking_toggled) {
245 const GHOST_XrDrawViewInfo *draw_view,
253 if (use_position_tracking) {
264 if (use_position_tracking) {
273 if (use_position_tracking) {
295 const GHOST_XrDrawViewInfo *draw_view,
298 GHOST_XrPose viewer_pose;
303 draw_view->local_pose.orientation_quat);
310 if (use_position_tracking) {
311 viewer_pose.position[0] += draw_view->local_pose.position[0];
312 viewer_pose.position[1] -= draw_view->local_pose.position[2];
313 viewer_pose.position[2] += draw_view->local_pose.position[1];
317 copy_qt_qt(
state->viewer_pose.orientation_quat, viewer_pose.orientation_quat);
320 state->focal_len = 2.0f *
325 state->prev_settings_flag = settings->
flag;
328 state->is_view_data_set =
true;
330 state->force_reset_to_base_pose =
false;
361 float r_viewmat[4][4],
413 const GHOST_XrDrawViewInfo *draw_view)
415 const bool size_changed = surface_data->
offscreen &&
418 char err_out[256] =
"unknown";
419 bool failure =
false;
432 draw_view->width, draw_view->height,
true,
false, err_out))) {
456 if (
data->viewport) {
459 if (
data->offscreen) {
480 surface->activate = DRW_xr_drawing_begin;
481 surface->deactivate = DRW_xr_drawing_end;
483 surface->ghost_ctx = DRW_xr_opengl_context_get();
484 surface->gpu_ctx = DRW_xr_gpu_context_get();
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct Depsgraph * BKE_scene_get_depsgraph(const struct Scene *scene, const struct ViewLayer *view_layer)
void BKE_scene_graph_evaluated_ensure(struct Depsgraph *depsgraph, struct Main *bmain)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void unit_m4(float m[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mat4_to_loc_quat(float loc[3], float quat[4], const float wmat[4][4])
void eul_to_quat(float quat[4], const float eul[3])
void quat_to_eul(float eul[3], const float quat[4])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
void axis_angle_to_quat_single(float q[4], const char axis, const float angle)
float fov_to_focallength(float fov, float sensor)
void copy_qt_qt(float q[4], const float a[4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void zero_v3(float r[3])
#define CLOG_ERROR(clg_ref,...)
struct Depsgraph Depsgraph
#define DEFAULT_SENSOR_WIDTH
@ XR_SESSION_USE_POSITION_TRACKING
GHOST C-API function and type declarations.
GPUViewport * GPU_viewport_create(void)
void GPU_viewport_free(GPUViewport *viewport)
Read Guarded memory(de)allocation.
#define ND_XR_DATA_CHANGED
const Depsgraph * depsgraph
struct @203::@204 surface
void GPU_offscreen_free(GPUOffScreen *ofs)
void GPU_offscreen_unbind(GPUOffScreen *UNUSED(ofs), bool restore)
GPUOffScreen * GPU_offscreen_create(int width, int height, bool depth, bool high_bitdepth, char err_out[256])
int GPU_offscreen_width(const GPUOffScreen *ofs)
int GPU_offscreen_height(const GPUOffScreen *ofs)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
struct SELECTID_Context context
float base_pose_location[3]
Object * base_pose_object
XrSessionSettings session_settings
struct wmXrRuntimeData * runtime
float eye_position_ofs[3]
struct Depsgraph * depsgraph
wmXrSurfaceData * surface_data
GHOST_XrContextHandle context
wmXrSessionExitFn exit_fn
wmXrSessionState session_state
wmWindow * session_root_win
float viewer_viewmat[4][4]
bool force_reset_to_base_pose
struct GPUViewport * viewport
struct GPUOffScreen * offscreen
void WM_main_add_notifier(unsigned int type, void *reference)
void wm_surface_add(wmSurface *surface)
void wm_surface_remove(wmSurface *surface)
void wm_window_reset_drawable(void)
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
Scene * WM_window_get_active_scene(const wmWindow *win)
void wm_xr_runtime_data_free(wmXrRuntimeData **runtime)
void(* wmXrSessionExitFn)(const wmXrData *xr_data)
void wm_xr_pose_to_viewmat(const GHOST_XrPose *pose, float r_viewmat[4][4])
static void wm_xr_session_scene_and_evaluated_depsgraph_get(Main *bmain, const wmWindowManager *wm, Scene **r_scene, Depsgraph **r_depsgraph)
static void wm_xr_session_base_pose_calc(const Scene *scene, const XrSessionSettings *settings, GHOST_XrPose *r_base_pose)
wmXrSessionState * WM_xr_session_state_handle_get(const wmXrData *xr)
void WM_xr_session_base_pose_reset(wmXrData *xr)
static wmSurface * wm_xr_session_surface_create(void)
static void wm_xr_session_exit_cb(void *customdata)
static wmXrSessionStateEvent wm_xr_session_state_to_event(const wmXrSessionState *state, const XrSessionSettings *settings)
void wm_xr_session_draw_data_update(const wmXrSessionState *state, const XrSessionSettings *settings, const GHOST_XrDrawViewInfo *draw_view, wmXrDrawData *draw_data)
static void wm_xr_session_surface_free_data(wmSurface *surface)
static wmSurface * g_xr_surface
void wm_xr_session_toggle(wmWindowManager *wm, wmWindow *session_root_win, wmXrSessionExitFn session_exit_fn)
static void wm_xr_session_surface_draw(bContext *C)
Call Ghost-XR to draw a frame.
void * wm_xr_session_gpu_binding_context_create(void)
void wm_xr_session_state_update(const XrSessionSettings *settings, const wmXrDrawData *draw_data, const GHOST_XrDrawViewInfo *draw_view, wmXrSessionState *state)
static bool wm_xr_session_draw_data_needs_reset_to_base_pose(const wmXrSessionState *state, const XrSessionSettings *settings)
bool WM_xr_session_state_viewer_pose_matrix_info_get(const wmXrData *xr, float r_viewmat[4][4], float *r_focal_len)
static wmWindow * wm_xr_session_root_window_or_fallback_get(const wmWindowManager *wm, const wmXrRuntimeData *runtime_data)
bool wm_xr_session_surface_offscreen_ensure(wmXrSurfaceData *surface_data, const GHOST_XrDrawViewInfo *draw_view)
@ SESSION_STATE_EVENT_NONE
@ SESSION_STATE_EVENT_START
@ SESSION_STATE_EVENT_POSITON_TRACKING_TOGGLE
@ SESSION_STATE_EVENT_RESET_TO_BASE_POSE
bool WM_xr_session_is_ready(const wmXrData *xr)
bool WM_xr_session_state_viewer_pose_location_get(const wmXrData *xr, float r_location[3])
bool WM_xr_session_exists(const wmXrData *xr)
static void wm_xr_session_begin_info_create(wmXrData *xr_data, GHOST_XrSessionBeginInfo *r_begin_info)
static void wm_xr_session_draw_data_populate(wmXrData *xr_data, Scene *scene, Depsgraph *depsgraph, wmXrDrawData *r_draw_data)
bool WM_xr_session_state_viewer_pose_rotation_get(const wmXrData *xr, float r_rotation[4])
void wm_xr_session_gpu_binding_context_destroy(GHOST_ContextHandle UNUSED(context))