Reducing memory usage
This commit is contained in:
@@ -181,3 +181,24 @@ void Material::compile() {
|
||||
codeStream << "};\n";
|
||||
graphics->getShaderCompiler()->registerMaterial(this);
|
||||
}
|
||||
|
||||
uint64 Material::getCPUSize() const {
|
||||
uint64 result = sizeof(Material);
|
||||
for (size_t i = 0; i < parameters.size(); ++i) {
|
||||
result += parameters[i].size();
|
||||
}
|
||||
for (const auto& expr : codeExpressions)
|
||||
{
|
||||
result += expr->getCPUSize();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
uint64 Material::getGPUSize() const
|
||||
{
|
||||
uint64 result = 0;
|
||||
for (const auto& expr : codeExpressions) {
|
||||
result += expr->getGPUSize();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,9 @@ class Material {
|
||||
|
||||
void compile();
|
||||
|
||||
uint64 getCPUSize() const;
|
||||
uint64 getGPUSize() const;
|
||||
|
||||
private:
|
||||
Gfx::PGraphics graphics;
|
||||
uint32 numTextures;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#include "Graphics/Graphics.h"
|
||||
#include "Material.h"
|
||||
|
||||
|
||||
using namespace Seele;
|
||||
|
||||
MaterialInstance::MaterialInstance() {}
|
||||
@@ -34,9 +33,7 @@ void MaterialInstance::updateDescriptor() {
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialInstance::setBaseMaterial(PMaterialAsset asset) {
|
||||
baseMaterial = asset;
|
||||
}
|
||||
void MaterialInstance::setBaseMaterial(PMaterialAsset asset) { baseMaterial = asset; }
|
||||
|
||||
void MaterialInstance::save(ArchiveBuffer& buffer) const {
|
||||
Serialization::save(buffer, numTextures);
|
||||
@@ -56,3 +53,19 @@ void MaterialInstance::load(ArchiveBuffer& buffer) {
|
||||
samplersOffset = Material::addSamplers(numSamplers);
|
||||
floatBufferOffset = Material::addFloats(numFloats);
|
||||
}
|
||||
|
||||
uint64 MaterialInstance::getCPUSize() const {
|
||||
uint64 result = sizeof(MaterialInstance);
|
||||
for (size_t i = 0; i < parameters.size(); ++i) {
|
||||
result += parameters[i]->getCPUSize();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
uint64 MaterialInstance::getGPUSize() const {
|
||||
uint64 result = 0;
|
||||
for (size_t i = 0; i < parameters.size(); ++i) {
|
||||
result += parameters[i]->getGPUSize();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,9 @@ class MaterialInstance {
|
||||
void save(ArchiveBuffer& buffer) const;
|
||||
void load(ArchiveBuffer& buffer);
|
||||
|
||||
uint64 getCPUSize() const;
|
||||
uint64 getGPUSize() const;
|
||||
|
||||
private:
|
||||
Gfx::PGraphics graphics;
|
||||
Array<OShaderParameter> parameters;
|
||||
|
||||
@@ -37,6 +37,8 @@ class ShaderExpression {
|
||||
ShaderExpression(std::string key);
|
||||
virtual ~ShaderExpression();
|
||||
virtual uint64 getIdentifier() const = 0;
|
||||
virtual uint64 getCPUSize() const { return 0; };
|
||||
virtual uint64 getGPUSize() const { return 0; };
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const = 0;
|
||||
virtual void save(ArchiveBuffer& buffer) const;
|
||||
virtual void load(ArchiveBuffer& buffer);
|
||||
@@ -50,6 +52,8 @@ struct ShaderParameter : public ShaderExpression {
|
||||
virtual ~ShaderParameter();
|
||||
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) = 0;
|
||||
virtual uint64 getIdentifier() const override = 0;
|
||||
virtual uint64 getCPUSize() const override = 0;
|
||||
virtual uint64 getGPUSize() const override = 0;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const = 0;
|
||||
virtual void save(ArchiveBuffer& buffer) const override;
|
||||
virtual void load(ArchiveBuffer& buffer) override;
|
||||
@@ -64,6 +68,8 @@ struct FloatParameter : public ShaderParameter {
|
||||
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
|
||||
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
|
||||
virtual uint64 getCPUSize() const { return sizeof(FloatParameter); }
|
||||
virtual uint64 getGPUSize() const { return sizeof(float); }
|
||||
virtual void save(ArchiveBuffer& buffer) const override;
|
||||
virtual void load(ArchiveBuffer& buffer) override;
|
||||
};
|
||||
@@ -77,6 +83,8 @@ struct VectorParameter : public ShaderParameter {
|
||||
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
|
||||
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
|
||||
virtual uint64 getCPUSize() const { return sizeof(VectorParameter); }
|
||||
virtual uint64 getGPUSize() const { return sizeof(Vector); }
|
||||
virtual void save(ArchiveBuffer& buffer) const override;
|
||||
virtual void load(ArchiveBuffer& buffer) override;
|
||||
};
|
||||
@@ -90,6 +98,8 @@ struct TextureParameter : public ShaderParameter {
|
||||
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
|
||||
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
|
||||
virtual uint64 getCPUSize() const { return sizeof(TextureParameter); }
|
||||
virtual uint64 getGPUSize() const { return sizeof(void*); } // TODO: technically this is just a ref, but idk
|
||||
virtual void save(ArchiveBuffer& buffer) const override;
|
||||
virtual void load(ArchiveBuffer& buffer) override;
|
||||
};
|
||||
@@ -104,6 +114,8 @@ struct SamplerParameter : public ShaderParameter {
|
||||
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
|
||||
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
|
||||
virtual uint64 getCPUSize() const { return sizeof(SamplerParameter); }
|
||||
virtual uint64 getGPUSize() const { return sizeof(void*); }
|
||||
virtual void save(ArchiveBuffer& buffer) const override;
|
||||
virtual void load(ArchiveBuffer& buffer) override;
|
||||
};
|
||||
@@ -118,6 +130,8 @@ struct CombinedTextureParameter : public ShaderParameter {
|
||||
virtual void updateDescriptorSet(uint32 textureOffset, uint32 samplerOffset, uint32 floatOffset) override;
|
||||
virtual std::string evaluate(Map<std::string, std::string>& varState) const override;
|
||||
virtual uint64 getIdentifier() const override { return IDENTIFIER; }
|
||||
virtual uint64 getCPUSize() const { return sizeof(CombinedTextureParameter); }
|
||||
virtual uint64 getGPUSize() const { return sizeof(void*); }
|
||||
virtual void save(ArchiveBuffer& buffer) const override;
|
||||
virtual void load(ArchiveBuffer& buffer) override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user