From 0c29bce3d856f0526d5af23105ef7e79736128e0 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Mon, 4 Dec 2023 09:46:31 +0100 Subject: [PATCH] Utility/SubMesh: Allow tangent generation with 3D texcoords --- src/Nazara/Utility/SubMesh.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Nazara/Utility/SubMesh.cpp b/src/Nazara/Utility/SubMesh.cpp index 17816f157..d97fa45d3 100644 --- a/src/Nazara/Utility/SubMesh.cpp +++ b/src/Nazara/Utility/SubMesh.cpp @@ -61,6 +61,13 @@ namespace Nz SparsePtr positions = mapper.GetComponentPtr(VertexComponent::Position); SparsePtr tangents = mapper.GetComponentPtr(VertexComponent::Tangent); SparsePtr texCoords = mapper.GetComponentPtr(VertexComponent::TexCoord); + if (!texCoords) + { + // 3D coords are often used for slice indexing, we can get a Vector2 by keeping the stride + SparsePtr texCoords3D = mapper.GetComponentPtr(VertexComponent::TexCoord); + texCoords = SparsePtr(texCoords3D.GetPtr(), texCoords3D.GetStride()); + } + if (!normals || !positions || !tangents || !texCoords) return; @@ -118,6 +125,13 @@ namespace Nz SparsePtr positions = mapper.GetComponentPtr(VertexComponent::Position); SparsePtr tangents = mapper.GetComponentPtr(VertexComponent::Tangent); SparsePtr texCoords = mapper.GetComponentPtr(VertexComponent::TexCoord); + if (!texCoords) + { + // 3D coords are often used for slice indexing, we can get a Vector2 by keeping the stride + SparsePtr texCoords3D = mapper.GetComponentPtr(VertexComponent::TexCoord); + texCoords = SparsePtr(texCoords3D.GetPtr(), texCoords3D.GetStride()); + } + if (!normals || !positions || !tangents || !texCoords) return;