1 #include "framebuffer.h"
6 void FrameBuffer::Create(int w, int h)
14 glGenTextures(1, &m_render_texture);
15 glGenFramebuffers(1, &m_render_fbo);
17 glBindTexture(GL_TEXTURE_2D, m_render_texture);
18 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
20 glBindFramebuffer(GL_FRAMEBUFFER, m_render_fbo);
22 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_render_texture, 0);
24 glBindFramebuffer(GL_FRAMEBUFFER, 0);
25 glBindTexture(GL_TEXTURE_2D, 0);
28 void FrameBuffer::Destroy()
30 if (!m_render_texture) return;
31 glDeleteFramebuffers(1, &m_render_fbo);
32 glDeleteTextures(1, &m_render_texture);
35 void FrameBuffer::Bind()
37 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_render_fbo);
40 void FrameBuffer::UnBind()
42 glBindFramebuffer(GL_FRAMEBUFFER, 0);
45 void FrameBuffer::Blit()
47 glBindFramebuffer(GL_READ_FRAMEBUFFER, m_render_fbo);
48 glBlitFramebuffer(0, 0, m_width, m_height, 0, 0, m_width, m_height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
51 void FrameBuffer::Clear(float r, float g, float b, float a)
54 glClearColor(r,g,b,a);
55 glClear(GL_COLOR_BUFFER_BIT);