Canvas.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "Canvas.hpp"
  2. Canvas::Canvas(GLuint width, GLuint height) :
  3. m_width(width), m_height(height)
  4. {
  5. }
  6. Canvas::~Canvas()
  7. {
  8. }
  9. void Canvas::create()
  10. {
  11. /* Generation de la texture */
  12. glGenTextures(1, &m_texture);
  13. glBindTexture(GL_TEXTURE_2D, m_texture);
  14. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,
  15. m_width, m_height, 0, GL_RGBA,
  16. GL_UNSIGNED_BYTE, NULL);
  17. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
  18. /* Generation du Frame Buffer */
  19. glGenFramebuffers(1, &m_FBO);
  20. glBindFramebuffer(GL_FRAMEBUFFER, m_FBO);
  21. glFramebufferTexture(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_texture, 0);
  22. glReadBuffer(GL_COLOR_ATTACHMENT0);
  23. }
  24. void Canvas::bind()
  25. {
  26. glBindFramebuffer(GL_FRAMEBUFFER, m_FBO);
  27. glBindImageTexture(0, m_texture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA8);
  28. }
  29. void Canvas::unbind()
  30. {
  31. glBindFramebuffer(GL_FRAMEBUFFER, 0);
  32. // glBindTexture(GL_TEXTURE_2D, 0);
  33. }
  34. void Canvas::draw()
  35. {
  36. glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO);
  37. glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
  38. glBlitFramebuffer(
  39. 0, 0, m_width, m_height,
  40. 0, 0, m_width, m_height,
  41. GL_COLOR_BUFFER_BIT, GL_NEAREST);
  42. glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
  43. glBindTexture(GL_TEXTURE_2D, 0);
  44. }
  45. void Canvas::release()
  46. {
  47. glDeleteTextures(1, &m_texture);
  48. glDeleteFramebuffers(1, &m_FBO);
  49. }