summaryrefslogtreecommitdiffhomepage
path: root/main
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-11-09 05:25:33 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-11-09 05:25:33 +0100
commit600a3cf25643b075f4603bb7faf76750d31b66f0 (patch)
tree129b40d556ad1ed193722c440973bcb1894b823b /main
parent05f2598e966319a6232740499c75943ca5594fef (diff)
add depth buffer
Diffstat (limited to 'main')
-rw-r--r--main/draw.cpp36
-rw-r--r--main/main-impl.hpp5
2 files changed, 29 insertions, 12 deletions
diff --git a/main/draw.cpp b/main/draw.cpp
index def8e298..90cf27ce 100644
--- a/main/draw.cpp
+++ b/main/draw.cpp
@@ -5,19 +5,33 @@
#include <algorithm>
#include <thread>
+//#define FM_SKIP_MSAA
+
namespace floormat {
void main_impl::recalc_viewport(Vector2i size) noexcept
{
update_window_state();
- GL::defaultFramebuffer.setViewport({{}, size });
- _msaa_framebuffer.detach(GL::Framebuffer::ColorAttachment{0});
- _msaa_renderbuffer = Magnum::GL::Renderbuffer{};
- const int samples = std::min(_msaa_renderbuffer.maxSamples(), (int)s.msaa_samples);
- _msaa_renderbuffer.setStorageMultisample(samples, GL::RenderbufferFormat::RGBA8, size);
- _msaa_framebuffer.setViewport({{}, size });
- _msaa_framebuffer.attachRenderbuffer(GL::Framebuffer::ColorAttachment{0}, _msaa_renderbuffer);
_shader.set_scale(Vector2{size});
+ GL::defaultFramebuffer.setViewport({{}, size });
+ if (_msaa_color.id())
+ _msaa_framebuffer.detach(GL::Framebuffer::ColorAttachment{0});
+ if (_msaa_depth.id())
+ _msaa_framebuffer.detach(GL::Framebuffer::BufferAttachment::DepthStencil);
+ if (_msaa_framebuffer.id())
+ _msaa_framebuffer.setViewport({{}, size});
+ else
+ _msaa_framebuffer = GL::Framebuffer{{{}, size}};
+ // --- color ---
+ _msaa_color = Magnum::GL::Renderbuffer{};
+ const int samples = std::min(_msaa_color.maxSamples(), (int)s.msaa_samples);
+ _msaa_color.setStorageMultisample(samples, GL::RenderbufferFormat::RGBA8, size);
+ _msaa_framebuffer.attachRenderbuffer(GL::Framebuffer::ColorAttachment{0}, _msaa_color);
+ // --- depth ---
+ _msaa_depth = Magnum::GL::Renderbuffer{};
+ _msaa_depth.setStorageMultisample(samples, GL::RenderbufferFormat::DepthStencil, size);
+ _msaa_framebuffer.attachRenderbuffer(GL::Framebuffer::BufferAttachment::DepthStencil, _msaa_depth);
+ // -- done ---
app.on_viewport_event(size);
}
@@ -119,16 +133,18 @@ void main_impl::drawEvent()
_shader.set_tint({1, 1, 1, 1});
{
- GL::defaultFramebuffer.clear(GL::FramebufferClear::Color);
+ using fc = GL::FramebufferClear;
+ constexpr auto mask = fc::Color | fc::Depth | fc::Stencil;
+ GL::defaultFramebuffer.clear(mask);
#ifndef FM_SKIP_MSAA
- _msaa_framebuffer.clear(GL::FramebufferClear::Color);
+ _msaa_framebuffer.clear(mask);
_msaa_framebuffer.bind();
#endif
draw_world();
app.draw_msaa();
#ifndef FM_SKIP_MSAA
GL::defaultFramebuffer.bind();
- GL::Framebuffer::blit(_msaa_framebuffer, GL::defaultFramebuffer, {{}, windowSize()}, GL::FramebufferBlit::Color);
+ GL::Framebuffer::blit(_msaa_framebuffer, GL::defaultFramebuffer, {{}, windowSize()}, GL::FramebufferBlit{(unsigned)mask});
#endif
}
diff --git a/main/main-impl.hpp b/main/main-impl.hpp
index f88d3dbc..e62ce261 100644
--- a/main/main-impl.hpp
+++ b/main/main-impl.hpp
@@ -76,8 +76,9 @@ private:
struct draw_bounds final { std::int16_t minx, maxx, miny, maxy; };
- GL::Framebuffer _msaa_framebuffer{{{}, window_size()}};
- GL::Renderbuffer _msaa_renderbuffer{};
+ GL::Framebuffer _msaa_framebuffer{NoCreate};
+ GL::Renderbuffer _msaa_depth{NoCreate};
+ GL::Renderbuffer _msaa_color{NoCreate};
void recalc_viewport(Vector2i size) noexcept;
void draw_world() noexcept;