1#include "FrameBuffer.h"
3FrameBuffer::FrameBuffer(
float width,
float height)
5 glViewport(0, 0, width, height);
6 GLCall(glGenFramebuffers(1, &fbo));
7 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
9 glGenTextures(1, &texture);
10 glBindTexture(GL_TEXTURE_2D, texture);
11 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
12 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
13 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
14 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
16 glGenRenderbuffers(1, &rbo);
17 glBindRenderbuffer(GL_RENDERBUFFER, rbo);
18 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
19 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo);
21 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
22 std::cout <<
"ERROR::FRAMEBUFFER:: Framebuffer is not complete!" << std::endl;
24 glBindFramebuffer(GL_FRAMEBUFFER, 0);
25 glBindTexture(GL_TEXTURE_2D, 0);
26 glBindRenderbuffer(GL_RENDERBUFFER, 0);
29FrameBuffer::~FrameBuffer()
31 glDeleteFramebuffers(1, &fbo);
32 glDeleteTextures(1, &texture);
33 glDeleteRenderbuffers(1, &rbo);
36unsigned int FrameBuffer::getFrameTexture()
41void FrameBuffer::RescaleFrameBuffer(
float width,
float height)
43 glViewport(0, 0, width, height);
44 glBindTexture(GL_TEXTURE_2D, texture);
45 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
46 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
47 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
48 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
50 glBindRenderbuffer(GL_RENDERBUFFER, rbo);
51 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
52 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo);
54 glBindFramebuffer(GL_FRAMEBUFFER, 0);
55 glBindTexture(GL_TEXTURE_2D, 0);
56 glBindRenderbuffer(GL_RENDERBUFFER, 0);
59void FrameBuffer::Bind()
const
61 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
64void FrameBuffer::Unbind()
const
66 glBindFramebuffer(GL_FRAMEBUFFER, 0);