Changing timing of call to xr_interface->pre_draw_viewport
This commit is contained in:
parent
9afc8337bd
commit
b742b4c6e6
@ -614,19 +614,18 @@ void RendererViewport::draw_viewports() {
|
||||
|
||||
if (vp->use_xr) {
|
||||
if (xr_interface.is_valid()) {
|
||||
// Ignore update mode we have to commit frames to our XR interface
|
||||
visible = true;
|
||||
|
||||
// Override our size, make sure it matches our required size and is created as a stereo target
|
||||
Size2 xr_size = xr_interface->get_render_target_size();
|
||||
_viewport_set_size(vp, xr_size.width, xr_size.height, xr_interface->get_view_count());
|
||||
|
||||
// Inform xr interface we're about to render its viewport, if this returns false we don't render
|
||||
visible = xr_interface->pre_draw_viewport(vp->render_target);
|
||||
} else {
|
||||
// don't render anything
|
||||
visible = false;
|
||||
vp->size = Size2();
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
if (vp->update_mode == RS::VIEWPORT_UPDATE_ALWAYS || vp->update_mode == RS::VIEWPORT_UPDATE_ONCE) {
|
||||
visible = true;
|
||||
}
|
||||
@ -641,6 +640,7 @@ void RendererViewport::draw_viewports() {
|
||||
visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
visible = visible && vp->size.x > 1 && vp->size.y > 1;
|
||||
|
||||
@ -664,6 +664,11 @@ void RendererViewport::draw_viewports() {
|
||||
|
||||
RSG::texture_storage->render_target_set_as_unused(vp->render_target);
|
||||
if (vp->use_xr && xr_interface.is_valid()) {
|
||||
// Inform XR interface we're about to render its viewport,
|
||||
// if this returns false we don't render.
|
||||
// This usually is a result of the player taking off their headset and OpenXR telling us to skip
|
||||
// rendering frames.
|
||||
if (xr_interface->pre_draw_viewport(vp->render_target)) {
|
||||
RSG::texture_storage->render_target_set_override_color(vp->render_target, xr_interface->get_color_texture());
|
||||
RSG::texture_storage->render_target_set_override_depth(vp->render_target, xr_interface->get_depth_texture());
|
||||
RSG::texture_storage->render_target_set_override_velocity(vp->render_target, xr_interface->get_velocity_texture());
|
||||
@ -674,8 +679,6 @@ void RendererViewport::draw_viewports() {
|
||||
// and draw viewport
|
||||
_draw_viewport(vp);
|
||||
|
||||
// measure
|
||||
|
||||
// commit our eyes
|
||||
Vector<BlitToScreen> blits = xr_interface->post_draw_viewport(vp->render_target, vp->viewport_to_screen_rect);
|
||||
if (vp->viewport_to_screen != DisplayServer::INVALID_WINDOW_ID) {
|
||||
@ -694,6 +697,7 @@ void RendererViewport::draw_viewports() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
RSG::texture_storage->render_target_set_override_color(vp->render_target, RID()); // TODO if fullscreen output, we can set this to our texture chain
|
||||
RSG::texture_storage->render_target_set_override_depth(vp->render_target, RID());
|
||||
|
Loading…
Reference in New Issue
Block a user