54 translate_m4(r_imat, -pose->position[0], -pose->position[1], -pose->position[2]);
69 translate_m4(r_imat, -pose->position[0], -pose->position[1], -pose->position[2]);
76 float r_viewmat[4][4],
77 float r_projmat[4][4])
79 GHOST_XrPose eye_pose;
80 float eye_inv[4][4], base_inv[4][4], nav_inv[4][4], m[4][4];
118 const bool is_upside_down = GHOST_XrSessionNeedsUpsideDownDrawing(runtime_data->
context);
128 if (is_upside_down) {
144 float viewmat[4][4], winmat[4][4];
220 const char *subaction_path)
222 GHOST_XrControllerModelData model_data;
224 if (!GHOST_XrGetControllerModelData(xr_context, subaction_path, &model_data) ||
225 model_data.count_vertices < 1)
236 vbo->
data<GHOST_XrControllerModelVertex>().copy_from(
237 {model_data.vertices, model_data.count_vertices});
240 if (model_data.count_indices > 0 && ((model_data.count_indices % 3) == 0)) {
242 const uint prim_len = model_data.count_indices / 3;
244 for (
uint i = 0; i < prim_len; ++i) {
245 const uint32_t *idx = &model_data.indices[i * 3];
255 GHOST_XrContextHandle xr_context,
258 GHOST_XrControllerModelData model_data;
284 blender::gpu::Batch *model =
controller->model;
291 GHOST_XrGetControllerModelData(xr_context,
controller->subaction_path, &model_data) &&
292 model_data.count_components > 0)
299 for (
uint component_idx = 0; component_idx < model_data.count_components; ++component_idx) {
300 const GHOST_XrControllerModelComponent *component = &model_data.components[component_idx];
304 model->elem ? component->index_offset : component->vertex_offset,
305 model->elem ? component->index_count : component->vertex_count);
312 const float scale = 0.05f;
353 const float scale = settings->
clip_end;
378 const uchar r[4] = {255, 51, 82, 255};
379 const uchar g[4] = {139, 220, 0, 255};
380 const uchar b[4] = {40, 144, 255, 255};
381 const float scale = 0.01f;
382 float x_axis[3], y_axis[3], z_axis[3];
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
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, 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.
blender::gpu::Batch * GPU_batch_create_ex(GPUPrimType primitive_type, blender::gpu::VertBuf *vertex_buf, blender::gpu::IndexBuf *index_buf, eGPUBatchFlag owns_flag)
void GPU_batch_program_set_builtin(blender::gpu::Batch *batch, eGPUBuiltinShader shader_id)
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(eGPUBlend blend)
void GPU_depth_test(eGPUDepthTest test)
void GPU_viewport_size_get_f(float coords[4])
#define GPU_vertbuf_create_with_format(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)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
local_group_size(16, 16) .push_constant(Type b
direct_radiance_1_tx direct_radiance_3_tx indirect_radiance_2_tx radiance_feedback_img draw_fullscreen fragment_source("eevee_deferred_combine_frag.glsl") .specialization_constant(Type out_radiance draw_view
draw_view in_light_buf[] float
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 GPUViewport * viewport
struct GPUOffScreen * offscreen
void WM_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)