72 lines
2.7 KiB
C++
72 lines
2.7 KiB
C++
#include "GBuffer.h"
|
|
#include "GL/glew.h"
|
|
GBuffer::GBuffer(glm::vec2 size)
|
|
{
|
|
m_Size = size;
|
|
|
|
glGenFramebuffers(1, &m_FramebufferID);
|
|
glBindFramebuffer(GL_FRAMEBUFFER, m_FramebufferID);
|
|
|
|
// - normal color buffer
|
|
glGenTextures(1, &gAlbedo);
|
|
glBindTexture(GL_TEXTURE_2D, gAlbedo);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_Size.x, m_Size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gAlbedo, 0);
|
|
|
|
// - color
|
|
glGenTextures(1, &gNormal);
|
|
glBindTexture(GL_TEXTURE_2D, gNormal);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_Size.x, m_Size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, gNormal, 0);
|
|
|
|
// - normal color buffer
|
|
glGenTextures(1, &gMaterial);
|
|
glBindTexture(GL_TEXTURE_2D, gMaterial);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_Size.x, m_Size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, gMaterial, 0);
|
|
|
|
// - normal color buffer
|
|
glGenTextures(1, &gDepth);
|
|
glBindTexture(GL_TEXTURE_2D, gDepth);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, m_Size.x, m_Size.y, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, gDepth, 0);
|
|
|
|
// - tell OpenGL which color attachments we'll use (of this framebuffer) for rendering
|
|
unsigned int attachments[3] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 };
|
|
glDrawBuffers(3, attachments);
|
|
//
|
|
//glGenRenderbuffers(1, &m_RenderBuffer);
|
|
//glBindRenderbuffer(GL_RENDERBUFFER, m_RenderBuffer);
|
|
//glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, m_Size.x, m_Size.y);
|
|
//glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_RenderBuffer);
|
|
|
|
// Unbind
|
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
|
}
|
|
|
|
void GBuffer::Bind()
|
|
{
|
|
glBindFramebuffer(GL_FRAMEBUFFER, m_FramebufferID);
|
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
glViewport(0, 0, m_Size.x, m_Size.y);
|
|
}
|
|
|
|
void GBuffer::Unbind()
|
|
{
|
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
|
}
|
|
|
|
void GBuffer::Resize(glm::vec2 size)
|
|
{
|
|
|
|
}
|
|
glm::vec2 GBuffer::GetSize() { return m_Size; } |