2020-09-30 13:48:41 +02:00
|
|
|
#include "ShaderExpression.h"
|
|
|
|
|
#include "Graphics/GraphicsResources.h"
|
|
|
|
|
#include "Asset/TextureAsset.h"
|
2023-02-13 14:56:13 +01:00
|
|
|
#include "Asset/AssetRegistry.h"
|
|
|
|
|
#include "Graphics/Graphics.h"
|
2020-09-30 13:48:41 +02:00
|
|
|
|
|
|
|
|
using namespace Seele;
|
|
|
|
|
|
|
|
|
|
ShaderParameter::ShaderParameter(std::string name, uint32 byteOffset, uint32 binding)
|
|
|
|
|
: name(name)
|
|
|
|
|
, byteOffset(byteOffset)
|
|
|
|
|
, binding(binding)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ShaderParameter::~ShaderParameter()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
void ShaderParameter::save(ArchiveBuffer& buffer) const
|
|
|
|
|
{
|
|
|
|
|
Serialization::save(buffer, name);
|
|
|
|
|
Serialization::save(buffer, byteOffset);
|
|
|
|
|
Serialization::save(buffer, binding);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ShaderParameter::load(ArchiveBuffer& buffer)
|
|
|
|
|
{
|
|
|
|
|
Serialization::load(buffer, name);
|
|
|
|
|
Serialization::load(buffer, byteOffset);
|
|
|
|
|
Serialization::load(buffer, binding);
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-30 13:48:41 +02:00
|
|
|
FloatParameter::FloatParameter(std::string name, uint32 byteOffset, uint32 binding)
|
|
|
|
|
: ShaderParameter(name, byteOffset, binding)
|
2023-02-13 14:56:13 +01:00
|
|
|
, data(0)
|
2020-09-30 13:48:41 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FloatParameter::~FloatParameter()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
void FloatParameter::save(ArchiveBuffer& buffer) const
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::save(buffer);
|
|
|
|
|
Serialization::save(buffer, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FloatParameter::load(ArchiveBuffer& buffer)
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::load(buffer);
|
|
|
|
|
Serialization::load(buffer, data);
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-01 16:40:14 +02:00
|
|
|
void FloatParameter::updateDescriptorSet(Gfx::PDescriptorSet, uint8* dst)
|
2020-09-30 13:48:41 +02:00
|
|
|
{
|
|
|
|
|
std::memcpy(dst + byteOffset, &data, sizeof(float));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VectorParameter::VectorParameter(std::string name, uint32 byteOffset, uint32 binding)
|
|
|
|
|
: ShaderParameter(name, byteOffset, binding)
|
2023-02-13 14:56:13 +01:00
|
|
|
, data()
|
2020-09-30 13:48:41 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VectorParameter::~VectorParameter()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
|
2021-04-01 16:40:14 +02:00
|
|
|
void VectorParameter::updateDescriptorSet(Gfx::PDescriptorSet, uint8* dst)
|
2020-09-30 13:48:41 +02:00
|
|
|
{
|
2023-01-21 18:43:21 +01:00
|
|
|
std::memcpy(dst + byteOffset, &data, sizeof(Vector));
|
2020-09-30 13:48:41 +02:00
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
void VectorParameter::save(ArchiveBuffer& buffer) const
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::save(buffer);
|
|
|
|
|
Serialization::save(buffer, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void VectorParameter::load(ArchiveBuffer& buffer)
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::load(buffer);
|
|
|
|
|
Serialization::load(buffer, data);
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-30 13:48:41 +02:00
|
|
|
TextureParameter::TextureParameter(std::string name, uint32 byteOffset, uint32 binding)
|
|
|
|
|
: ShaderParameter(name, byteOffset, binding)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TextureParameter::~TextureParameter()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-01 16:40:14 +02:00
|
|
|
void TextureParameter::updateDescriptorSet(Gfx::PDescriptorSet descriptorSet, uint8*)
|
2020-09-30 13:48:41 +02:00
|
|
|
{
|
|
|
|
|
descriptorSet->updateTexture(binding, data->getTexture());
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
void TextureParameter::save(ArchiveBuffer& buffer) const
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::save(buffer);
|
|
|
|
|
Serialization::save(buffer, data->getAssetIdentifier());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextureParameter::load(ArchiveBuffer& buffer)
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::load(buffer);
|
|
|
|
|
std::string filename;
|
|
|
|
|
Serialization::load(buffer, filename);
|
|
|
|
|
data = AssetRegistry::findTexture(filename);
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-30 13:48:41 +02:00
|
|
|
SamplerParameter::SamplerParameter(std::string name, uint32 byteOffset, uint32 binding)
|
|
|
|
|
: ShaderParameter(name, byteOffset, binding)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SamplerParameter::~SamplerParameter()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-01 16:40:14 +02:00
|
|
|
void SamplerParameter::updateDescriptorSet(Gfx::PDescriptorSet descriptorSet, uint8*)
|
2020-09-30 13:48:41 +02:00
|
|
|
{
|
|
|
|
|
descriptorSet->updateSampler(binding, data);
|
2021-05-10 23:57:55 +02:00
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
|
|
|
|
|
void SamplerParameter::save(ArchiveBuffer& buffer) const
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::save(buffer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SamplerParameter::load(ArchiveBuffer& buffer)
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::load(buffer);
|
|
|
|
|
data = buffer.getGraphics()->createSamplerState({});
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-10 23:57:55 +02:00
|
|
|
CombinedTextureParameter::CombinedTextureParameter(std::string name, uint32 byteOffset, uint32 binding)
|
|
|
|
|
: ShaderParameter(name, byteOffset, binding)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CombinedTextureParameter::~CombinedTextureParameter()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
|
2021-10-15 23:12:29 +02:00
|
|
|
void CombinedTextureParameter::updateDescriptorSet(Gfx::PDescriptorSet descriptorSet, uint8*)
|
2021-05-10 23:57:55 +02:00
|
|
|
{
|
|
|
|
|
descriptorSet->updateTexture(binding, data->getTexture(), sampler);
|
2023-02-13 14:56:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CombinedTextureParameter::save(ArchiveBuffer& buffer) const
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::save(buffer);
|
|
|
|
|
Serialization::save(buffer, data->getAssetIdentifier());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CombinedTextureParameter::load(ArchiveBuffer& buffer)
|
|
|
|
|
{
|
|
|
|
|
ShaderParameter::load(buffer);
|
|
|
|
|
std::string filename;
|
|
|
|
|
Serialization::load(buffer, filename);
|
|
|
|
|
data = AssetRegistry::findTexture(filename);
|
|
|
|
|
sampler = buffer.getGraphics()->createSamplerState({});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
2020-09-30 13:48:41 +02:00
|
|
|
}
|