CMaterial.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "CMaterial.h"
  2. #include <nlohmann/json.hpp>
  3. #include <utility>
  4. #include "WallpaperEngine/FileSystem/FileSystem.h"
  5. using namespace WallpaperEngine::Assets;
  6. using namespace WallpaperEngine::Core::Objects;
  7. using namespace WallpaperEngine::Core::Objects::Images;
  8. CMaterial::CMaterial (std::string name) :
  9. m_target (),
  10. m_name (std::move(name))
  11. {
  12. }
  13. CMaterial* CMaterial::fromFile (const std::string& filename, const CContainer& container)
  14. {
  15. return fromJSON (
  16. filename, json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container))
  17. );
  18. }
  19. CMaterial* CMaterial::fromFile (const std::string& filename, const std::string& target, const CContainer& container)
  20. {
  21. return fromJSON (
  22. filename, json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)), target
  23. );
  24. }
  25. CMaterial* CMaterial::fromJSON (const std::string& name, json data, const std::string& target)
  26. {
  27. CMaterial* material = fromJSON (name, std::move(data));
  28. material->setTarget (target);
  29. return material;
  30. }
  31. CMaterial* CMaterial::fromJSON (const std::string& name, json data)
  32. {
  33. auto passes_it = jsonFindRequired (data, "passes", "Material must have at least one pass");
  34. auto* material = new CMaterial (name);
  35. for (const auto& cur : (*passes_it))
  36. material->insertPass (Materials::CPass::fromJSON (cur));
  37. return material;
  38. }
  39. void CMaterial::insertPass (Materials::CPass* mass)
  40. {
  41. this->m_passes.push_back (mass);
  42. }
  43. void CMaterial::insertTextureBind (Effects::CBind* bind)
  44. {
  45. this->m_textureBindings.insert_or_assign (bind->getIndex (), bind);
  46. }
  47. void CMaterial::setTarget (const std::string& target)
  48. {
  49. this->m_target = target;
  50. }
  51. const std::vector <Materials::CPass*>& CMaterial::getPasses () const
  52. {
  53. return this->m_passes;
  54. }
  55. const std::map <int, Effects::CBind*>& CMaterial::getTextureBinds () const
  56. {
  57. return this->m_textureBindings;
  58. }
  59. const std::string& CMaterial::getTarget () const
  60. {
  61. return this->m_target;
  62. }
  63. const std::string& CMaterial::getName () const
  64. {
  65. return this->m_name;
  66. }
  67. bool CMaterial::hasTarget () const
  68. {
  69. return !this->m_target.empty ();
  70. }