Utility: Allow TriangleIterator and VertexMapper to take constant submesh
Former-commit-id: 708fe75333a54b739794e7c9729ee1557ab26164 [formerly c68c2ff4e2deb1a512237ec4e502f00c801f7c7e] Former-commit-id: 5fd3fd8b0a518526ee3c91d418cf321611d2bc67
This commit is contained in:
parent
52436a9395
commit
5711ff555f
|
|
@ -19,7 +19,7 @@ namespace Nz
|
|||
{
|
||||
public:
|
||||
TriangleIterator(PrimitiveMode primitiveMode, const IndexBuffer* indexBuffer);
|
||||
TriangleIterator(SubMesh* subMesh);
|
||||
TriangleIterator(const SubMesh* subMesh);
|
||||
~TriangleIterator() = default;
|
||||
|
||||
bool Advance();
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ namespace Nz
|
|||
public:
|
||||
VertexMapper(SubMesh* subMesh, BufferAccess access = BufferAccess_ReadWrite);
|
||||
VertexMapper(VertexBuffer* vertexBuffer, BufferAccess access = BufferAccess_ReadWrite);
|
||||
VertexMapper(const SubMesh* subMesh, BufferAccess access = BufferAccess_ReadOnly);
|
||||
VertexMapper(const VertexBuffer* vertexBuffer, BufferAccess access = BufferAccess_ReadOnly);
|
||||
~VertexMapper();
|
||||
|
||||
template<typename T> SparsePtr<T> GetComponentPtr(VertexComponent component);
|
||||
|
|
|
|||
|
|
@ -17,12 +17,19 @@ namespace Nz
|
|||
m_triangleIndices[1] = m_indexMapper.Get(1);
|
||||
m_triangleIndices[2] = m_indexMapper.Get(2);
|
||||
|
||||
m_indexCount = indexBuffer->GetIndexCount();
|
||||
m_indexCount = m_indexMapper.GetIndexCount();
|
||||
}
|
||||
|
||||
TriangleIterator::TriangleIterator(SubMesh* subMesh) :
|
||||
TriangleIterator(subMesh->GetPrimitiveMode(), subMesh->GetIndexBuffer())
|
||||
TriangleIterator::TriangleIterator(const SubMesh* subMesh) :
|
||||
m_primitiveMode(subMesh->GetPrimitiveMode()),
|
||||
m_indexMapper(subMesh, BufferAccess_ReadOnly)
|
||||
{
|
||||
m_currentIndex = 3;
|
||||
m_triangleIndices[0] = m_indexMapper.Get(0);
|
||||
m_triangleIndices[1] = m_indexMapper.Get(1);
|
||||
m_triangleIndices[2] = m_indexMapper.Get(2);
|
||||
|
||||
m_indexCount = m_indexMapper.GetIndexCount();
|
||||
}
|
||||
|
||||
bool TriangleIterator::Advance()
|
||||
|
|
|
|||
|
|
@ -47,6 +47,42 @@ namespace Nz
|
|||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||
m_mapper.Map(vertexBuffer, access);
|
||||
}
|
||||
|
||||
VertexMapper::VertexMapper(const SubMesh* subMesh, BufferAccess access)
|
||||
{
|
||||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||
|
||||
const VertexBuffer* buffer = nullptr;
|
||||
switch (subMesh->GetAnimationType())
|
||||
{
|
||||
case AnimationType_Skeletal:
|
||||
{
|
||||
const SkeletalMesh* skeletalMesh = static_cast<const SkeletalMesh*>(subMesh);
|
||||
buffer = skeletalMesh->GetVertexBuffer();
|
||||
break;
|
||||
}
|
||||
|
||||
case AnimationType_Static:
|
||||
{
|
||||
const StaticMesh* staticMesh = static_cast<const StaticMesh*>(subMesh);
|
||||
buffer = staticMesh->GetVertexBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
{
|
||||
NazaraInternalError("Animation type not handled (0x" + String::Number(subMesh->GetAnimationType(), 16) + ')');
|
||||
}
|
||||
|
||||
m_mapper.Map(buffer, access);
|
||||
}
|
||||
|
||||
VertexMapper::VertexMapper(const VertexBuffer* vertexBuffer, BufferAccess access)
|
||||
{
|
||||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||
m_mapper.Map(vertexBuffer, access);
|
||||
}
|
||||
|
||||
VertexMapper::~VertexMapper() = default;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue