#include "Framebuffer.h" #include #include "Texture.h" Framebuffer::Framebuffer(uint width, uint height) : width(width), height(height) { glGenFramebuffers(1, &fbo); bind(); GLuint tex; glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0); texture = new Texture(tex, width, height); glGenRenderbuffers(1, &depth); glBindRenderbuffer(GL_RENDERBUFFER, depth); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth); unbind(); } Framebuffer::~Framebuffer() { delete texture; glDeleteFramebuffers(1, &fbo); glDeleteRenderbuffers(1, &depth); } void Framebuffer::bind() { glBindFramebuffer(GL_FRAMEBUFFER, fbo); } void Framebuffer::unbind() { glBindFramebuffer(GL_FRAMEBUFFER, 0); }