From bcc0cade806bf11c8852d8e2970e8c2c38025908 Mon Sep 17 00:00:00 2001 From: Lendemor Date: Mon, 4 Jun 2018 17:10:15 +0200 Subject: [PATCH] finished gui for MaterialResource --- src/tools/glm_serialize_functions.h | 16 ++++++++ src/tools/resourcepack.cpp | 58 ++++++++++++++++++++++++++++- src/tools/resourcepack.h | 43 ++++++++------------- 3 files changed, 87 insertions(+), 30 deletions(-) create mode 100644 src/tools/glm_serialize_functions.h diff --git a/src/tools/glm_serialize_functions.h b/src/tools/glm_serialize_functions.h new file mode 100644 index 0000000..fea365d --- /dev/null +++ b/src/tools/glm_serialize_functions.h @@ -0,0 +1,16 @@ +#ifndef GLM_SERIALIZE_FUNCTIONS_H +#define GLM_SERIALIZE_FUNCTIONS_H + +#include "glm/vec3.hpp" + +namespace glm +{ +template +void serialize(Archive & archive,glm::vec3& v3){ + archive(cereal::make_nvp("x",v3.x), + cereal::make_nvp("y",v3.y), + cereal::make_nvp("z",v3.z)); +} +} + +#endif // GLM_SERIALIZE_FUNCTIONS_H diff --git a/src/tools/resourcepack.cpp b/src/tools/resourcepack.cpp index b62a69b..dc950c7 100644 --- a/src/tools/resourcepack.cpp +++ b/src/tools/resourcepack.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include @@ -53,7 +54,6 @@ void ResourcePack::gui() if(ImGui::Button("Add a material")) { std::shared_ptr resource(new MaterialResource()); -// MaterialResource* resource = new MaterialResource(); m_resources.push_back(resource); } @@ -152,6 +152,7 @@ void TextureResource::gui() } } + MaterialResource::MaterialResource() : m_material(nullptr) { @@ -196,7 +197,60 @@ void MaterialResource::destroy() } } + void MaterialResource::gui() { - ImGui::Text("TODO"); + ImGui::Text("WIP"); + + ImGui::ColorEdit3("Albedo", &m_albedo.r); + ImGui::SliderFloat("Metallic", &m_metallic,0,1); + ImGui::SliderFloat("Roughness", &m_roughness,0,1); + ImGui::ColorEdit3("Emission",&m_emission.r); + ImGui::SliderFloat("Opacity",&m_opacity,0,1); + char buf_albedo[1024] = {0}; + char buf_metallic[1024] = {0}; + char buf_roughness[1024] = {0}; + char buf_emission[1024] = {0}; + char buf_normal[1024] = {0}; + char buf_alphamask[1024] = {0}; + strcpy(buf_albedo, m_albedoTexture.c_str()); + strcpy(buf_metallic, m_metallicTexture.c_str()); + strcpy(buf_roughness, m_roughnessTexture.c_str()); + strcpy(buf_emission, m_emissionTexture.c_str()); + strcpy(buf_normal, m_normalTexture.c_str()); + strcpy(buf_alphamask, m_alphaMaskTexture.c_str()); + + if(ImGui::InputText("Albedo texture :",buf_albedo,1024)) + m_albedoTexture = buf_albedo; + if(ImGui::InputText("Metallic texture :",buf_metallic,1024)) + m_metallicTexture = buf_metallic; + if(ImGui::InputText("Roughness texture :",buf_roughness,1024)) + m_roughnessTexture = buf_roughness; + if(ImGui::InputText("Emission texture :",buf_emission,1024)) + m_emissionTexture = buf_emission; + if(ImGui::InputText("Normal texture :",buf_normal,1024)) + m_normalTexture = buf_normal; + if(ImGui::InputText("AlphaMask texture :",buf_alphamask,1024)) + m_alphaMaskTexture = buf_alphamask; + + ImGui::Text(m_material == nullptr ? "Material not loaded" : "Material loaded"); + if(ImGui::Button(m_material == nullptr ? "Load":"Destroy")) + { + float temp; + if(m_material == nullptr) + loadResource(temp); + else + destroy(); + } +} + +MeshResource::MeshResource(): + m_mesh(nullptr) +{ + + +} + +MeshResource::~MeshResource(){ + destroy(); } diff --git a/src/tools/resourcepack.h b/src/tools/resourcepack.h index 8d2c1ba..c8077f6 100644 --- a/src/tools/resourcepack.h +++ b/src/tools/resourcepack.h @@ -5,10 +5,12 @@ #include #include -#include +//#include #include #include +#include "glm_serialize_functions.h" + class Texture; class PBRMaterial; class Mesh; @@ -56,7 +58,6 @@ struct ResourcePack class TextureResource : public ResourceInterface { - // std::string m_name; std::string m_path; int m_bitsPerPixel; bool m_isVerticallyReversed; @@ -84,9 +85,6 @@ public: void gui(); }; -CEREAL_REGISTER_TYPE(TextureResource) -CEREAL_REGISTER_POLYMORPHIC_RELATION(ResourceInterface,TextureResource) - class MaterialResource : public ResourceInterface { glm::vec3 m_albedo; @@ -107,7 +105,7 @@ public: MaterialResource(); virtual ~MaterialResource(); - template + template void serialize(Archive & archive) { archive(CEREAL_NVP(m_name), @@ -121,7 +119,8 @@ public: CEREAL_NVP(m_roughnessTexture), CEREAL_NVP(m_emissionTexture), CEREAL_NVP(m_normalTexture), - CEREAL_NVP(m_alphaMaskTexture)); + CEREAL_NVP(m_alphaMaskTexture) + ); } void loadResource(float & progress); @@ -131,26 +130,6 @@ public: void gui(); }; -template -void serialize(Archive & archive,MaterialResource mat) -{ - archive(CEREAL_NVP(mat.m_name), - CEREAL_NVP(mat.m_albedo), - CEREAL_NVP(mat.m_metallic), - CEREAL_NVP(mat.m_roughness), - CEREAL_NVP(mat.m_emission), - CEREAL_NVP(mat.m_opacity), - CEREAL_NVP(mat.m_albedoTexture), - CEREAL_NVP(mat.m_metallicTexture), - CEREAL_NVP(mat.m_roughnessTexture), - CEREAL_NVP(mat.m_emissionTexture), - CEREAL_NVP(mat.m_normalTexture), - CEREAL_NVP(mat.m_alphaMaskTexture)); -} - -CEREAL_REGISTER_TYPE(MaterialResource) -CEREAL_REGISTER_POLYMORPHIC_RELATION(ResourceInterface,MaterialResource) - class MeshResource : public ResourceInterface { //add metadata for mesh @@ -162,7 +141,7 @@ public: // differentiate load and save ? - template + template void serialize(Archive & archive) { @@ -175,4 +154,12 @@ public: void gui(); }; +CEREAL_REGISTER_TYPE(TextureResource) +CEREAL_REGISTER_TYPE(MaterialResource) +CEREAL_REGISTER_TYPE(MeshResource) + +CEREAL_REGISTER_POLYMORPHIC_RELATION(ResourceInterface,TextureResource) +CEREAL_REGISTER_POLYMORPHIC_RELATION(ResourceInterface,MaterialResource) +CEREAL_REGISTER_POLYMORPHIC_RELATION(ResourceInterface,MeshResource) + #endif // RESOURCEPACK_H