diff options
Diffstat (limited to 'servers/visual/visual_server_viewport.cpp')
| -rw-r--r-- | servers/visual/visual_server_viewport.cpp | 46 | 
1 files changed, 33 insertions, 13 deletions
diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp index 3eb8953c1f..dcc270ca5e 100644 --- a/servers/visual/visual_server_viewport.cpp +++ b/servers/visual/visual_server_viewport.cpp @@ -178,11 +178,14 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E  		VSG::rasterizer->restore_render_target();  		if (scenario_draw_canvas_bg && canvas_map.front() && canvas_map.front()->key().layer > scenario_canvas_max_layer) { +			Ref<ARVRInterface> arvr_interface = ARVRServer::get_singleton()->get_primary_interface(); -			if (can_draw_3d) { -				VSG::scene->render_camera(p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas); -			} else { +			if (!can_draw_3d) {  				VSG::scene->render_empty_scene(p_viewport->scenario, p_viewport->shadow_atlas); +			} else if (p_viewport->use_arvr && arvr_interface.is_valid()) { +				VSG::scene->render_camera(arvr_interface, p_eye, p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas); +			} else { +				VSG::scene->render_camera(p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas);  			}  			scenario_draw_canvas_bg = false;  		} @@ -210,11 +213,14 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E  			i++;  			if (scenario_draw_canvas_bg && E->key().layer >= scenario_canvas_max_layer) { +				Ref<ARVRInterface> arvr_interface = ARVRServer::get_singleton()->get_primary_interface(); -				if (can_draw_3d) { -					VSG::scene->render_camera(p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas); -				} else { +				if (!can_draw_3d) {  					VSG::scene->render_empty_scene(p_viewport->scenario, p_viewport->shadow_atlas); +				} else if (p_viewport->use_arvr && arvr_interface.is_valid()) { +					VSG::scene->render_camera(arvr_interface, p_eye, p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas); +				} else { +					VSG::scene->render_camera(p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas);  				}  				scenario_draw_canvas_bg = false; @@ -222,11 +228,14 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E  		}  		if (scenario_draw_canvas_bg) { +			Ref<ARVRInterface> arvr_interface = ARVRServer::get_singleton()->get_primary_interface(); -			if (can_draw_3d) { -				VSG::scene->render_camera(p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas); -			} else { +			if (!can_draw_3d) {  				VSG::scene->render_empty_scene(p_viewport->scenario, p_viewport->shadow_atlas); +			} else if (p_viewport->use_arvr && arvr_interface.is_valid()) { +				VSG::scene->render_camera(arvr_interface, p_eye, p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas); +			} else { +				VSG::scene->render_camera(p_viewport->camera, p_viewport->scenario, p_viewport->size, p_viewport->shadow_atlas);  			}  			scenario_draw_canvas_bg = false; @@ -239,10 +248,9 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E  void VisualServerViewport::draw_viewports() {  	// get our arvr interface in case we need it  	Ref<ARVRInterface> arvr_interface = ARVRServer::get_singleton()->get_primary_interface(); -	if (arvr_interface.is_valid()) { -		// update our positioning information as late as possible... -		arvr_interface->process(); -	} + +	// process all our active interfaces +	ARVRServer::get_singleton()->_process();  	clear_color = GLOBAL_GET("rendering/environment/default_clear_color"); @@ -286,6 +294,9 @@ void VisualServerViewport::draw_viewports() {  				_draw_viewport(vp, ARVRInterface::EYE_RIGHT);  				arvr_interface->commit_for_eye(ARVRInterface::EYE_RIGHT, vp->render_target, vp->viewport_to_screen_rect);  			} + +			// and for our frame timing, mark when we've finished commiting our eyes +			ARVRServer::get_singleton()->_mark_commit();  		} else {  			VSG::rasterizer->set_current_render_target(vp->render_target); @@ -451,6 +462,15 @@ void VisualServerViewport::viewport_set_disable_3d(RID p_viewport, bool p_disabl  	//this should be just for disabling rendering of 3D, to actually disable it, set usage  } +void VisualServerViewport::viewport_set_keep_3d_linear(RID p_viewport, bool p_keep_3d_linear) { + +	Viewport *viewport = viewport_owner.getornull(p_viewport); +	ERR_FAIL_COND(!viewport); + +	viewport->keep_3d_linear = p_keep_3d_linear; +	VSG::storage->render_target_set_flag(viewport->render_target, RasterizerStorage::RENDER_TARGET_KEEP_3D_LINEAR, p_keep_3d_linear); +} +  void VisualServerViewport::viewport_attach_camera(RID p_viewport, RID p_camera) {  	Viewport *viewport = viewport_owner.getornull(p_viewport);  |