CMaterial.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "CMaterial.h"
  2. using namespace WallpaperEngine::Render::Objects;
  3. using namespace WallpaperEngine::Render::Objects::Effects;
  4. CMaterial::CMaterial (Irrlicht::CContext* context, Render::Objects::CEffect* effect, Core::Objects::Images::CMaterial* material, const irr::video::ITexture* texture) :
  5. m_context (context),
  6. m_effect (effect),
  7. m_material (material),
  8. m_inputTexture (texture)
  9. {
  10. this->m_outputTexture = this->m_context->getDevice ()->getVideoDriver ()->addRenderTargetTexture (
  11. this->m_inputTexture->getSize (),
  12. (
  13. "_rt_WALLENGINELINUX_OUTPUT_" +
  14. std::to_string (this->m_effect->getImage ()->getImage ()->getId ()) + "_" +
  15. std::to_string (this->m_effect->getImage ()->getEffects ().size ()) +
  16. "_material_output"
  17. ).c_str ()
  18. );
  19. this->generatePasses ();
  20. }
  21. const std::vector<CPass*>& CMaterial::getPasses () const
  22. {
  23. return this->m_passes;
  24. }
  25. const CImage* CMaterial::getImage () const
  26. {
  27. return this->m_effect->getImage ();
  28. }
  29. const irr::video::ITexture* CMaterial::getOutputTexture () const
  30. {
  31. return this->m_outputTexture;
  32. }
  33. const irr::video::ITexture* CMaterial::getInputTexture () const
  34. {
  35. return this->m_inputTexture;
  36. }
  37. void CMaterial::generatePasses ()
  38. {
  39. auto cur = this->m_material->getPasses ().begin ();
  40. auto end = this->m_material->getPasses ().end ();
  41. const irr::video::ITexture* inputTexture = this->getInputTexture ();
  42. for (; cur != end; cur ++)
  43. {
  44. CPass* pass = new CPass (this->m_context, this, *cur, inputTexture);
  45. inputTexture = pass->getOutputTexture ();
  46. this->m_passes.push_back (pass);
  47. }
  48. }