Material loading works now

This commit is contained in:
Dynamitos
2023-07-13 21:01:20 +02:00
parent 96d5cf67cb
commit 1668df467a
13 changed files with 292 additions and 252 deletions
+4 -2
View File
@@ -54,7 +54,8 @@ void Material::save(ArchiveBuffer& buffer) const
MaterialInterface::save(buffer);
Serialization::save(buffer, materialName);
Serialization::save(buffer, layout->getSetIndex());
Serialization::save2(buffer, brdf);
Serialization::save(buffer, codeExpressions);
Serialization::save(buffer, brdf);
const auto& bindings = layout->getBindings();
Serialization::save(buffer, bindings.size());
for (const auto& binding : bindings)
@@ -74,7 +75,8 @@ void Material::load(ArchiveBuffer& buffer)
Serialization::load(buffer, materialName);
uint32 setIndex;
Serialization::load(buffer, setIndex);
Serialization::load2(buffer, brdf);
Serialization::load(buffer, codeExpressions);
Serialization::load(buffer, brdf);
uint64 numBindings;
Serialization::load(buffer, numBindings);
layout = graphics->createDescriptorLayout();
+34 -79
View File
@@ -6,13 +6,41 @@
using namespace Seele;
void ExpressionInput::save(ArchiveBuffer& buffer) const
{
Serialization::save(buffer, source);
Serialization::save(buffer, type);
}
void ExpressionInput::load(ArchiveBuffer& buffer)
{
Serialization::load(buffer, source);
Serialization::load(buffer, type);
}
void ExpressionOutput::save(ArchiveBuffer& buffer) const
{
Serialization::save(buffer, name);
Serialization::save(buffer, type);
}
void ExpressionOutput::load(ArchiveBuffer& buffer)
{
Serialization::load(buffer, name);
Serialization::load(buffer, type);
}
void ShaderExpression::save(ArchiveBuffer& buffer) const
{
Serialization::save(buffer, inputs);
Serialization::save(buffer, output);
Serialization::save(buffer, key);
}
void ShaderExpression::load(ArchiveBuffer& buffer)
{
Serialization::load(buffer, inputs);
Serialization::load(buffer, output);
Serialization::load(buffer, key);
}
@@ -378,86 +406,13 @@ void SampleExpression::load(ArchiveBuffer& buffer)
ShaderExpression::load(buffer);
}
void Serialization::save(ArchiveBuffer& buffer, const PShaderExpression& parameter)
void MaterialNode::save(ArchiveBuffer& buffer) const
{
Serialization::save(buffer, parameter->getIdentifier());
parameter->save(buffer);
Serialization::save(buffer, profile);
Serialization::save(buffer, variables);
}
void Serialization::load(ArchiveBuffer& buffer, PShaderExpression& parameter)
void MaterialNode::load(ArchiveBuffer& buffer)
{
uint64 identifier = 0;
Serialization::load(buffer, identifier);
switch (identifier)
{
case FloatParameter::IDENTIFIER:
parameter = new FloatParameter();
break;
case VectorParameter::IDENTIFIER:
parameter = new VectorParameter();
break;
case TextureParameter::IDENTIFIER:
parameter = new TextureParameter();
break;
case SamplerParameter::IDENTIFIER:
parameter = new SamplerParameter();
break;
case CombinedTextureParameter::IDENTIFIER:
parameter = new CombinedTextureParameter();
break;
case ConstantExpression::IDENTIFIER:
parameter = new ConstantExpression();
break;
case AddExpression::IDENTIFIER:
parameter = new AddExpression();
break;
case SubExpression::IDENTIFIER:
parameter = new SubExpression();
break;
case MulExpression::IDENTIFIER:
parameter = new MulExpression();
break;
case SwizzleExpression::IDENTIFIER:
parameter = new SwizzleExpression();
break;
case SampleExpression::IDENTIFIER:
parameter = new SampleExpression();
break;
default:
throw std::runtime_error("Unknown Identifier");
}
parameter->load(buffer);
}
void Serialization::save(ArchiveBuffer& buffer, const PShaderParameter& parameter)
{
Serialization::save(buffer, parameter->getIdentifier());
parameter->save(buffer);
}
void Serialization::load(ArchiveBuffer& buffer, PShaderParameter& parameter)
{
uint64 identifier = 0;
Serialization::load(buffer, identifier);
switch (identifier)
{
case FloatParameter::IDENTIFIER:
parameter = new FloatParameter();
break;
case VectorParameter::IDENTIFIER:
parameter = new VectorParameter();
break;
case TextureParameter::IDENTIFIER:
parameter = new TextureParameter();
break;
case SamplerParameter::IDENTIFIER:
parameter = new SamplerParameter();
break;
case CombinedTextureParameter::IDENTIFIER:
parameter = new CombinedTextureParameter();
break;
default:
throw std::runtime_error("Unknown Identifier");
}
parameter->load(buffer);
Serialization::load(buffer, profile);
Serialization::load(buffer, variables);
}
+93 -9
View File
@@ -20,11 +20,15 @@ struct ExpressionInput
{
int source;
ExpressionType type = ExpressionType::UNKNOWN;
void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer);
};
struct ExpressionOutput
{
std::string name;
ExpressionType type = ExpressionType::UNKNOWN;
void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer);
};
DECLARE_REF(ShaderExpression);
struct ShaderExpression
@@ -206,17 +210,97 @@ struct MaterialNode
std::string profile;
Map<std::string, PShaderExpression> variables;
MaterialNode() {}
virtual ~MaterialNode() {}
virtual std::string evaluate() const { return ""; }
~MaterialNode() {}
void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer);
};
DEFINE_REF(MaterialNode)
namespace Serialization
template<>
static void Serialization::save(ArchiveBuffer& buffer, const PShaderExpression& parameter)
{
void save(ArchiveBuffer& buffer, const PShaderExpression& parameter);
void load(ArchiveBuffer& buffer, PShaderExpression& parameter);
void save(ArchiveBuffer& buffer, const PShaderParameter& parameter);
void load(ArchiveBuffer& buffer, PShaderParameter& parameter);
} // namespace Serialization
Serialization::save(buffer, parameter->getIdentifier());
parameter->save(buffer);
}
template<>
static void Serialization::load(ArchiveBuffer& buffer, PShaderExpression& parameter)
{
uint64 identifier = 0;
Serialization::load(buffer, identifier);
switch (identifier)
{
case FloatParameter::IDENTIFIER:
parameter = new FloatParameter();
break;
case VectorParameter::IDENTIFIER:
parameter = new VectorParameter();
break;
case TextureParameter::IDENTIFIER:
parameter = new TextureParameter();
break;
case SamplerParameter::IDENTIFIER:
parameter = new SamplerParameter();
break;
case CombinedTextureParameter::IDENTIFIER:
parameter = new CombinedTextureParameter();
break;
case ConstantExpression::IDENTIFIER:
parameter = new ConstantExpression();
break;
case AddExpression::IDENTIFIER:
parameter = new AddExpression();
break;
case SubExpression::IDENTIFIER:
parameter = new SubExpression();
break;
case MulExpression::IDENTIFIER:
parameter = new MulExpression();
break;
case SwizzleExpression::IDENTIFIER:
parameter = new SwizzleExpression();
break;
case SampleExpression::IDENTIFIER:
parameter = new SampleExpression();
break;
default:
throw std::runtime_error("Unknown Identifier");
}
parameter->load(buffer);
}
template<>
static void Serialization::save(ArchiveBuffer& buffer, const PShaderParameter& parameter)
{
Serialization::save(buffer, parameter->getIdentifier());
parameter->save(buffer);
}
template<>
static void Serialization::load(ArchiveBuffer& buffer, PShaderParameter& parameter)
{
uint64 identifier = 0;
Serialization::load(buffer, identifier);
switch (identifier)
{
case FloatParameter::IDENTIFIER:
parameter = new FloatParameter();
break;
case VectorParameter::IDENTIFIER:
parameter = new VectorParameter();
break;
case TextureParameter::IDENTIFIER:
parameter = new TextureParameter();
break;
case SamplerParameter::IDENTIFIER:
parameter = new SamplerParameter();
break;
case CombinedTextureParameter::IDENTIFIER:
parameter = new CombinedTextureParameter();
break;
default:
throw std::runtime_error("Unknown Identifier");
}
parameter->load(buffer);
}
DEFINE_REF(MaterialNode)
} // namespace Seele