···553553 ns->base.orientation_tracking_supported = true;
554554 ns->base.device_type = XRT_DEVICE_TYPE_HMD;
555555556556+ size_t idx = 0;
557557+ // Preferred; most North Stars are see-through.
558558+ ns->base.hmd->blend_modes[idx++] = XRT_BLEND_MODE_ADDITIVE;
559559+560560+ // XRT_BLEND_MODE_OPAQUE is not preferred and kind of a lie, but we use North Star for VR sometimes despite its
561561+ // see-through display. And there's nothing stopping you from covering up the outside of the reflector, turning
562562+ // it into an opaque headset. As most VR apps I've encountered require BLEND_MODE_OPAQUE to be an option, we
563563+ // need to support it.
564564+ ns->base.hmd->blend_modes[idx++] = XRT_BLEND_MODE_OPAQUE;
565565+566566+ // Not supporting ALPHA_BLEND for now, because I know nothing about it and want to avoid unintended
567567+ // consequences. As soon as you have a specific reason to support it, go ahead and support it.
568568+ ns->base.hmd->num_blend_modes = idx;
569569+556570 return &ns->base;
557571558572cleanup:
+5-3
src/xrt/drivers/ohmd/oh_device.c
···839839 ohd->base.compute_distortion = compute_distortion_openhmd;
840840841841 // Which blend modes does the device support.
842842- ohd->base.hmd->blend_mode = XRT_BLEND_MODE_OPAQUE;
842842+843843+ size_t bm_idx = 0;
843844 if (info.quirks.video_see_through) {
844844- ohd->base.hmd->blend_mode =
845845- (enum xrt_blend_mode)(ohd->base.hmd->blend_mode | XRT_BLEND_MODE_ALPHA_BLEND);
845845+ ohd->base.hmd->blend_modes[bm_idx++] = XRT_BLEND_MODE_ALPHA_BLEND;
846846 }
847847+ ohd->base.hmd->blend_modes[bm_idx++] = XRT_BLEND_MODE_OPAQUE;
848848+ ohd->base.hmd->num_blend_modes = bm_idx;
847849848850 if (info.quirks.video_distortion_vive) {
849851 // clang-format off