TerraForge3D  2.3.1
3D Terrain And Landscape Generator
FrameBuffer.cpp
1#include "FrameBuffer.h"
2
3#include <glad/glad.h>
4
5FrameBuffer::FrameBuffer(int w, int h)
6{
7 width = w;
8 height = h;
9 glGenFramebuffers(1, &fbo);
10 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
11 glGenTextures(1, &colorTexture);
12 glBindTexture(GL_TEXTURE_2D, colorTexture);
13 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
14 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
15 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
16 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture, 0);
17 glGenTextures(1, &depthTexture);
18 glBindTexture(GL_TEXTURE_2D, depthTexture);
19 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, w, h, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
20 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
21 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
22 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
23 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
24 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
25 glBindFramebuffer(GL_FRAMEBUFFER, 0);
26}
27
28FrameBuffer::~FrameBuffer()
29{
30 glDeleteTextures(1, &colorTexture);
31 glDeleteTextures(1, &depthTexture);
32 glDeleteFramebuffers(1, &fbo);
33}
34
35void FrameBuffer::Begin()
36{
37 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
38 glViewport(0, 0, width, height);
39}
40
41uint32_t FrameBuffer::End()
42{
43 return colorTexture;
44}
45
46uint32_t FrameBuffer::GetColorTexture()
47{
48 return colorTexture;
49}
50
51uint32_t FrameBuffer::GetDepthTexture()
52{
53 return depthTexture;
54}
55
56uint32_t FrameBuffer::GetRendererID()
57{
58 return fbo;
59}