Added glm, fbo, shader, texture and texture generator

This commit is contained in:
2022-04-23 16:41:33 +03:00
parent 38af8d7336
commit 8290c32cda
17 changed files with 676 additions and 25 deletions
+73
View File
@@ -0,0 +1,73 @@
#include "fbo.h"
#include <memory>
BEGIN_NAMESPACE
fbo::fbo(int w, int h)
: width(w),
height(h) {
glGenFramebuffers(1, &frame_buffer_id);
glGenTextures(1, &color_buffer_id);
glGenRenderbuffers(1, &depth_buffer_id);
glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer_id);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_buffer_id);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE,
4, // number of samples for multisampling
GL_RGBA8,
width, height,
false);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, color_buffer_id,
0);
glBindRenderbuffer(GL_RENDERBUFFER, depth_buffer_id);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_buffer_id);
}
int fbo::get_width() const {
return width;
}
int fbo::get_height() const {
return height;
}
GLuint fbo::get_color_buffer_id() const {
return color_buffer_id;
}
GLuint fbo::get_depth_buffer_id() const {
return depth_buffer_id;
}
void fbo::use() {
old_width = SCREEN_WIDTH;
old_height = SCREEN_HEIGHT;
SCREEN_WIDTH = width;
SCREEN_HEIGHT = height;
glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer_id);
glViewport(0, 0, width, height);
}
void fbo::unuse() {
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, old_width, old_height);
SCREEN_WIDTH = old_width;
SCREEN_HEIGHT = old_height;
}
std::shared_ptr<texture> fbo::get_texture() {
return std::make_shared<texture>(color_buffer_id, width, height);
}
END_NAMESPACE