From 5a83fca1840207999076343610bf76a6cdd6fdf5 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 3 Oct 2021 21:39:33 +0300 Subject: [PATCH] Set viewport and scissor before clear commands Since this requires applying the pipeline state, using DSA for the clear commands seems pointless and was removed to simplify the code. --- source/backends/opengl/commands_backend.cpp | 29 +++++---------------- source/render/renderer.cpp | 2 ++ 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/source/backends/opengl/commands_backend.cpp b/source/backends/opengl/commands_backend.cpp index fd66b99c..e9fa8b7c 100644 --- a/source/backends/opengl/commands_backend.cpp +++ b/source/backends/opengl/commands_backend.cpp @@ -35,36 +35,19 @@ void OpenGLCommands::clear(const ClearValue *values) if(!target) throw invalid_operation("OpenGLCommands::clear"); - if(!ARB_direct_state_access) - { - static Require _req(MSP_clear_buffer); - pipeline_state->apply(); - } + static Require _req(MSP_clear_buffer); + + pipeline_state->apply(); unsigned i = 0; for(FrameAttachment a: target->get_format()) { if(get_attach_point(a)==get_attach_point(DEPTH_ATTACHMENT)) - { - if(ARB_direct_state_access) - glClearNamedFramebufferfv(target->id, GL_DEPTH, 0, &values->depth_stencil.depth); - else - glClearBufferfv(GL_DEPTH, 0, &values->depth_stencil.depth); - } + glClearBufferfv(GL_DEPTH, 0, &values->depth_stencil.depth); else if(get_attach_point(a)==get_attach_point(STENCIL_ATTACHMENT)) - { - if(ARB_direct_state_access) - glClearNamedFramebufferiv(target->id, GL_STENCIL, 0, &values->depth_stencil.stencil); - else - glClearBufferiv(GL_STENCIL, 0, &values->depth_stencil.stencil); - } + glClearBufferiv(GL_STENCIL, 0, &values->depth_stencil.stencil); else - { - if(ARB_direct_state_access) - glClearNamedFramebufferfv(target->id, GL_COLOR, i++, &values->color.r); - else - glClearBufferfv(GL_COLOR, i++, &values->color.r); - } + glClearBufferfv(GL_COLOR, i++, &values->color.r); ++values; } } diff --git a/source/render/renderer.cpp b/source/render/renderer.cpp index b142da75..a515071d 100644 --- a/source/render/renderer.cpp +++ b/source/render/renderer.cpp @@ -245,6 +245,8 @@ void Renderer::render(const Renderable &renderable, Tag tag) void Renderer::clear(const ClearValue *values) { pipeline_state.set_framebuffer(state->framebuffer); + pipeline_state.set_viewport(state->viewport); + pipeline_state.set_scissor(state->scissor); commands.use_pipeline(&pipeline_state); commands.clear(values); } -- 2.43.0