Files
Seele/src/Engine/Graphics/StaticMeshVertexData.h
T

64 lines
2.4 KiB
C++
Raw Normal View History

2023-10-29 09:20:23 +01:00
#pragma once
2023-11-15 00:06:00 +01:00
#include "Graphics/Command.h"
2024-06-09 12:20:04 +02:00
#include "Graphics/Initializer.h"
2023-11-05 10:36:01 +01:00
#include "Math/Vector.h"
2023-10-07 19:29:53 +02:00
#include "VertexData.h"
#include "entt/entt.hpp"
2023-10-07 19:29:53 +02:00
2024-06-09 12:20:04 +02:00
namespace Seele {
class StaticMeshVertexData : public VertexData {
public:
struct StaticMatInstance {
PMaterialInstance instance;
Array<uint32> meshletIds;
Gfx::OShaderBuffer culledMeshletBuffer;
// Gfx::OShaderBuffer indirectDrawBuffer;
};
struct StaticMatData {
PMaterial material;
Array<StaticMatInstance> staticInstance;
};
2023-10-31 16:16:23 +01:00
StaticMeshVertexData();
2023-10-07 19:29:53 +02:00
virtual ~StaticMeshVertexData();
2024-06-09 12:20:04 +02:00
static StaticMeshVertexData* getInstance();
void loadPositions(MeshId id, const Array<Vector>& data);
void loadTexCoords(MeshId id, uint64 index, const Array<Vector2>& data);
void loadNormals(MeshId id, const Array<Vector>& data);
void loadTangents(MeshId id, const Array<Vector>& data);
void loadBiTangents(MeshId id, const Array<Vector>& data);
void loadColors(MeshId id, const Array<Vector>& data);
virtual void serializeMesh(MeshId id, uint64 numVertices, ArchiveBuffer& buffer) override;
virtual void deserializeMesh(MeshId id, ArchiveBuffer& buffer) override;
virtual void init(Gfx::PGraphics graphics) override;
virtual void destroy() override;
virtual void bindBuffers(Gfx::PRenderCommand command) override;
virtual Gfx::PDescriptorLayout getVertexDataLayout() override;
virtual Gfx::PDescriptorSet getVertexDataSet() override;
virtual std::string getTypeName() const override { return "StaticMeshVertexData"; }
virtual Gfx::PShaderBuffer getPositionBuffer() const override { return positions; }
constexpr const Array<StaticMatData>& getStaticMeshes() const { return staticData; }
2024-06-09 12:20:04 +02:00
private:
virtual void resizeBuffers() override;
virtual void updateBuffers() override;
Array<StaticMatData> staticData;
std::mutex mutex;
2023-11-01 23:12:30 +01:00
Gfx::OShaderBuffer positions;
2024-06-09 12:20:04 +02:00
Array<Vector> positionData;
2024-05-06 18:36:16 +02:00
Gfx::OShaderBuffer texCoords[MAX_TEXCOORDS];
2024-06-09 12:20:04 +02:00
Array<Vector2> texCoordsData[MAX_TEXCOORDS];
2023-11-01 23:12:30 +01:00
Gfx::OShaderBuffer normals;
2024-06-09 12:20:04 +02:00
Array<Vector> normalData;
2023-11-01 23:12:30 +01:00
Gfx::OShaderBuffer tangents;
2024-06-09 12:20:04 +02:00
Array<Vector> tangentData;
2023-11-01 23:12:30 +01:00
Gfx::OShaderBuffer biTangents;
2024-06-09 12:20:04 +02:00
Array<Vector> biTangentData;
Gfx::OShaderBuffer colors;
Array<Vector> colorData;
Gfx::ODescriptorLayout descriptorLayout;
Gfx::PDescriptorSet descriptorSet;
2023-10-07 19:29:53 +02:00
};
2024-06-09 12:20:04 +02:00
} // namespace Seele