#include #include "render/rendertarget.h" #include "render/texturesmanager.h" #include "render/texture2d.h" #include "render/gl_shared.h" void RenderTarget::setDefaultFramebuffer() { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } RenderTarget::RenderTarget() { m_framebuffer = -1; } RenderTarget::~RenderTarget() { m_framebuffer = -1; } void RenderTarget::Create(const char* name /*= nullptr*/) { assert(g_texturesManager); //////////////////////// // Create FBO // generate frame buffer glGenFramebuffersEXT(1, &m_framebuffer); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_framebuffer); } void RenderTarget::Destroy() { GLint drawFboId; glGetIntegerv(GL_FRAMEBUFFER_BINDING, &drawFboId); if (drawFboId == (GLint)m_framebuffer) glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glDeleteFramebuffersEXT(1, &m_framebuffer); } void RenderTarget::Finialize() { if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT) { assert(0 && "RenderTarget::Finialize: failed to Finialize framebuffer. Framebuffer is not complete"); } } void RenderTarget::AttachColorTexture(int slot, Texture2D* texture) { assert(texture && "Failed to assing nullptr texture"); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0 + slot, GL_TEXTURE_2D, texture->GetHandle(), 0); } void RenderTarget::AttachDepthTexture(Texture2D* texture) { assert(texture && "Failed to assing nullptr texture"); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texture->GetHandle(), 0); }