context reinit support

This commit is contained in:
2022-10-13 08:57:27 +03:00
parent 3b0d1ea0e2
commit ce3df7d051
24 changed files with 136 additions and 24 deletions

View File

@@ -50,7 +50,7 @@ Framebuffer::Framebuffer(QOpenGLExtraFunctions * f_, QVector<GLenum> colors_, bo
Framebuffer::~Framebuffer() {
deleteGLFramebuffer(fbo);
if (fbo > 0) deleteGLFramebuffer(fbo);
deleteGLRenderbuffer(drbo);
for (int i = 0; i < colors.size(); ++i)
deleteGLTexture(f, colors[i]);
@@ -59,12 +59,15 @@ Framebuffer::~Framebuffer() {
void Framebuffer::resize(int width, int height, bool force) {
if ((wid == width) && (hei == height) && !force) return;
if (fbo > 0) {
if ((wid == width) && (hei == height) && !force) return;
}
wid = width;
hei = height;
deleteGLFramebuffer(fbo);
if (fbo > 0) deleteGLFramebuffer(fbo);
f->glGenFramebuffers(1, &fbo);
f->glBindFramebuffer(GL_FRAMEBUFFER, fbo);
//qDebug() << "resize" << f << wid << hei << fbo;
for (int i = 0; i < colors.size(); ++i) {
deleteGLTexture(f, colors[i]);
createGLTexture(f, colors[i], width, height, color_formats[i], target_);
@@ -77,7 +80,7 @@ void Framebuffer::resize(int width, int height, bool force) {
}
if (is_depth) {
deleteGLTexture(f, tex_d);
deleteGLRenderbuffer(drbo);
if (drbo > 0) deleteGLRenderbuffer(drbo);
f->glGenRenderbuffers(1, &drbo);
f->glBindRenderbuffer(GL_RENDERBUFFER, drbo);
f->glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
@@ -97,6 +100,16 @@ void Framebuffer::resize(int width, int height, bool force) {
}
void Framebuffer::reinit() {
pbo.reinit();
colors.fill(0);
fbo = drbo = 0;
tex_d = 0;
pbo_queried = 0;
is_changed = true;
}
QImage Framebuffer::grab() const {
return QImage();
}