Bs.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include <boost/ptr_container/ptr_vector.hpp>
  2. #include "anki/renderer/Bs.h"
  3. #include "anki/renderer/Renderer.h"
  4. #include "anki/scene/Scene.h"
  5. #include "anki/resource/ShaderProgram.h"
  6. #include "anki/resource/Model.h"
  7. #include "anki/scene/ModelNode.h"
  8. #include "anki/resource/Material.h"
  9. #include "anki/resource/Mesh.h"
  10. namespace anki {
  11. //==============================================================================
  12. Bs::~Bs()
  13. {}
  14. //==============================================================================
  15. void Bs::createFbo()
  16. {
  17. try
  18. {
  19. fbo.create();
  20. fbo.bind();
  21. std::array<const Texture*, 1> fais = {{&r.getPps().getPrePassFai()}};
  22. fbo.setColorAttachments(fais);
  23. fbo.setOtherAttachments(GL_DEPTH_STENCIL_ATTACHMENT,
  24. r.getMs().getDepthFai());
  25. fbo.checkIfGood();
  26. fbo.unbind();
  27. }
  28. catch(std::exception& e)
  29. {
  30. throw ANKI_EXCEPTION("Failed to create blending stage FBO") << e;
  31. }
  32. }
  33. //==============================================================================
  34. // createRefractFbo =
  35. //==============================================================================
  36. void Bs::createRefractFbo()
  37. {
  38. try
  39. {
  40. refractFbo.create();
  41. refractFbo.bind();
  42. refractFbo.setNumOfColorAttachements(1);
  43. glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
  44. GL_TEXTURE_2D, refractFai.getGlId(), 0);
  45. glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
  46. GL_TEXTURE_2D, r.getMs().getDepthFai().getGlId(), 0);
  47. refractFbo.checkIfGood();
  48. refractFbo.unbind();
  49. }
  50. catch(std::exception& e)
  51. {
  52. throw ANKI_EXCEPTION("Failed to create blending stage refract FBO");
  53. }
  54. }
  55. //==============================================================================
  56. // init =
  57. //==============================================================================
  58. void Bs::init(const RendererInitializer& /*initializer*/)
  59. {
  60. createFbo();
  61. Renderer::createFai(r.getWidth(), r.getHeight(), GL_RGBA8, GL_RGBA,
  62. GL_FLOAT, refractFai);
  63. createRefractFbo();
  64. refractSProg.load("shaders/BsRefract.glsl");
  65. }
  66. //==============================================================================
  67. // run =
  68. //==============================================================================
  69. void Bs::run()
  70. {
  71. /// @todo
  72. }
  73. } // end namespace