diff --git a/libs/gfx/include/psemek/gfx/renderbuffer.hpp b/libs/gfx/include/psemek/gfx/renderbuffer.hpp index f12a39de..7f11bdf2 100644 --- a/libs/gfx/include/psemek/gfx/renderbuffer.hpp +++ b/libs/gfx/include/psemek/gfx/renderbuffer.hpp @@ -5,6 +5,7 @@ #include #include +#include namespace psemek::gfx { @@ -36,7 +37,10 @@ namespace psemek::gfx std::size_t width() const { return size_[0]; } std::size_t height() const { return size_[1]; } + std::optional samples() const { return samples_; } + void storage(GLenum internal_format, geom::vector const & size); + void storage(GLenum internal_format, geom::vector const & size, int samples); template void storage(geom::vector const & size) @@ -44,9 +48,16 @@ namespace psemek::gfx storage(pixel_traits::internal_format, size); } + template + void storage(geom::vector const & size, int samples) + { + storage(pixel_traits::internal_format, size, samples); + } + private: GLuint id_ = 0; geom::vector size_ = {0, 0}; + std::optional samples_ = std::nullopt; explicit renderbuffer(std::nullptr_t); }; diff --git a/libs/gfx/source/renderbuffer.cpp b/libs/gfx/source/renderbuffer.cpp index 7c951ea0..64f52a37 100644 --- a/libs/gfx/source/renderbuffer.cpp +++ b/libs/gfx/source/renderbuffer.cpp @@ -52,6 +52,15 @@ namespace psemek::gfx bind(); gl::RenderbufferStorage(target, internal_format, size[0], size[1]); size_ = size; + samples_ = std::nullopt; + } + + void renderbuffer::storage(GLenum internal_format, geom::vector const & size, int samples) + { + bind(); + gl::RenderbufferStorageMultisample(target, samples, internal_format, size[0], size[1]); + size_ = size; + samples_ = samples; } renderbuffer::renderbuffer(std::nullptr_t)