Files
unease/engine/render/rendertarget.cpp
Kirill Yurkin 719171e7d8 Big changes
2025-03-07 16:54:27 +03:00

62 lines
1.5 KiB
C++

#include <assert.h>
#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);
}