diff --git a/include/Buffers.h b/include/Buffers.h index 32a431e..d7bae95 100644 --- a/include/Buffers.h +++ b/include/Buffers.h @@ -73,4 +73,16 @@ class FBO GLuint handler; // Дескриптор }; +// Объект буфера рендера +class RBO +{ + public: + RBO(int w, int h, GLuint component = GL_DEPTH_COMPONENT); // Создает буфер рендера с заданными параметрами размеров и используемых компонент + ~RBO(); // Уничтожение буфера + + GLuint getHandler(); // Возвращает дескриптор буфера рендера + protected: + GLuint handler; // Дескриптор +}; + #endif // BUFFERS_H diff --git a/src/Buffers.cpp b/src/Buffers.cpp index 9c4d928..c0acea7 100644 --- a/src/Buffers.cpp +++ b/src/Buffers.cpp @@ -174,3 +174,23 @@ void FBO::assignRenderBuffer(GLuint hander, GLuint attachment) { glFramebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, hander); } + +// Создает буфер рендера с заданными параметрами размеров и используемых компонент +RBO::RBO(int w, int h, GLuint component) +{ + glGenRenderbuffers(1, &handler); + glBindRenderbuffer(GL_RENDERBUFFER, handler); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h); +} + +// Уничтожение буфера +RBO::~RBO() +{ + glDeleteRenderbuffers(1, &handler); +} + +// Возвращает дескриптор буфера рендера +GLuint RBO::getHandler() +{ + return handler; +} diff --git a/src/main.cpp b/src/main.cpp index e236317..86ecbac 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -125,11 +125,8 @@ int main(void) Texture colors(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0); Texture normals(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT1, 0, GL_RGBA16F); // Создадим буфер рендера под буфер глубины и привяжем его - unsigned int rbo; - glGenRenderbuffers(1, &rbo); - glBindRenderbuffer(GL_RENDERBUFFER, rbo); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, WINDOW_WIDTH, WINDOW_HEIGHT); - fbo.assignRenderBuffer(rbo); + RBO rbo(WINDOW_WIDTH, WINDOW_HEIGHT); + fbo.assignRenderBuffer(rbo.getHandler()); // Активируем базовый буфер кадра FBO::useDefault();