CMaterial.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "CMaterial.h"
  2. #include <irrlicht/irrlicht.h>
  3. #include <nlohmann/json.hpp>
  4. #include "WallpaperEngine/FileSystem/FileSystem.h"
  5. using namespace WallpaperEngine::Core::Objects::Images;
  6. CMaterial::CMaterial ()
  7. {
  8. }
  9. CMaterial* CMaterial::fromFile (irr::io::path filename)
  10. {
  11. return fromJSON (
  12. json::parse (WallpaperEngine::FileSystem::loadFullFile (filename))
  13. );
  14. }
  15. CMaterial* CMaterial::fromJSON (json data)
  16. {
  17. auto passes_it = data.find ("passes");
  18. if (passes_it == data.end ())
  19. {
  20. throw std::runtime_error ("Material must have at least one pass");
  21. }
  22. CMaterial* material = new CMaterial ();
  23. auto cur = (*passes_it).begin ();
  24. auto end = (*passes_it).end ();
  25. for (; cur != end; cur ++)
  26. {
  27. material->insertPass (
  28. Materials::CPassess::fromJSON (*cur)
  29. );
  30. }
  31. return material;
  32. }
  33. void CMaterial::insertPass (Materials::CPassess* mass)
  34. {
  35. this->m_passes.push_back (mass);
  36. }
  37. const std::vector <Materials::CPassess*>& CMaterial::getPasses () const
  38. {
  39. return this->m_passes;
  40. }