From 0dbbe423d9b8aae6960b13e38c052ded5596177b Mon Sep 17 00:00:00 2001 From: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Date: Fri, 5 Jun 2020 15:36:26 +0200 Subject: [PATCH] c/layer_renderer: Implement eye visibility. --- doc/changes/compositor/mr.394.2.md | 2 ++ src/xrt/compositor/main/comp_layer.c | 11 +++++++++-- src/xrt/compositor/main/comp_layer.h | 2 +- src/xrt/compositor/main/comp_renderer.c | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 doc/changes/compositor/mr.394.2.md diff --git a/doc/changes/compositor/mr.394.2.md b/doc/changes/compositor/mr.394.2.md new file mode 100644 index 000000000..b26dd7121 --- /dev/null +++ b/doc/changes/compositor/mr.394.2.md @@ -0,0 +1,2 @@ +layer_rendering: Use the visibility flags on quad to correctly show the layers +in each eye. diff --git a/src/xrt/compositor/main/comp_layer.c b/src/xrt/compositor/main/comp_layer.c index d444f6f33..fffa2b028 100644 --- a/src/xrt/compositor/main/comp_layer.c +++ b/src/xrt/compositor/main/comp_layer.c @@ -161,8 +161,8 @@ _init(struct comp_render_layer *self, self->type = type; - self->visible = true; self->view_space = true; + self->visibility = XRT_LAYER_EYE_VISIBILITY_BOTH; math_matrix_4x4_identity(&self->model_matrix); @@ -206,8 +206,15 @@ comp_layer_draw(struct comp_render_layer *self, const struct xrt_matrix_4x4 *vp_world, const struct xrt_matrix_4x4 *vp_eye) { - if (!self->visible) + if (eye == 0 && + (self->visibility & XRT_LAYER_EYE_VISIBILITY_LEFT_BIT) == 0) { return; + } + + if (eye == 1 && + (self->visibility & XRT_LAYER_EYE_VISIBILITY_RIGHT_BIT) == 0) { + return; + } self->vk->vkCmdBindPipeline(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); diff --git a/src/xrt/compositor/main/comp_layer.h b/src/xrt/compositor/main/comp_layer.h index c2a60ac1e..d7ea73513 100644 --- a/src/xrt/compositor/main/comp_layer.h +++ b/src/xrt/compositor/main/comp_layer.h @@ -22,7 +22,7 @@ struct comp_render_layer { struct vk_bundle *vk; - bool visible; + enum xrt_layer_eye_visibility visibility; bool view_space; enum xrt_layer_type type; diff --git a/src/xrt/compositor/main/comp_renderer.c b/src/xrt/compositor/main/comp_renderer.c index c99bf3d05..862e6e2bd 100644 --- a/src/xrt/compositor/main/comp_renderer.c +++ b/src/xrt/compositor/main/comp_renderer.c @@ -502,6 +502,7 @@ comp_renderer_set_quad_layer(struct comp_renderer *r, comp_layer_set_flip_y(r->lr->layers[layer], data->flip_y); r->lr->layers[layer]->type = XRT_LAYER_QUAD; + r->lr->layers[layer]->visibility = data->quad.visibility; r->lr->layers[layer]->view_space = (data->flags & XRT_LAYER_COMPOSITION_VIEW_SPACE_BIT) != 0; -- GitLab