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:
|
public:
|
||||||
TriangleIterator(PrimitiveMode primitiveMode, const IndexBuffer* indexBuffer);
|
TriangleIterator(PrimitiveMode primitiveMode, const IndexBuffer* indexBuffer);
|
||||||
TriangleIterator(SubMesh* subMesh);
|
TriangleIterator(const SubMesh* subMesh);
|
||||||
~TriangleIterator() = default;
|
~TriangleIterator() = default;
|
||||||
|
|
||||||
bool Advance();
|
bool Advance();
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@ namespace Nz
|
||||||
public:
|
public:
|
||||||
VertexMapper(SubMesh* subMesh, BufferAccess access = BufferAccess_ReadWrite);
|
VertexMapper(SubMesh* subMesh, BufferAccess access = BufferAccess_ReadWrite);
|
||||||
VertexMapper(VertexBuffer* vertexBuffer, 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();
|
~VertexMapper();
|
||||||
|
|
||||||
template<typename T> SparsePtr<T> GetComponentPtr(VertexComponent component);
|
template<typename T> SparsePtr<T> GetComponentPtr(VertexComponent component);
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,19 @@ namespace Nz
|
||||||
m_triangleIndices[1] = m_indexMapper.Get(1);
|
m_triangleIndices[1] = m_indexMapper.Get(1);
|
||||||
m_triangleIndices[2] = m_indexMapper.Get(2);
|
m_triangleIndices[2] = m_indexMapper.Get(2);
|
||||||
|
|
||||||
m_indexCount = indexBuffer->GetIndexCount();
|
m_indexCount = m_indexMapper.GetIndexCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
TriangleIterator::TriangleIterator(SubMesh* subMesh) :
|
TriangleIterator::TriangleIterator(const SubMesh* subMesh) :
|
||||||
TriangleIterator(subMesh->GetPrimitiveMode(), subMesh->GetIndexBuffer())
|
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()
|
bool TriangleIterator::Advance()
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,42 @@ namespace Nz
|
||||||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||||
m_mapper.Map(vertexBuffer, access);
|
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;
|
VertexMapper::~VertexMapper() = default;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue