Utility: Allow TriangleIterator and VertexMapper to take constant submesh
Former-commit-id: f2a4eeeecf5868a2e51289d3d25d878be9b6bf3d [formerly 028fafc2cf156502a22dd269ac8b14a9accaf80c] Former-commit-id: 32c9bb55cb63030e67f3287d4c26ef29f1edccbf
This commit is contained in:
parent
18e03246fa
commit
96dd854ec9
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -48,6 +48,42 @@ namespace Nz
|
|||
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;
|
||||
|
||||
void VertexMapper::Unmap()
|
||||
|
|
|
|||
Loading…
Reference in New Issue