Files
Seele/src/Engine/Graphics/Mesh.cpp
T

48 lines
1.5 KiB
C++
Raw Normal View History

2020-05-05 01:51:13 +02:00
#include "Mesh.h"
2023-11-06 14:47:21 +01:00
#include "Asset/AssetRegistry.h"
2024-06-09 12:20:04 +02:00
#include "Graphics/Graphics.h"
2020-06-02 11:46:18 +02:00
using namespace Seele;
2024-06-09 12:20:04 +02:00
Mesh::Mesh() {}
2020-06-02 11:46:18 +02:00
2024-06-09 12:20:04 +02:00
Mesh::~Mesh() {}
2023-11-01 13:38:49 +01:00
2024-06-09 12:20:04 +02:00
void Mesh::save(ArchiveBuffer& buffer) const {
2024-04-23 23:21:30 +02:00
Serialization::save(buffer, transform);
2023-11-01 13:38:49 +01:00
Serialization::save(buffer, vertexData->getTypeName());
Serialization::save(buffer, vertexCount);
2024-05-01 14:10:52 +02:00
Serialization::save(buffer, referencedMaterial->getFolderPath());
Serialization::save(buffer, referencedMaterial->getName());
2025-03-09 22:42:05 +01:00
vertexData->serializeMesh(id, buffer);
2023-11-01 13:38:49 +01:00
}
2024-06-09 12:20:04 +02:00
void Mesh::load(ArchiveBuffer& buffer) {
2023-11-01 13:38:49 +01:00
std::string typeName;
2024-04-23 23:21:30 +02:00
Serialization::load(buffer, transform);
2023-11-01 13:38:49 +01:00
Serialization::load(buffer, typeName);
Serialization::load(buffer, vertexCount);
vertexData = VertexData::findByTypeName(typeName);
2024-05-01 14:10:52 +02:00
std::string refFolder;
Serialization::load(buffer, refFolder);
2023-11-06 14:47:21 +01:00
std::string refId;
Serialization::load(buffer, refId);
2024-05-01 14:10:52 +02:00
referencedMaterial = AssetRegistry::findMaterialInstance(refFolder, refId);
2023-11-01 13:38:49 +01:00
id = vertexData->allocateVertexData(vertexCount);
2024-08-07 21:19:33 +02:00
byteSize = vertexData->deserializeMesh(id, buffer);
2025-01-08 19:15:12 +01:00
if (buffer.getGraphics()->supportRayTracing()) {
blas = buffer.getGraphics()->createBottomLevelAccelerationStructure(Gfx::BottomLevelASCreateInfo{
.mesh = this,
});
vertexData->registerBottomLevelAccelerationStructure(blas);
}
2023-11-01 13:38:49 +01:00
}
2024-08-07 21:19:33 +02:00
uint64 Mesh::getCPUSize() const {
uint64 result = sizeof(Mesh);
result += byteSize;
return result;
}
uint64 Mesh::getGPUSize() const { return byteSize; }