60 translate_m4(r_imat, -pose->position[0], -pose->position[1], -pose->position[2]);
75 translate_m4(r_imat, -pose->position[0], -pose->position[1], -pose->position[2]);
79 const GHOST_XrDrawViewInfo *draw_view,
82 float r_viewmat[4][4],
83 float r_projmat[4][4])
85 GHOST_XrPose eye_pose;
86 float eye_inv[4][4], base_inv[4][4], nav_inv[4][4], m[4][4];
89 copy_qt_qt(eye_pose.orientation_quat, draw_view->eye_pose.orientation_quat);
90 copy_v3_v3(eye_pose.position, draw_view->eye_pose.position);
92 sub_v3_v3(eye_pose.position, draw_view->local_pose.position);
107 draw_view->fov.angle_left,
108 draw_view->fov.angle_right,
109 draw_view->fov.angle_up,
110 draw_view->fov.angle_down,
118 const GHOST_XrDrawViewInfo *draw_view)
124 const bool is_upside_down = GHOST_XrSessionNeedsUpsideDownDrawing(runtime_data->
context);
128 rect.
xmax = draw_view->width - 1;
129 rect.
ymax = draw_view->height - 1;
134 if (is_upside_down) {
150 float viewmat[4][4], winmat[4][4];
227 const char *subaction_path)
229 GHOST_XrControllerModelData model_data;
231 if (!GHOST_XrGetControllerModelData(xr_context, subaction_path, &model_data) ||
232 model_data.count_vertices < 1)
243 vbo->
data<GHOST_XrControllerModelVertex>().copy_from(
244 {model_data.vertices, model_data.count_vertices});
247 if (model_data.count_indices > 0 && ((model_data.count_indices % 3) == 0)) {
249 const uint prim_len = model_data.count_indices / 3;
251 for (
uint i = 0;
i < prim_len; ++
i) {
252 const uint32_t *idx = &model_data.indices[
i * 3];
262 GHOST_XrContextHandle xr_context,
265 GHOST_XrControllerModelData model_data;
271 color[0] = color[1] = color[2] = 0.0f;
291 blender::gpu::Batch *model =
controller->model;
298 GHOST_XrGetControllerModelData(xr_context,
controller->subaction_path, &model_data) &&
299 model_data.count_components > 0)
306 for (
uint component_idx = 0; component_idx < model_data.count_components; ++component_idx) {
307 const GHOST_XrControllerModelComponent *component = &model_data.components[component_idx];
311 model->elem ? component->index_offset : component->vertex_offset,
312 model->elem ? component->index_count : component->vertex_count);
319 const float scale = 0.05f;
343 draw_ray = !
state->is_raycast_shown;
350 format,
"color", blender::gpu::VertAttrType::SFLOAT_32_32_32_32);
360 const float color[4] = {0.33f, 0.33f, 1.0f, 0.5f};
361 const float scale = settings->
clip_end;
386 const float r[4] = {255 / 255.0f, 51 / 255.0f, 82 / 255.0f, 255 / 255.0f};
387 const float g[4] = {139 / 255.0f, 220 / 255.0f, 0 / 255.0f, 255 / 255.0f};
388 const float b[4] = {40 / 255.0f, 144 / 255.0f, 255 / 255.0f, 255 / 255.0f};
389 const float scale = 0.01f;
390 float x_axis[3], y_axis[3], z_axis[3];
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void perspective_m4_fov(float mat[4][4], float angle_left, float angle_right, float angle_up, float angle_down, float nearClip, 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 quat_to_mat4(float m[4][4], const float q[4])
void invert_qt_qt_normalized(float q1[4], const float q2[4])
void copy_qt_qt(float q[4], const float a[4])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
@ V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS
@ V3D_OFSDRAW_XR_SHOW_PASSTHROUGH
@ XR_SESSION_USE_ABSOLUTE_TRACKING
@ XR_SESSION_USE_POSITION_TRACKING
@ XR_CONTROLLER_DRAW_LIGHT_RAY
@ XR_CONTROLLER_DRAW_LIGHT
@ XR_CONTROLLER_DRAW_DARK_RAY
@ XR_CONTROLLER_DRAW_DARK
void ED_view3d_draw_offscreen_simple(Depsgraph *depsgraph, Scene *scene, View3DShading *shading_override, eDrawType drawtype, int object_type_exclude_viewport_override, int object_type_exclude_select_override, int winx, int winy, unsigned int draw_flags, const float viewmat[4][4], const float winmat[4][4], float clip_start, float clip_end, float vignette_aperture, bool is_xr_surface, bool is_image_render, bool draw_background, const char *viewname, bool do_color_management, GPUOffScreen *ofs, GPUViewport *viewport)
static Controller * controller
GHOST C-API function and type declarations.
void GPU_batch_program_set_builtin(blender::gpu::Batch *batch, GPUBuiltinShader shader_id)
blender::gpu::Batch * GPU_batch_create_ex(GPUPrimType primitive_type, blender::gpu::VertBuf *vertex_buf, blender::gpu::IndexBuf *index_buf, GPUBatchFlag owns_flag)
void GPU_batch_draw(blender::gpu::Batch *batch)
#define GPU_batch_uniform_4fv(batch, name, val)
void GPU_batch_draw_range(blender::gpu::Batch *batch, int vertex_first, int vertex_count)
blender::gpu::Batch * GPU_batch_preset_sphere(int lod) ATTR_WARN_UNUSED_RESULT
void GPU_offscreen_bind(GPUOffScreen *offscreen, bool save)
void GPU_framebuffer_restore()
void GPU_clear_depth(float depth)
void GPU_indexbuf_init(GPUIndexBufBuilder *, GPUPrimType, uint prim_len, uint vertex_len)
blender::gpu::IndexBuf * GPU_indexbuf_build(GPUIndexBufBuilder *)
void GPU_indexbuf_add_tri_verts(GPUIndexBufBuilder *, uint v1, uint v2, uint v3)
#define GPU_matrix_mul(x)
void GPU_matrix_scale_1f(float factor)
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SHADER_3D_POLYLINE_FLAT_COLOR
void GPU_blend(GPUBlend blend)
void GPU_depth_test(GPUDepthTest test)
void GPU_viewport_size_get_f(float coords[4])
static blender::gpu::VertBuf * GPU_vertbuf_create_with_format(const GPUVertFormat &format)
void GPU_vertbuf_data_alloc(blender::gpu::VertBuf &verts, uint v_len)
void GPU_viewport_draw_to_screen_ex(GPUViewport *viewport, int view, const rcti *rect, bool display_colorspace, bool do_overlay_merge)
int object_type_exclude_select
int object_type_exclude_viewport
char controller_draw_style
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
GHOST_XrPose nav_pose_prev
struct wmXrVignetteData * vignette_data
struct GPUViewport * viewport
struct GPUOffScreen * offscreen
void WM_global_report(eReportType type, const char *message)
void wmViewport(const rcti *winrct)
void wm_xr_pose_to_mat(const GHOST_XrPose *pose, float r_mat[4][4])
static void wm_xr_draw_viewport_buffers_to_active_framebuffer(const wmXrRuntimeData *runtime_data, const wmXrSurfaceData *surface_data, const GHOST_XrDrawViewInfo *draw_view)
void wm_xr_draw_controllers(const bContext *, ARegion *, void *customdata)
static void wm_xr_controller_model_draw(const XrSessionSettings *settings, GHOST_XrContextHandle xr_context, wmXrSessionState *state)
static void wm_xr_controller_aim_draw(const XrSessionSettings *settings, wmXrSessionState *state)
void wm_xr_pose_scale_to_mat(const GHOST_XrPose *pose, float scale, float r_mat[4][4])
static void wm_xr_draw_matrices_create(const wmXrDrawData *draw_data, const GHOST_XrDrawViewInfo *draw_view, const XrSessionSettings *session_settings, const wmXrSessionState *session_state, float r_viewmat[4][4], float r_projmat[4][4])
bool wm_xr_passthrough_enabled(void *customdata)
Check if XR passthrough is enabled.
static blender::gpu::Batch * wm_xr_controller_model_batch_create(GHOST_XrContextHandle xr_context, const char *subaction_path)
void wm_xr_disable_passthrough(void *customdata)
Disable XR passthrough if not supported.
void wm_xr_pose_scale_to_imat(const GHOST_XrPose *pose, float scale, float r_imat[4][4])
void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
Draw a viewport for a single eye.
void wm_xr_pose_to_imat(const GHOST_XrPose *pose, float r_imat[4][4])
void wm_xr_session_draw_data_update(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)