fix gbuffer resizing
This commit is contained in:
parent
a0b8776477
commit
bcdb891321
@ -11,7 +11,8 @@ static debug::Logger logger("gl-gbuffer");
|
|||||||
// TODO: REFACTOR
|
// TODO: REFACTOR
|
||||||
|
|
||||||
void GBuffer::createColorBuffer() {
|
void GBuffer::createColorBuffer() {
|
||||||
glGenTextures(1, &colorBuffer);
|
if (colorBuffer == 0)
|
||||||
|
glGenTextures(1, &colorBuffer);
|
||||||
glBindTexture(GL_TEXTURE_2D, colorBuffer);
|
glBindTexture(GL_TEXTURE_2D, colorBuffer);
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
GL_TEXTURE_2D,
|
GL_TEXTURE_2D,
|
||||||
@ -34,7 +35,8 @@ void GBuffer::createColorBuffer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GBuffer::createPositionsBuffer() {
|
void GBuffer::createPositionsBuffer() {
|
||||||
glGenTextures(1, &positionsBuffer);
|
if (positionsBuffer == 0)
|
||||||
|
glGenTextures(1, &positionsBuffer);
|
||||||
glBindTexture(GL_TEXTURE_2D, positionsBuffer);
|
glBindTexture(GL_TEXTURE_2D, positionsBuffer);
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
GL_TEXTURE_2D,
|
GL_TEXTURE_2D,
|
||||||
@ -57,7 +59,8 @@ void GBuffer::createPositionsBuffer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GBuffer::createNormalsBuffer() {
|
void GBuffer::createNormalsBuffer() {
|
||||||
glGenTextures(1, &normalsBuffer);
|
if (normalsBuffer == 0)
|
||||||
|
glGenTextures(1, &normalsBuffer);
|
||||||
glBindTexture(GL_TEXTURE_2D, normalsBuffer);
|
glBindTexture(GL_TEXTURE_2D, normalsBuffer);
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
GL_TEXTURE_2D,
|
GL_TEXTURE_2D,
|
||||||
@ -80,7 +83,8 @@ void GBuffer::createNormalsBuffer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GBuffer::createEmissionBuffer() {
|
void GBuffer::createEmissionBuffer() {
|
||||||
glGenTextures(1, &emissionBuffer);
|
if (emissionBuffer == 0)
|
||||||
|
glGenTextures(1, &emissionBuffer);
|
||||||
glBindTexture(GL_TEXTURE_2D, emissionBuffer);
|
glBindTexture(GL_TEXTURE_2D, emissionBuffer);
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
GL_TEXTURE_2D,
|
GL_TEXTURE_2D,
|
||||||
@ -103,7 +107,8 @@ void GBuffer::createEmissionBuffer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GBuffer::createDepthBuffer() {
|
void GBuffer::createDepthBuffer() {
|
||||||
glGenRenderbuffers(1, &depthBuffer);
|
if (depthBuffer == 0)
|
||||||
|
glGenRenderbuffers(1, &depthBuffer);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
|
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
|
||||||
glFramebufferRenderbuffer(
|
glFramebufferRenderbuffer(
|
||||||
@ -112,7 +117,8 @@ void GBuffer::createDepthBuffer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GBuffer::createSSAOBuffer() {
|
void GBuffer::createSSAOBuffer() {
|
||||||
glGenTextures(1, &ssaoBuffer);
|
if (ssaoBuffer == 0)
|
||||||
|
glGenTextures(1, &ssaoBuffer);
|
||||||
glBindTexture(GL_TEXTURE_2D, ssaoBuffer);
|
glBindTexture(GL_TEXTURE_2D, ssaoBuffer);
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
GL_TEXTURE_2D,
|
GL_TEXTURE_2D,
|
||||||
@ -233,61 +239,17 @@ void GBuffer::resize(uint width, uint height) {
|
|||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
||||||
|
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
|
createDepthBuffer();
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
|
createColorBuffer();
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
createPositionsBuffer();
|
||||||
|
createNormalsBuffer();
|
||||||
glBindTexture(GL_TEXTURE_2D, colorBuffer);
|
createEmissionBuffer();
|
||||||
glTexImage2D(
|
|
||||||
GL_TEXTURE_2D,
|
|
||||||
0,
|
|
||||||
GL_RGB,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
0,
|
|
||||||
GL_RGB,
|
|
||||||
GL_UNSIGNED_BYTE,
|
|
||||||
nullptr
|
|
||||||
);
|
|
||||||
glFramebufferTexture2D(
|
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorBuffer, 0
|
|
||||||
);
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, positionsBuffer);
|
|
||||||
glTexImage2D(
|
|
||||||
GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_FLOAT, nullptr
|
|
||||||
);
|
|
||||||
glFramebufferTexture2D(
|
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, positionsBuffer, 0
|
|
||||||
);
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, normalsBuffer);
|
|
||||||
glTexImage2D(
|
|
||||||
GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_FLOAT, nullptr
|
|
||||||
);
|
|
||||||
glFramebufferTexture2D(
|
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, normalsBuffer, 0
|
|
||||||
);
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, emissionBuffer);
|
|
||||||
glTexImage2D(
|
|
||||||
GL_TEXTURE_2D, 0, GL_INTENSITY, width, height, 0, GL_LUMINANCE, GL_FLOAT, nullptr
|
|
||||||
);
|
|
||||||
glFramebufferTexture2D(
|
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_2D, emissionBuffer, 0
|
|
||||||
);
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, ssaoFbo);
|
glBindFramebuffer(GL_FRAMEBUFFER, ssaoFbo);
|
||||||
glBindTexture(GL_TEXTURE_2D, ssaoBuffer);
|
createSSAOBuffer();
|
||||||
glTexImage2D(
|
|
||||||
GL_TEXTURE_2D, 0, GL_R16F, width, height, 0, GL_RED, GL_FLOAT, nullptr
|
|
||||||
);
|
|
||||||
glFramebufferTexture2D(
|
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ssaoBuffer, 0
|
|
||||||
);
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,13 +29,13 @@ private:
|
|||||||
uint height;
|
uint height;
|
||||||
|
|
||||||
uint fbo;
|
uint fbo;
|
||||||
uint colorBuffer;
|
uint colorBuffer = 0;
|
||||||
uint positionsBuffer;
|
uint positionsBuffer = 0;
|
||||||
uint normalsBuffer;
|
uint normalsBuffer = 0;
|
||||||
uint emissionBuffer;
|
uint emissionBuffer = 0;
|
||||||
uint depthBuffer;
|
uint depthBuffer = 0;
|
||||||
uint ssaoFbo;
|
uint ssaoFbo = 0;
|
||||||
uint ssaoBuffer;
|
uint ssaoBuffer = 0;
|
||||||
|
|
||||||
void createColorBuffer();
|
void createColorBuffer();
|
||||||
void createPositionsBuffer();
|
void createPositionsBuffer();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user