diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-03-10 01:51:38 +0000 |
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-03-10 01:51:38 +0000 |
| commit | 78b4b043a4fe6be84dd36717c832951a0a464f63 (patch) | |
| tree | bc82ca1c59d309491323779ebbe3195b4479b546 /gfx/gl/glFramebuffer.h | |
| parent | Switch to floating point, camera relative position buffer (diff) | |
| download | ilt-main.tar.bz2 ilt-main.tar.xz ilt-main.zip | |
Diffstat (limited to 'gfx/gl/glFramebuffer.h')
| -rw-r--r-- | gfx/gl/glFramebuffer.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gfx/gl/glFramebuffer.h b/gfx/gl/glFramebuffer.h new file mode 100644 index 0000000..0a4ec5a --- /dev/null +++ b/gfx/gl/glFramebuffer.h @@ -0,0 +1,40 @@ +#pragma once + +#include "config/types.h" +#include "glArrays.h" +#include "glTexture.h" + +namespace Impl { + struct glRenderbuffer : Detail::glNamed { + void storage(GLenum iformat, ImageDimensions); + }; + + struct glFramebuffer : Detail::glNamed { + template<GLenum Target> + void + texture(GLenum attachment, const glTexture<Target> & texture) + { + glNamedFramebufferTexture(name, attachment, texture, 0); + } + + void drawBuffers(std::span<const GLenum> buffers); + + template<std::convertible_to<GLenum>... Buffers> + void + drawBuffers(Buffers... buffers) + { + drawBuffers(std::array {static_cast<GLenum>(buffers)...}); + } + + void buffer(GLenum attachment, const glRenderbuffer &); + void assertComplete() const; + }; +} + +template<size_t N> +using glFramebuffers = glManagedArray<Impl::glFramebuffer, N, &glCreateFramebuffers, &glDeleteFramebuffers>; +using glFramebuffer = glManagedSingle<Impl::glFramebuffer, &glCreateFramebuffers, &glDeleteFramebuffers>; + +template<size_t N> +using glRenderbuffers = glManagedArray<Impl::glRenderbuffer, N, &glCreateRenderbuffers, &glDeleteRenderbuffers>; +using glRenderbuffer = glManagedSingle<Impl::glRenderbuffer, &glCreateRenderbuffers, &glDeleteRenderbuffers>; |
