45 translate_m4(r_viewmat, -pose->position[0], -pose->position[1], -pose->position[2]);
49 const GHOST_XrDrawViewInfo *draw_view,
51 float r_view_mat[4][4],
52 float r_proj_mat[4][4])
54 GHOST_XrPose eye_pose;
56 copy_qt_qt(eye_pose.orientation_quat, draw_view->eye_pose.orientation_quat);
57 copy_v3_v3(eye_pose.position, draw_view->eye_pose.position);
60 sub_v3_v3(eye_pose.position, draw_view->local_pose.position);
64 draw_view->fov.angle_left,
65 draw_view->fov.angle_right,
66 draw_view->fov.angle_up,
67 draw_view->fov.angle_down,
84 const GHOST_XrDrawViewInfo *draw_view)
86 const bool is_upside_down = GHOST_XrSessionNeedsUpsideDownDrawing(runtime_data->
context);
87 rcti rect = {.
xmin = 0, .ymin = 0, .xmax = draw_view->width - 1, .ymax = draw_view->height - 1};
96 surface_data->
viewport, 0, &rect, draw_view->expects_srgb_buffer,
true);
115 float viewmat[4][4], winmat[4][4];
void perspective_m4_fov(float mat[4][4], const float angle_left, const float angle_right, const float angle_up, const float angle_down, const float nearClip, const float farClip)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void translate_m4(float mat[4][4], float tx, float ty, float tz)
void invert_qt_qt_normalized(float q1[4], const float q2[4])
void copy_qt_qt(float q[4], const float a[4])
void quat_to_mat4(float mat[4][4], const float q[4])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
@ V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS
@ XR_SESSION_USE_POSITION_TRACKING
void ED_view3d_draw_offscreen_simple(struct Depsgraph *depsgraph, struct Scene *scene, struct View3DShading *shading_override, int drawtype, int winx, int winy, unsigned int draw_flags, const float viewmat[4][4], const float winmat[4][4], float clip_start, float clip_end, bool is_image_render, bool draw_background, const char *viewname, const bool do_color_management, struct GPUOffScreen *ofs, struct GPUViewport *viewport)
GHOST C-API function and type declarations.
void GPU_framebuffer_restore(void)
void GPU_viewport_draw_to_screen_ex(GPUViewport *viewport, int view, const rcti *rect, bool display_colorspace, bool do_overlay_merge)
void GPU_clear_depth(float depth)
void GPU_offscreen_bind(GPUOffScreen *ofs, bool save)
struct View3DShading shading
XrSessionSettings session_settings
struct wmXrRuntimeData * runtime
float eye_position_ofs[3]
struct Depsgraph * depsgraph
wmXrSurfaceData * surface_data
GHOST_XrContextHandle context
wmXrSessionState session_state
struct GPUViewport * viewport
struct GPUOffScreen * offscreen
void wmViewport(const rcti *winrct)
static void wm_xr_draw_viewport_buffers_to_active_framebuffer(const wmXrRuntimeData *runtime_data, const wmXrSurfaceData *surface_data, const GHOST_XrDrawViewInfo *draw_view)
static void wm_xr_draw_matrices_create(const wmXrDrawData *draw_data, const GHOST_XrDrawViewInfo *draw_view, const XrSessionSettings *session_settings, float r_view_mat[4][4], float r_proj_mat[4][4])
void wm_xr_pose_to_viewmat(const GHOST_XrPose *pose, float r_viewmat[4][4])
void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
Draw a viewport for a single eye.
void wm_xr_session_draw_data_update(const wmXrSessionState *state, const XrSessionSettings *settings, const GHOST_XrDrawViewInfo *draw_view, wmXrDrawData *draw_data)
void wm_xr_session_state_update(const XrSessionSettings *settings, const wmXrDrawData *draw_data, const GHOST_XrDrawViewInfo *draw_view, wmXrSessionState *state)
bool wm_xr_session_surface_offscreen_ensure(wmXrSurfaceData *surface_data, const GHOST_XrDrawViewInfo *draw_view)
bool WM_xr_session_is_ready(const wmXrData *xr)