mirror of
https://github.com/bulletphysics/bullet3.git
synced 2026-08-12 00:09:32 +00:00
79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
|
|
///See http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/
|
|
|
|
#include "GLRenderToTexture.h"
|
|
|
|
GLRenderToTexture::GLRenderToTexture()
|
|
:m_framebufferName(0)
|
|
{
|
|
}
|
|
|
|
void GLRenderToTexture::init(int width, int height)
|
|
{
|
|
glGenFramebuffers(1, &m_framebufferName);
|
|
glBindFramebuffer(GL_FRAMEBUFFER, m_framebufferName);
|
|
|
|
GLuint m_renderedTexture;
|
|
glGenTextures(1, &m_renderedTexture);
|
|
|
|
// "Bind" the newly created texture : all future texture functions will modify this texture
|
|
glBindTexture(GL_TEXTURE_2D, m_renderedTexture);
|
|
|
|
// Give an empty image to OpenGL ( the last "0" )
|
|
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0,GL_RGB, GL_UNSIGNED_BYTE, 0);
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
|
|
|
|
// The depth buffer
|
|
glGenRenderbuffers(1, &m_depthrenderbuffer);
|
|
glBindRenderbuffer(GL_RENDERBUFFER, m_depthrenderbuffer);
|
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
|
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthrenderbuffer);
|
|
|
|
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_renderedTexture, 0);
|
|
|
|
}
|
|
|
|
bool GLRenderToTexture::enable()
|
|
{
|
|
bool status = false;
|
|
|
|
// Set the list of draw buffers.
|
|
GLenum drawBuffers[2] = {GL_COLOR_ATTACHMENT0,0};
|
|
glDrawBuffers(1, drawBuffers);
|
|
|
|
// Always check that our framebuffer is ok
|
|
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
|
|
{
|
|
status = true;
|
|
}
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
void GLRenderToTexture::disable()
|
|
{
|
|
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
|
|
glBindTexture(GL_TEXTURE_2D, 0);
|
|
}
|
|
|
|
GLRenderToTexture::~GLRenderToTexture()
|
|
{
|
|
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
|
|
|
|
if (m_depthrenderbuffer)
|
|
glDeleteRenderbuffers(1,&m_depthrenderbuffer);
|
|
|
|
if(m_renderedTexture)
|
|
glDeleteTextures(1, &m_renderedTexture);
|
|
|
|
if( m_framebufferName)
|
|
{
|
|
glDeleteFramebuffers(1, &m_framebufferName);
|
|
}
|
|
}
|
|
|