Fix multisampling on web
This commit is contained in:
parent
ce4fc68fe2
commit
047c48e670
1 changed files with 32 additions and 0 deletions
|
|
@ -1,6 +1,8 @@
|
|||
#include <psemek/app/default_application_factory.hpp>
|
||||
#include <psemek/gfx/gl.hpp>
|
||||
#include <psemek/gfx/painter.hpp>
|
||||
#include <psemek/gfx/framebuffer.hpp>
|
||||
#include <psemek/gfx/renderbuffer.hpp>
|
||||
#include <psemek/util/array.hpp>
|
||||
#include <psemek/random/generator.hpp>
|
||||
#include <psemek/random/device.hpp>
|
||||
|
|
@ -1503,6 +1505,8 @@ namespace gmtk
|
|||
pop_ = audio::load_mp3(io::read_full(std::move(*app::open_resource("sounds/pop.mp3"))));
|
||||
error_ = audio::load_mp3(io::read_full(std::move(*app::open_resource("sounds/error.mp3"))));
|
||||
|
||||
resolve_texture_.nearest_filter();
|
||||
|
||||
context_.windowed(is_windowed_);
|
||||
init_menu();
|
||||
}
|
||||
|
|
@ -1510,6 +1514,14 @@ namespace gmtk
|
|||
void on_event(app::resize_event const & event) override
|
||||
{
|
||||
screen_size_ = event.size;
|
||||
|
||||
multisample_renderbuffer_.storage<gfx::color_rgba>(math::cast<std::size_t>(event.size), 4);
|
||||
multisample_framebuffer_.color(multisample_renderbuffer_);
|
||||
multisample_framebuffer_.assert_complete("multisample");
|
||||
|
||||
resolve_texture_.load<gfx::color_rgba>(math::cast<std::size_t>(event.size));
|
||||
resolve_framebuffer_.color(resolve_texture_);
|
||||
resolve_framebuffer_.assert_complete("resolve");
|
||||
}
|
||||
|
||||
void on_event(app::touch_down_event const & event) override
|
||||
|
|
@ -2144,6 +2156,8 @@ namespace gmtk
|
|||
|
||||
void present() override
|
||||
{
|
||||
multisample_framebuffer_.bind();
|
||||
|
||||
gl::ClearColor(1.f, 1.f, 1.f, 1.f);
|
||||
gl::Clear(gl::COLOR_BUFFER_BIT);
|
||||
|
||||
|
|
@ -2548,6 +2562,17 @@ namespace gmtk
|
|||
}
|
||||
|
||||
painter_.render(math::orthographic_camera{view_box_}.transform());
|
||||
|
||||
multisample_framebuffer_.bind_read();
|
||||
resolve_framebuffer_.bind();
|
||||
|
||||
gl::Clear(gl::COLOR_BUFFER_BIT);
|
||||
gl::BlitFramebuffer(0, 0, screen_size_[0], screen_size_[1], 0, 0, screen_size_[0], screen_size_[1], gl::COLOR_BUFFER_BIT, gl::NEAREST);
|
||||
|
||||
gfx::framebuffer::null().bind();
|
||||
|
||||
painter_.texture(resolve_texture_, {{{-1.f, 1.f}, {-1.f, 1.f}}});
|
||||
painter_.render(math::matrix<float, 4, 4>::identity());
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -2746,6 +2771,12 @@ namespace gmtk
|
|||
|
||||
gfx::painter painter_;
|
||||
|
||||
gfx::framebuffer multisample_framebuffer_;
|
||||
gfx::renderbuffer multisample_renderbuffer_;
|
||||
|
||||
gfx::framebuffer resolve_framebuffer_;
|
||||
gfx::texture_2d resolve_texture_;
|
||||
|
||||
struct view_transition
|
||||
{
|
||||
location old;
|
||||
|
|
@ -2937,6 +2968,7 @@ namespace psemek::app
|
|||
application::options options
|
||||
{
|
||||
.name = "Color Fractory",
|
||||
.multisampling = 0,
|
||||
};
|
||||
|
||||
return default_application_factory<gmtk::application>(options);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue