void GLFramebuffer::setWidthAndHeight(unsigned int width, unsigned int height) { mWidth = std::max(width, 1u); mHeight = std::max(height, 1u); if (not mFinished) { return; } glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); if (mDepthTexture != NULL) { GLTexture *glDepthTex = (GLTexture *)mDepthTexture; glBindTexture(GL_TEXTURE_2D, glDepthTex->mTexture); glDepthTex->allocData2D(mWidth, mHeight, mDepthFormat, Texture::Depth32F_Format, NULL); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, glDepthTex->mTexture, 0); } if (glIsRenderbuffer(mDepthRBO) and mDepthTexture == NULL) { glBindRenderbuffer(GL_RENDERBUFFER, mDepthRBO); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, mWidth, mHeight); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepthRBO); } unsigned int i=0; GLenum drawBuffers[mColorTextures.size()]; for (std::vector<ColorTexture>::iterator it = mColorTextures.begin(); it != mColorTextures.end(); ++it) { GLTexture *glTexture = (GLTexture *)it->texture; glBindTexture(GL_TEXTURE_2D, glTexture->mTexture); glTexture->allocData2D(mWidth*it->scale.x, mHeight*it->scale.y, it->format, Texture::RGBU8_Format, NULL); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, GL_TEXTURE_2D, glTexture->mTexture, 0); drawBuffers[i] = GL_COLOR_ATTACHMENT0+i; ++i; } glDrawBuffers(mColorTextures.size(), drawBuffers); }