Add framebuffers wrapper class.
This commit is contained in:
parent
5389de6b96
commit
28b72295ab
2 changed files with 54 additions and 0 deletions
|
|
@ -32,7 +32,21 @@ void DestroyTextures(QOpenGLFunctions &f, gsl::span<GLuint> values) {
|
|||
ranges::fill(values, 0);
|
||||
}
|
||||
|
||||
void GenerateFramebuffers(QOpenGLFunctions &f, gsl::span<GLuint> values) {
|
||||
Expects(!values.empty());
|
||||
|
||||
f.glGenFramebuffers(values.size(), values.data());
|
||||
}
|
||||
|
||||
void DestroyFramebuffers(QOpenGLFunctions &f, gsl::span<GLuint> values) {
|
||||
Expects(!values.empty());
|
||||
|
||||
f.glDeleteTextures(values.size(), values.data());
|
||||
ranges::fill(values, 0);
|
||||
}
|
||||
|
||||
} // namespace details
|
||||
|
||||
void Image::setImage(QImage image) {
|
||||
_image = std::move(image);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ namespace details {
|
|||
void GenerateTextures(QOpenGLFunctions &f, gsl::span<GLuint> values);
|
||||
void DestroyTextures(QOpenGLFunctions &f, gsl::span<GLuint> values);
|
||||
|
||||
void GenerateFramebuffers(QOpenGLFunctions &f, gsl::span<GLuint> values);
|
||||
void DestroyFramebuffers(QOpenGLFunctions &f, gsl::span<GLuint> values);
|
||||
|
||||
} // namespace details
|
||||
|
||||
template <size_t Count>
|
||||
|
|
@ -40,6 +43,43 @@ public:
|
|||
f.glBindTexture(GL_TEXTURE_2D, _values[index]);
|
||||
}
|
||||
|
||||
[[nodiscard]] GLuint id(int index) const {
|
||||
Expects(index >= 0 && index < Count);
|
||||
|
||||
return _values[index];
|
||||
}
|
||||
|
||||
[[nodiscard]] bool created() const {
|
||||
return (_values[0] != 0);
|
||||
}
|
||||
|
||||
private:
|
||||
std::array<GLuint, Count> _values = { { 0 } };
|
||||
|
||||
};
|
||||
|
||||
template <size_t Count>
|
||||
class Framebuffers final {
|
||||
public:
|
||||
static_assert(Count > 0);
|
||||
|
||||
void ensureCreated(QOpenGLFunctions &f) {
|
||||
if (!created()) {
|
||||
details::GenerateFramebuffers(f, gsl::make_span(_values));
|
||||
}
|
||||
}
|
||||
void destroy(QOpenGLFunctions &f) {
|
||||
if (created()) {
|
||||
details::DestroyFramebuffers(f, gsl::make_span(_values));
|
||||
}
|
||||
}
|
||||
|
||||
void bind(QOpenGLFunctions &f, int index) const {
|
||||
Expects(index >= 0 && index < Count);
|
||||
|
||||
f.glBindFramebuffer(GL_FRAMEBUFFER, _values[index]);
|
||||
}
|
||||
|
||||
[[nodiscard]] bool created() const {
|
||||
return (_values[0] != 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue