diff options
Diffstat (limited to 'servers/rendering')
| -rw-r--r-- | servers/rendering/renderer_rd/renderer_compositor_rd.cpp | 5 | ||||
| -rw-r--r-- | servers/rendering/renderer_viewport.cpp | 17 | ||||
| -rw-r--r-- | servers/rendering/renderer_viewport.h | 2 | ||||
| -rw-r--r-- | servers/rendering/rendering_server_default.cpp | 4 |
4 files changed, 16 insertions, 12 deletions
diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp index 7eb8cbd02f..b9bda9329e 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp @@ -103,8 +103,9 @@ void RendererCompositorRD::begin_frame(double frame_step) { } void RendererCompositorRD::end_frame(bool p_swap_buffers) { - // TODO: Likely pass a bool to swap buffers to avoid display? - RD::get_singleton()->swap_buffers(); + if (p_swap_buffers) { + RD::get_singleton()->swap_buffers(); + } } void RendererCompositorRD::initialize() { diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp index 86631ae9d9..e8e0d2e3eb 100644 --- a/servers/rendering/renderer_viewport.cpp +++ b/servers/rendering/renderer_viewport.cpp @@ -616,7 +616,7 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { } } -void RendererViewport::draw_viewports() { +void RendererViewport::draw_viewports(bool p_swap_buffers) { timestamp_vp_map.clear(); // get our xr interface in case we need it @@ -732,7 +732,7 @@ void RendererViewport::draw_viewports() { // 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) { - if (OS::get_singleton()->get_current_rendering_driver_name() == "opengl3" || OS::get_singleton()->get_current_rendering_driver_name() == "opengl3_angle") { + if (OS::get_singleton()->get_current_rendering_driver_name().begins_with("opengl3")) { if (blits.size() > 0) { RSG::rasterizer->blit_render_targets_to_screen(vp->viewport_to_screen, blits.ptr(), blits.size()); } @@ -771,7 +771,7 @@ void RendererViewport::draw_viewports() { blit_to_screen_list[vp->viewport_to_screen] = Vector<BlitToScreen>(); } - if (OS::get_singleton()->get_current_rendering_driver_name() == "opengl3" || OS::get_singleton()->get_current_rendering_driver_name() == "opengl3_angle") { + if (OS::get_singleton()->get_current_rendering_driver_name().begins_with("opengl3")) { Vector<BlitToScreen> blit_to_screen_vec; blit_to_screen_vec.push_back(blit); RSG::rasterizer->blit_render_targets_to_screen(vp->viewport_to_screen, blit_to_screen_vec.ptr(), 1); @@ -799,11 +799,14 @@ void RendererViewport::draw_viewports() { total_draw_calls_used = draw_calls_used; RENDER_TIMESTAMP("< Render Viewports"); - //this needs to be called to make screen swapping more efficient - RSG::rasterizer->prepare_for_blitting_render_targets(); - for (const KeyValue<int, Vector<BlitToScreen>> &E : blit_to_screen_list) { - RSG::rasterizer->blit_render_targets_to_screen(E.key, E.value.ptr(), E.value.size()); + if (p_swap_buffers) { + //this needs to be called to make screen swapping more efficient + RSG::rasterizer->prepare_for_blitting_render_targets(); + + for (const KeyValue<int, Vector<BlitToScreen>> &E : blit_to_screen_list) { + RSG::rasterizer->blit_render_targets_to_screen(E.key, E.value.ptr(), E.value.size()); + } } } diff --git a/servers/rendering/renderer_viewport.h b/servers/rendering/renderer_viewport.h index 44de6d8804..a0ec9e6318 100644 --- a/servers/rendering/renderer_viewport.h +++ b/servers/rendering/renderer_viewport.h @@ -299,7 +299,7 @@ public: void handle_timestamp(String p_timestamp, uint64_t p_cpu_time, uint64_t p_gpu_time); void set_default_clear_color(const Color &p_color); - void draw_viewports(); + void draw_viewports(bool p_swap_buffers); bool free(RID p_rid); diff --git a/servers/rendering/rendering_server_default.cpp b/servers/rendering/rendering_server_default.cpp index b13d33de9e..2c8265b7d7 100644 --- a/servers/rendering/rendering_server_default.cpp +++ b/servers/rendering/rendering_server_default.cpp @@ -88,10 +88,10 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) { RSG::scene->render_probes(); - RSG::viewport->draw_viewports(); + RSG::viewport->draw_viewports(p_swap_buffers); RSG::canvas_render->update(); - if (OS::get_singleton()->get_current_rendering_driver_name() != "opengl3" && OS::get_singleton()->get_current_rendering_driver_name() != "opengl3_angle") { + if (!OS::get_singleton()->get_current_rendering_driver_name().begins_with("opengl3")) { // Already called for gl_compatibility renderer. RSG::rasterizer->end_frame(p_swap_buffers); } |
