diff --git a/include/Nazara/Utility/TriangleIterator.hpp b/include/Nazara/Utility/TriangleIterator.hpp index 32467660a..2429c4973 100644 --- a/include/Nazara/Utility/TriangleIterator.hpp +++ b/include/Nazara/Utility/TriangleIterator.hpp @@ -34,6 +34,8 @@ class NAZARA_API NzTriangleIterator void SetTangent(unsigned int i, const NzVector3f& tangent); void SetTexCoords(unsigned int i, const NzVector2f& texCoords); + void Unmap(); + private: nzPrimitiveType m_primitiveType; nzUInt32 m_triangleIndices[3]; diff --git a/src/Nazara/Utility/TriangleIterator.cpp b/src/Nazara/Utility/TriangleIterator.cpp index 88cad52c7..176a7c798 100644 --- a/src/Nazara/Utility/TriangleIterator.cpp +++ b/src/Nazara/Utility/TriangleIterator.cpp @@ -29,9 +29,7 @@ bool NzTriangleIterator::Advance() { if (m_currentIndex >= m_indexCount) { - ///FIXME: Que faire si Advance() est appelé deux fois - m_indexMapper.Unmap(); - m_vertexMapper.Unmap(); + Unmap(); return false; } @@ -164,3 +162,10 @@ void NzTriangleIterator::SetTexCoords(unsigned int i, const NzVector2f& texCoord m_vertexMapper.SetTexCoords(m_triangleIndices[i], texCoords); } + +void NzTriangleIterator::Unmap() +{ + // Peut très bien être appellé plusieurs fois de suite, seul le premier appel sera pris en compte + m_indexMapper.Unmap(); + m_vertexMapper.Unmap(); +} diff --git a/src/Nazara/Utility/VertexMapper.cpp b/src/Nazara/Utility/VertexMapper.cpp index e0504b764..39c3271b5 100644 --- a/src/Nazara/Utility/VertexMapper.cpp +++ b/src/Nazara/Utility/VertexMapper.cpp @@ -326,6 +326,9 @@ void NzVertexMapper::SetTexCoords(unsigned int i, const NzVector2f& texCoords) void NzVertexMapper::Unmap() { - delete m_impl; - m_impl = nullptr; + if (m_impl) + { + delete m_impl; + m_impl = nullptr; + } }