Exemplo n.º 1
0
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);
	}