40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
#include "PrecompiledHeader.h"
|
|
#include "gBuffer.h"
|
|
|
|
bool GBuffer::Init(unsigned int WindowWidth, unsigned int WindowHeight)
|
|
{
|
|
// Create the FBO
|
|
glGenFramebuffers(1, &m_fbo);
|
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo);
|
|
|
|
// Create the gbuffer textures
|
|
glGenTextures(ARRAY_SIZE_IN_ELEMENTS(m_textures), m_textures);
|
|
glGenTextures(1, &m_depthTexture);
|
|
|
|
for (unsigned int i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_textures) ; i++) {
|
|
glBindTexture(GL_TEXTURE_2D, m_textures[i]);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, WindowWidth, WindowHeight, 0, GL_RGB, GL_FLOAT, NULL);
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, m_textures[i], 0);
|
|
}
|
|
|
|
// depth
|
|
glBindTexture(GL_TEXTURE_2D, m_depthTexture);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, WindowWidth, WindowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT,
|
|
NULL);
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthTexture, 0);
|
|
|
|
GLenum DrawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
|
|
glDrawBuffers(ARRAY_SIZE_IN_ELEMENTS(DrawBuffers), DrawBuffers);
|
|
|
|
GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
|
|
|
if (Status != GL_FRAMEBUFFER_COMPLETE) {
|
|
printf("FB error, status: 0x%x\n", Status);
|
|
return false;
|
|
}
|
|
|
|
// restore default FBO
|
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
|
|
|
return true;
|
|
} |