Trying to switch to 16 bit indices

This commit is contained in:
Dynamitos
2024-04-06 08:29:15 +02:00
parent 505e7d6547
commit 7a713afdb4
12 changed files with 81 additions and 99 deletions
+2 -4
View File
@@ -35,7 +35,7 @@ struct AABB
float3 max; float3 max;
float pad1; float pad1;
bool insideFrustum(float4x4 transform, Frustum frustum) bool insideFrustum(float4x4 transform, Frustum frustum)
{ {
float4 corners[8]; float4 corners[8];
corners[0] = mul(transform, float4(min.x, min.y, min.z, 1.0f)); corners[0] = mul(transform, float4(min.x, min.y, min.z, 1.0f));
corners[1] = mul(transform, float4(min.x, min.y, max.z, 1.0f)); corners[1] = mul(transform, float4(min.x, min.y, max.z, 1.0f));
@@ -47,12 +47,10 @@ struct AABB
corners[7] = mul(transform, float4(max.x, max.y, max.z, 1.0f)); corners[7] = mul(transform, float4(max.x, max.y, max.z, 1.0f));
for(int i = 0; i < 8; ++i) for(int i = 0; i < 8; ++i)
{ {
float3 adjusted = corners[i].xyz / corners[i].w; if(frustum.pointInside(corners[i].xyz))
if(frustum.pointInside(adjusted))
{ {
return true; return true;
} }
} }
return false; return false;
} }
+3 -3
View File
@@ -2,7 +2,7 @@ import Bounding;
struct MeshletDescription struct MeshletDescription
{ {
BoundingSphere bounding; AABB bounding;
uint32_t vertexCount; uint32_t vertexCount;
uint32_t primitiveCount; uint32_t primitiveCount;
uint32_t vertexOffset; uint32_t vertexOffset;
@@ -13,7 +13,7 @@ struct MeshletDescription
struct MeshData struct MeshData
{ {
BoundingSphere bounding; AABB bounding;
uint32_t numMeshlets; uint32_t numMeshlets;
uint32_t meshletOffset; uint32_t meshletOffset;
uint32_t firstIndex; uint32_t firstIndex;
@@ -39,7 +39,7 @@ struct Scene
StructuredBuffer<MeshData> meshData; StructuredBuffer<MeshData> meshData;
StructuredBuffer<MeshletDescription> meshletInfos; StructuredBuffer<MeshletDescription> meshletInfos;
StructuredBuffer<uint8_t> primitiveIndices; StructuredBuffer<uint8_t> primitiveIndices;
StructuredBuffer<uint32_t> vertexIndices; StructuredBuffer<uint16_t> vertexIndices;
}; };
ParameterBlock<Scene> pScene; ParameterBlock<Scene> pScene;
+4 -1
View File
@@ -258,9 +258,12 @@ void MeshLoader::loadGlobalMeshes(const aiScene* scene, const Array<PMaterialIns
vertexData->loadBiTangents(id, biTangents); vertexData->loadBiTangents(id, biTangents);
vertexData->loadColors(id, colors); vertexData->loadColors(id, colors);
Array<uint32> indices(mesh->mNumFaces * 3); Array<uint16> indices(mesh->mNumFaces * 3);
for (size_t faceIndex = 0; faceIndex < mesh->mNumFaces; ++faceIndex) for (size_t faceIndex = 0; faceIndex < mesh->mNumFaces; ++faceIndex)
{ {
assert(mesh->mFaces[faceIndex].mIndices[0] < std::numeric_limits<uint16>::max());
assert(mesh->mFaces[faceIndex].mIndices[1] < std::numeric_limits<uint16>::max());
assert(mesh->mFaces[faceIndex].mIndices[2] < std::numeric_limits<uint16>::max());
indices[faceIndex * 3 + 0] = mesh->mFaces[faceIndex].mIndices[0]; indices[faceIndex * 3 + 0] = mesh->mFaces[faceIndex].mIndices[0];
indices[faceIndex * 3 + 1] = mesh->mFaces[faceIndex].mIndices[1]; indices[faceIndex * 3 + 1] = mesh->mFaces[faceIndex].mIndices[1];
indices[faceIndex * 3 + 2] = mesh->mFaces[faceIndex].mIndices[2]; indices[faceIndex * 3 + 2] = mesh->mFaces[faceIndex].mIndices[2];
+4 -4
View File
@@ -127,7 +127,7 @@ void computeFaceIntegrals(Face& f, ComputationState& state)
+ w * (2 * (n[state.A] * state.Paa + n[state.B] * state.Pab) + w * state.Pa)); + w * (2 * (n[state.A] * state.Paa + n[state.B] * state.Pab) + w * state.Pa));
} }
void computeVolumeIntegrals(const Array<Vector> vertices, const Array<uint32>& indices, ComputationState& state) void computeVolumeIntegrals(const Array<Vector> vertices, const Array<uint16>& indices, ComputationState& state)
{ {
std::memset(&state, 0, sizeof(ComputationState)); std::memset(&state, 0, sizeof(ComputationState));
for (size_t i = 0; i < indices.size(); i+=3) for (size_t i = 0; i < indices.size(); i+=3)
@@ -172,7 +172,7 @@ void computeVolumeIntegrals(const Array<Vector> vertices, const Array<uint32>& i
state.TP /= 2.0f; state.TP /= 2.0f;
} }
void computePhysicsParamsForMesh(Array<Vector>& vertices, const Array<uint32_t>& indices, Matrix3& bodyInertia, Vector& centerOfMass, float& mass) void computePhysicsParamsForMesh(Array<Vector>& vertices, const Array<uint16>& indices, Matrix3& bodyInertia, Vector& centerOfMass, float& mass)
{ {
ComputationState state; ComputationState state;
computeVolumeIntegrals(vertices, indices, state); computeVolumeIntegrals(vertices, indices, state);
@@ -200,7 +200,7 @@ ShapeBase::ShapeBase()
} }
ShapeBase::ShapeBase(Array<Vector> vertices, Array<uint32> indices) ShapeBase::ShapeBase(Array<Vector> vertices, Array<uint16> indices)
: vertices(vertices) : vertices(vertices)
, indices(indices) , indices(indices)
{ {
@@ -217,7 +217,7 @@ ShapeBase ShapeBase::transform(const Component::Transform& transform) const
return result; return result;
} }
void ShapeBase::addCollider(Array<Vector> verts, Array<uint32> inds, Matrix4 matrix) void ShapeBase::addCollider(Array<Vector> verts, Array<uint16> inds, Matrix4 matrix)
{ {
size_t indOffset = vertices.size(); size_t indOffset = vertices.size();
for(auto vert : verts) for(auto vert : verts)
+3 -3
View File
@@ -10,15 +10,15 @@ namespace Component
struct ShapeBase struct ShapeBase
{ {
ShapeBase(); ShapeBase();
ShapeBase(Array<Vector> vertices, Array<uint32> indices); ShapeBase(Array<Vector> vertices, Array<uint16> indices);
ShapeBase transform(const Component::Transform& transform) const; ShapeBase transform(const Component::Transform& transform) const;
void addCollider(Array<Vector> vertices, Array<uint32> indices, Matrix4 matrix); void addCollider(Array<Vector> vertices, Array<uint16> indices, Matrix4 matrix);
void visualize() const; void visualize() const;
Vector centerOfMass; Vector centerOfMass;
float mass; float mass;
Matrix3 bodyInertia; Matrix3 bodyInertia;
Array<Vector> vertices; Array<Vector> vertices;
Array<uint32> indices; Array<uint16> indices;
}; };
} // namespace Component } // namespace Component
} // namespace Seele } // namespace Seele
+1 -1
View File
@@ -15,7 +15,7 @@ public:
MeshId id; MeshId id;
uint64 vertexCount; uint64 vertexCount;
PMaterialInstanceAsset referencedMaterial; PMaterialInstanceAsset referencedMaterial;
Array<uint32> indices; Array<uint16> indices;
Array<Meshlet> meshlets; Array<Meshlet> meshlets;
void save(ArchiveBuffer& buffer) const; void save(ArchiveBuffer& buffer) const;
void load(ArchiveBuffer& buffer); void load(ArchiveBuffer& buffer);
+10 -29
View File
@@ -32,6 +32,7 @@ void completeMeshlet(Array<Meshlet>& meshlets, Meshlet& current)
{ {
meshlets.add(current); meshlets.add(current);
current = { current = {
.boundingBox = AABB(),
.numVertices = 0, .numVertices = 0,
.numPrimitives = 0, .numPrimitives = 0,
}; };
@@ -60,40 +61,20 @@ void addTriangle(Array<Meshlet>& meshlets, Meshlet& current, Triangle tri)
} }
} }
void Meshlet::build(const Array<Vector>& positions, const Array<uint32>& indices, Array<Meshlet>& meshlets) void Meshlet::build(const Array<Vector>& positions, const Array<uint16>& indices, Array<Meshlet>& meshlets)
{ {
Meshlet current = { Meshlet current = {
.numVertices = 0, .numVertices = 0,
.numPrimitives = 0, .numPrimitives = 0,
}; };
Array<Triangle> triangles(indices.size() / 3); for (size_t i = 0; i < indices.size() / 3; ++i)
for (size_t i = 0; i < triangles.size(); ++i)
{ {
triangles[i].indices[0] = indices[i * 3 + 0]; addTriangle(meshlets, current, Triangle{
triangles[i].indices[1] = indices[i * 3 + 1]; .indices = {
triangles[i].indices[2] = indices[i * 3 + 2]; indices[i * 3 + 0],
} indices[i * 3 + 1],
while (!triangles.empty()) indices[i * 3 + 2],
{ },
uint32 best = 0; });
float lowestSurface = std::numeric_limits<float>::max();
AABB newAABB;
for (uint32 i = 0; i < triangles.size(); ++i)
{
AABB adjusted = current.boundingBox;
adjusted.adjust(positions[triangles[i].indices[0]]);
adjusted.adjust(positions[triangles[i].indices[1]]);
adjusted.adjust(positions[triangles[i].indices[2]]);
float surface = adjusted.surfaceArea();
if (surface < lowestSurface)
{
lowestSurface = surface;
best = i;
newAABB = adjusted;
}
}
current.boundingBox = newAABB;
addTriangle(meshlets, current, triangles[best]);
triangles.removeAt(best);
} }
} }
+2 -2
View File
@@ -7,10 +7,10 @@ namespace Seele
struct Meshlet struct Meshlet
{ {
AABB boundingBox; AABB boundingBox;
uint32 uniqueVertices[Gfx::numVerticesPerMeshlet]; // unique vertiex indices in the vertex data uint16 uniqueVertices[Gfx::numVerticesPerMeshlet]; // unique vertiex indices in the vertex data
uint8 primitiveLayout[Gfx::numPrimitivesPerMeshlet * 3]; // indices into the uniqueVertices array, only uint8 needed uint8 primitiveLayout[Gfx::numPrimitivesPerMeshlet * 3]; // indices into the uniqueVertices array, only uint8 needed
uint32 numVertices; uint32 numVertices;
uint32 numPrimitives; uint32 numPrimitives;
static void build(const Array<Vector>& positions, const Array<uint32>& indices, Array<Meshlet>& meshlets); static void build(const Array<Vector>& positions, const Array<uint16>& indices, Array<Meshlet>& meshlets);
}; };
} // namespace Seele } // namespace Seele
+44 -44
View File
@@ -44,43 +44,43 @@ void VertexData::updateMesh(PMesh mesh, Component::Transform& transform)
}, },
.data = data, .data = data,
}); });
//for (size_t i = 0; i < data.numMeshlets; ++i) for (size_t i = 0; i < data.numMeshlets; ++i)
//{ {
// auto bounding = meshlets[data.meshletOffset + i].bounding; auto bounding = meshlets[data.meshletOffset + i].bounding;
// StaticArray<Vector, 8> corners; StaticArray<Vector, 8> corners;
// corners[0] = transform.toMatrix() * Vector4(bounding.min.x, bounding.min.y, bounding.min.z, 1); corners[0] = transform.toMatrix() * Vector4(bounding.min.x, bounding.min.y, bounding.min.z, 1);
// corners[1] = transform.toMatrix() * Vector4(bounding.min.x, bounding.min.y, bounding.max.z, 1); corners[1] = transform.toMatrix() * Vector4(bounding.min.x, bounding.min.y, bounding.max.z, 1);
// corners[2] = transform.toMatrix() * Vector4(bounding.min.x, bounding.max.y, bounding.min.z, 1); corners[2] = transform.toMatrix() * Vector4(bounding.min.x, bounding.max.y, bounding.min.z, 1);
// corners[3] = transform.toMatrix() * Vector4(bounding.min.x, bounding.max.y, bounding.max.z, 1); corners[3] = transform.toMatrix() * Vector4(bounding.min.x, bounding.max.y, bounding.max.z, 1);
// corners[4] = transform.toMatrix() * Vector4(bounding.max.x, bounding.min.y, bounding.min.z, 1); corners[4] = transform.toMatrix() * Vector4(bounding.max.x, bounding.min.y, bounding.min.z, 1);
// corners[5] = transform.toMatrix() * Vector4(bounding.max.x, bounding.min.y, bounding.max.z, 1); corners[5] = transform.toMatrix() * Vector4(bounding.max.x, bounding.min.y, bounding.max.z, 1);
// corners[6] = transform.toMatrix() * Vector4(bounding.max.x, bounding.max.y, bounding.min.z, 1); corners[6] = transform.toMatrix() * Vector4(bounding.max.x, bounding.max.y, bounding.min.z, 1);
// corners[7] = transform.toMatrix() * Vector4(bounding.max.x, bounding.max.y, bounding.max.z, 1); corners[7] = transform.toMatrix() * Vector4(bounding.max.x, bounding.max.y, bounding.max.z, 1);
// addDebugVertex(DebugVertex{ .position = corners[0], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[0], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[1], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[1], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[0], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[0], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[2], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[2], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[1], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[1], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[3], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[3], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[2], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[2], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[3], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[3], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[0], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[0], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[4], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[4], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[1], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[1], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[5], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[5], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[2], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[2], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[6], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[6], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[3], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[3], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[7], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[7], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[4], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[4], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[5], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[5], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[4], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[4], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[6], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[6], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[6], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[6], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[7], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[7], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[5], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[5], .color = meshlets[data.meshletOffset + i].color });
// addDebugVertex(DebugVertex{ .position = corners[7], .color = meshlets[data.meshletOffset + i].color }); addDebugVertex(DebugVertex{ .position = corners[7], .color = meshlets[data.meshletOffset + i].color });
//} }
} }
matInstanceData.materialInstance = referencedInstance; matInstanceData.materialInstance = referencedInstance;
referencedInstance->updateDescriptor(); referencedInstance->updateDescriptor();
@@ -142,7 +142,7 @@ void VertexData::createDescriptors()
} }
} }
void VertexData::loadMesh(MeshId id, Array<uint32> loadedIndices, Array<Meshlet> loadedMeshlets) void VertexData::loadMesh(MeshId id, Array<uint16> loadedIndices, Array<Meshlet> loadedMeshlets)
{ {
meshlets.reserve(meshlets.size() + loadedMeshlets.size()); meshlets.reserve(meshlets.size() + loadedMeshlets.size());
vertexIndices.reserve(vertexIndices.size() + loadedMeshlets.size() * Gfx::numVerticesPerMeshlet); vertexIndices.reserve(vertexIndices.size() + loadedMeshlets.size() * Gfx::numVerticesPerMeshlet);
@@ -164,7 +164,7 @@ void VertexData::loadMesh(MeshId id, Array<uint32> loadedIndices, Array<Meshlet>
primitiveIndices.resize(primitiveOffset + (m.numPrimitives * 3)); primitiveIndices.resize(primitiveOffset + (m.numPrimitives * 3));
std::memcpy(primitiveIndices.data() + primitiveOffset, m.primitiveLayout, m.numPrimitives * 3 * sizeof(uint8)); std::memcpy(primitiveIndices.data() + primitiveOffset, m.primitiveLayout, m.numPrimitives * 3 * sizeof(uint8));
meshlets.add(MeshletDescription{ meshlets.add(MeshletDescription{
.bounding = m.boundingBox.toSphere(), .bounding = m.boundingBox,//.toSphere(),
.vertexCount = m.numVertices, .vertexCount = m.numVertices,
.primitiveCount = m.numPrimitives, .primitiveCount = m.numPrimitives,
.vertexOffset = vertexOffset, .vertexOffset = vertexOffset,
@@ -173,7 +173,7 @@ void VertexData::loadMesh(MeshId id, Array<uint32> loadedIndices, Array<Meshlet>
}); });
} }
meshData[id].add(MeshData{ meshData[id].add(MeshData{
.bounding = meshAABB.toSphere(), .bounding = meshAABB,//.toSphere(),
.numMeshlets = numMeshlets, .numMeshlets = numMeshlets,
.meshletOffset = meshletOffset, .meshletOffset = meshletOffset,
.indicesOffset = (uint32)meshOffsets[id], .indicesOffset = (uint32)meshOffsets[id],
@@ -183,13 +183,13 @@ void VertexData::loadMesh(MeshId id, Array<uint32> loadedIndices, Array<Meshlet>
meshData[id][0].firstIndex = indices.size(); meshData[id][0].firstIndex = indices.size();
meshData[id][0].numIndices = loadedIndices.size(); meshData[id][0].numIndices = loadedIndices.size();
indices.resize(indices.size() + loadedIndices.size()); indices.resize(indices.size() + loadedIndices.size());
std::memcpy(indices.data() + meshData[id][0].firstIndex, loadedIndices.data(), loadedIndices.size() * sizeof(uint32)); std::memcpy(indices.data() + meshData[id][0].firstIndex, loadedIndices.data(), loadedIndices.size() * sizeof(uint16));
indexBuffer = graphics->createIndexBuffer(IndexBufferCreateInfo{ indexBuffer = graphics->createIndexBuffer(IndexBufferCreateInfo{
.sourceData = { .sourceData = {
.size = sizeof(uint32) * indices.size(), .size = sizeof(uint16) * indices.size(),
.data = (uint8*)indices.data(), .data = (uint8*)indices.data(),
}, },
.indexType = Gfx::SE_INDEX_TYPE_UINT32, .indexType = Gfx::SE_INDEX_TYPE_UINT16,
}); });
meshletBuffer = graphics->createShaderBuffer(ShaderBufferCreateInfo{ meshletBuffer = graphics->createShaderBuffer(ShaderBufferCreateInfo{
.sourceData = { .sourceData = {
@@ -201,7 +201,7 @@ void VertexData::loadMesh(MeshId id, Array<uint32> loadedIndices, Array<Meshlet>
}); });
vertexIndicesBuffer = graphics->createShaderBuffer(ShaderBufferCreateInfo{ vertexIndicesBuffer = graphics->createShaderBuffer(ShaderBufferCreateInfo{
.sourceData = { .sourceData = {
.size = sizeof(uint32) * vertexIndices.size(), .size = sizeof(uint16) * vertexIndices.size(),
.data = (uint8*)vertexIndices.data(), .data = (uint8*)vertexIndices.data(),
}, },
.numElements = vertexIndices.size(), .numElements = vertexIndices.size(),
+5 -5
View File
@@ -32,7 +32,7 @@ public:
}; };
struct MeshData struct MeshData
{ {
BoundingSphere bounding; AABB bounding;
uint32 numMeshlets = 0; uint32 numMeshlets = 0;
uint32 meshletOffset = 0; uint32 meshletOffset = 0;
uint32 firstIndex = 0; uint32 firstIndex = 0;
@@ -61,7 +61,7 @@ public:
void resetMeshData(); void resetMeshData();
void updateMesh(PMesh mesh, Component::Transform& transform); void updateMesh(PMesh mesh, Component::Transform& transform);
void createDescriptors(); void createDescriptors();
void loadMesh(MeshId id, Array<uint32> indices, Array<Meshlet> meshlets); void loadMesh(MeshId id, Array<uint16> indices, Array<Meshlet> meshlets);
MeshId allocateVertexData(uint64 numVertices); MeshId allocateVertexData(uint64 numVertices);
uint64 getMeshOffset(MeshId id); uint64 getMeshOffset(MeshId id);
uint64 getMeshVertexCount(MeshId id); uint64 getMeshVertexCount(MeshId id);
@@ -85,7 +85,7 @@ protected:
VertexData(); VertexData();
struct MeshletDescription struct MeshletDescription
{ {
BoundingSphere bounding; AABB bounding;
uint32_t vertexCount; uint32_t vertexCount;
uint32_t primitiveCount; uint32_t primitiveCount;
uint32_t vertexOffset; uint32_t vertexOffset;
@@ -100,8 +100,8 @@ protected:
Map<MeshId, uint64> meshVertexCounts; Map<MeshId, uint64> meshVertexCounts;
Array<MeshletDescription> meshlets; Array<MeshletDescription> meshlets;
Array<uint8> primitiveIndices; Array<uint8> primitiveIndices;
Array<uint32> vertexIndices; Array<uint16> vertexIndices;
Array<uint32> indices; Array<uint16> indices;
Gfx::PGraphics graphics; Gfx::PGraphics graphics;
Gfx::ODescriptorLayout instanceDataLayout; Gfx::ODescriptorLayout instanceDataLayout;
// for mesh shading // for mesh shading
+2 -2
View File
@@ -140,8 +140,8 @@ struct AABB
corners[5] = Vector(max.x, min.y, max.z); corners[5] = Vector(max.x, min.y, max.z);
corners[6] = Vector(max.x, max.y, min.z); corners[6] = Vector(max.x, max.y, min.z);
corners[7] = Vector(max.x, max.y, max.z); corners[7] = Vector(max.x, max.y, max.z);
Vector tmin = Vector(1, 1, 1) * std::numeric_limits<float>::max(); Vector tmin = Vector(std::numeric_limits<float>::max());
Vector tmax = Vector(1, 1, 1) * std::numeric_limits<float>::lowest(); Vector tmax = Vector(std::numeric_limits<float>::lowest());
for(int i = 0; i < 8; ++i) for(int i = 0; i < 8; ++i)
{ {
Vector transformed = matrix * Vector4(corners[i], 1.0f); Vector transformed = matrix * Vector4(corners[i], 1.0f);
+1 -1
View File
@@ -21,7 +21,7 @@ GameView::GameView(Gfx::PGraphics graphics, PWindow window, const ViewportCreate
renderGraph.addPass(new DepthPrepass(graphics, scene)); renderGraph.addPass(new DepthPrepass(graphics, scene));
renderGraph.addPass(new LightCullingPass(graphics, scene)); renderGraph.addPass(new LightCullingPass(graphics, scene));
renderGraph.addPass(new BasePass(graphics, scene)); renderGraph.addPass(new BasePass(graphics, scene));
//renderGraph.addPass(new DebugPass(graphics, scene)); renderGraph.addPass(new DebugPass(graphics, scene));
//renderGraph.addPass(new SkyboxRenderPass(graphics, scene)); //renderGraph.addPass(new SkyboxRenderPass(graphics, scene));
renderGraph.setViewport(viewport); renderGraph.setViewport(viewport);
renderGraph.createRenderPass(); renderGraph.createRenderPass();