From: Mikko Rasa Date: Sun, 3 Oct 2021 18:39:33 +0000 (+0300) Subject: Set viewport and scissor before clear commands X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=5a83fca1840207999076343610bf76a6cdd6fdf5;p=libs%2Fgl.git 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. --- 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); }