GLFramebuffer::GLFramebuffer(const GLFramebufferDesc& desc) : _width(0) , _height(0) { glGenFramebuffers(1, &_framebuffer_id); glNamedFramebufferParameteri(_framebuffer_id, GL_FRAMEBUFFER_DEFAULT_WIDTH, desc.default_width); glNamedFramebufferParameteri(_framebuffer_id, GL_FRAMEBUFFER_DEFAULT_HEIGHT, desc.default_height); for (const auto& attachment : desc.attachments) { auto cubemap = dynamic_cast<GLTextureCubemap*>(attachment.texture.get()); if (cubemap) { for (int i = 0; i < 6; ++i) glNamedFramebufferTexture2DEXT(_framebuffer_id, attachment.attachment_type + i, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, attachment.texture->id(), attachment.texture_level); } else { glNamedFramebufferTexture2DEXT(_framebuffer_id, attachment.attachment_type, GL_TEXTURE_2D, attachment.texture->id(), attachment.texture_level); } _width = attachment.texture->width(); _height = attachment.texture->height(); _attachments[attachment.attachment_type] = attachment.texture; } auto check = glCheckNamedFramebufferStatus(_framebuffer_id, GL_FRAMEBUFFER); }
GLuint CreateFramebuffer(GLsizei layers, GLsizei width, GLsizei height, GLsizei samples, GLboolean fixedsamplelocations) { GLuint framebuffer = 0; glCreateFramebuffers(1, &framebuffer); glNamedFramebufferParameteri(framebuffer, GL_FRAMEBUFFER_DEFAULT_LAYERS, layers); glNamedFramebufferParameteri(framebuffer, GL_FRAMEBUFFER_DEFAULT_WIDTH, width); glNamedFramebufferParameteri(framebuffer, GL_FRAMEBUFFER_DEFAULT_HEIGHT, height); glNamedFramebufferParameteri(framebuffer, GL_FRAMEBUFFER_DEFAULT_SAMPLES, samples); glNamedFramebufferParameteri(framebuffer, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, fixedsamplelocations); return framebuffer; }
bool initFramebuffer() { bool Validated(true); glm::ivec2 WindowSize(this->getWindowSize()); glCreateFramebuffers(1, &FramebufferName); glNamedFramebufferParameteri(FramebufferName, GL_FRAMEBUFFER_DEFAULT_WIDTH, WindowSize.x * this->Supersampling); glNamedFramebufferParameteri(FramebufferName, GL_FRAMEBUFFER_DEFAULT_HEIGHT, WindowSize.y * this->Supersampling); glNamedFramebufferParameteri(FramebufferName, GL_FRAMEBUFFER_DEFAULT_LAYERS, 1); glNamedFramebufferParameteri(FramebufferName, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1); glNamedFramebufferParameteri(FramebufferName, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE); return this->checkFramebuffer(FramebufferName); }