CMaterial.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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) : m_name (std::move (name)) {}
  9. CMaterial* CMaterial::fromFile (const std::string& filename, CContainer* container) {
  10. return fromJSON (filename, json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)));
  11. }
  12. CMaterial* CMaterial::fromFile (const std::string& filename, const std::string& target, CContainer* container) {
  13. return fromJSON (filename, json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)), target);
  14. }
  15. CMaterial* CMaterial::fromJSON (const std::string& name, json data, const std::string& target) {
  16. CMaterial* material = fromJSON (name, std::move (data));
  17. material->setTarget (target);
  18. return material;
  19. }
  20. CMaterial* CMaterial::fromJSON (const std::string& name, json data) {
  21. const auto passes_it = jsonFindRequired (data, "passes", "Material must have at least one pass");
  22. auto* material = new CMaterial (name);
  23. for (const auto& cur : (*passes_it))
  24. material->insertPass (Materials::CPass::fromJSON (cur));
  25. return material;
  26. }
  27. void CMaterial::insertPass (Materials::CPass* pass) {
  28. this->m_passes.push_back (pass);
  29. }
  30. void CMaterial::insertTextureBind (Effects::CBind* bind) {
  31. this->m_textureBindings.insert (std::make_pair (bind->getIndex (), bind));
  32. }
  33. void CMaterial::setTarget (const std::string& target) {
  34. this->m_target = target;
  35. }
  36. const std::vector<Materials::CPass*>& CMaterial::getPasses () const {
  37. return this->m_passes;
  38. }
  39. const std::map<int, Effects::CBind*>& CMaterial::getTextureBinds () const {
  40. return this->m_textureBindings;
  41. }
  42. const std::string& CMaterial::getTarget () const {
  43. return this->m_target;
  44. }
  45. const std::string& CMaterial::getName () const {
  46. return this->m_name;
  47. }
  48. bool CMaterial::hasTarget () const {
  49. return !this->m_target.empty ();
  50. }