summaryrefslogtreecommitdiff
path: root/gfx/gl/glFramebuffer.h
blob: 0a4ec5a180893a27f8c474f87ddd44ab70d59748 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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>;