context reinit support
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user