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);
|
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
|
} // namespace details
|
||||||
|
|
||||||
void Image::setImage(QImage image) {
|
void Image::setImage(QImage image) {
|
||||||
_image = std::move(image);
|
_image = std::move(image);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,9 @@ namespace details {
|
||||||
void GenerateTextures(QOpenGLFunctions &f, gsl::span<GLuint> values);
|
void GenerateTextures(QOpenGLFunctions &f, gsl::span<GLuint> values);
|
||||||
void DestroyTextures(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
|
} // namespace details
|
||||||
|
|
||||||
template <size_t Count>
|
template <size_t Count>
|
||||||
|
|
@ -40,6 +43,43 @@ public:
|
||||||
f.glBindTexture(GL_TEXTURE_2D, _values[index]);
|
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 {
|
[[nodiscard]] bool created() const {
|
||||||
return (_values[0] != 0);
|
return (_values[0] != 0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue