Skip to content

Commit ce736e4

Browse files
committed
Tested material serialization
1 parent 4ef5422 commit ce736e4

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

Sources/Overload/OvCore/include/OvCore/Resources/Material.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#pragma once
88

99
#include <any>
10+
#include <json.hpp>
1011
#include <map>
1112

1213
#include <OvRendering/Data/Material.h>
@@ -35,6 +36,22 @@ namespace OvCore::Resources
3536
*/
3637
virtual void OnDeserialize(tinyxml2::XMLDocument& p_doc, tinyxml2::XMLNode* p_node) override;
3738

38-
const std::string path;
39+
std::string path;
40+
41+
NLOHMANN_DEFINE_TYPE_INTRUSIVE(
42+
Material,
43+
path,
44+
m_features,
45+
m_userInterface,
46+
m_blendable,
47+
m_backfaceCulling,
48+
m_frontfaceCulling,
49+
m_depthTest,
50+
m_depthWriting,
51+
m_colorWriting,
52+
m_castShadows,
53+
m_receiveShadows,
54+
m_gpuInstances
55+
);
3956
};
4057
}

Sources/Overload/OvCore/src/OvCore/Resources/Loaders/MaterialLoader.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
* @licence: MIT
55
*/
66

7+
#include <json.hpp>
8+
79
#include <OvCore/Resources/Loaders/MaterialLoader.h>
810

911
#include <OvDebug/Logger.h>
12+
#include <json_fwd.hpp>
13+
#include <iostream>
14+
#include <fstream>
1015

1116
OvCore::Resources::Material * OvCore::Resources::Loaders::MaterialLoader::Create(const std::string & p_path)
1217
{
@@ -30,6 +35,16 @@ OvCore::Resources::Material * OvCore::Resources::Loaders::MaterialLoader::Create
3035

3136
void OvCore::Resources::Loaders::MaterialLoader::Reload(Material& p_material, const std::string& p_path)
3237
{
38+
if (std::filesystem::exists(std::format("{}.json", p_path)))
39+
{
40+
std::ifstream file(std::format("{}.json", p_path));
41+
nlohmann::json j;
42+
file >> j;
43+
p_material = j.template get<std::remove_reference<decltype(p_material)>::type>();
44+
OVLOG_INFO("[MATERIAL] \"" + p_path + "\" Reloaded");
45+
return;
46+
}
47+
3348
tinyxml2::XMLDocument doc;
3449
doc.LoadFile(p_path.c_str());
3550
if (!doc.Error())
@@ -42,6 +57,11 @@ void OvCore::Resources::Loaders::MaterialLoader::Reload(Material& p_material, co
4257

4358
void OvCore::Resources::Loaders::MaterialLoader::Save(Material& p_material, const std::string& p_path)
4459
{
60+
nlohmann::json j = p_material;
61+
std::cout << j << std::endl;
62+
std::ofstream file(std::format("{}.json", p_path));
63+
file << std::setw(4) << j << std::endl;
64+
4565
tinyxml2::XMLDocument doc;
4666
tinyxml2::XMLNode* node = doc.NewElement("root");
4767
doc.InsertFirstChild(node);

0 commit comments

Comments
 (0)