123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #include "FrameBuffer.h"
- FrameBuffer::FrameBuffer() : m_id(0), m_largeur(0), m_hauteur(0), m_colorBuffers(0), m_depthBufferID(0), m_stencil(false)
- {}
- FrameBuffer::FrameBuffer(int largeur, int hauteur, bool stencil)
- : m_id(0), m_largeur(largeur), m_hauteur(hauteur), m_colorBuffers(0), m_depthBufferID(0), m_stencil(stencil)
- {}
- FrameBuffer::FrameBuffer(const FrameBuffer &frameBufferACopier)
- {
-
- m_largeur = frameBufferACopier.m_largeur;
- m_hauteur = frameBufferACopier.m_hauteur;
- m_stencil = frameBufferACopier.m_stencil;
-
- charger();
- }
- FrameBuffer::~FrameBuffer()
- {
-
- glDeleteFramebuffers(1, &m_id);
- glDeleteRenderbuffers(1, &m_depthBufferID);
- }
- bool FrameBuffer::charger()
- {
-
- if(glIsFramebuffer(m_id) == GL_TRUE)
- {
-
- glDeleteFramebuffers(1, &m_id);
- }
-
- glGenFramebuffers(1, &m_id);
-
- glBindFramebuffer(GL_FRAMEBUFFER, m_id);
-
- Texture* colorBuffer(new Texture(m_largeur, m_hauteur));
- colorBuffer->create();
-
- m_colorBuffers.push_back(colorBuffer);
-
- if(m_stencil == true)
- creerRenderBuffer(m_depthBufferID, GL_DEPTH24_STENCIL8);
- else
- creerRenderBuffer(m_depthBufferID, GL_DEPTH_COMPONENT24);
-
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffers[0]->getID(), 0);
-
- if(m_stencil == true)
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthBufferID);
- else
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthBufferID);
-
- if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
- {
-
- glDeleteFramebuffers(1, &m_id);
- glDeleteRenderbuffers(1, &m_depthBufferID);
-
- std::cout << "Erreur : le FBO est mal construit" << std::endl;
- return false;
- }
-
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
- return true;
- }
- void FrameBuffer::creerRenderBuffer(GLuint &id, GLenum formatInterne)
- {
-
- if(glIsRenderbuffer(id) == GL_TRUE)
- glDeleteRenderbuffers(1, &id);
-
- glGenRenderbuffers(1, &id);
-
- glBindRenderbuffer(GL_RENDERBUFFER, id);
-
- glRenderbufferStorage(GL_RENDERBUFFER, formatInterne, m_largeur, m_hauteur);
-
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- }
- GLuint FrameBuffer::getID() const
- {
- return m_id;
- }
- Texture* FrameBuffer::getColorBuffer(unsigned int index)
- {
- return m_colorBuffers[index];
- }
- int FrameBuffer::getLargeur() const
- {
- return m_largeur;
- }
- int FrameBuffer::getHauteur() const
- {
- return m_hauteur;
- }
|