Utility/IndexMapper: Makes it work without index buffers (sequential mode)
Former-commit-id: 93f33efed85f0f3464fa7db604dbaaa488679fcd [formerly 77614134455dd70c2bebdb611aa1043da078da9b] Former-commit-id: 635b19330864dbbba3a15deb7cb1a70742e65cd5
This commit is contained in:
parent
26289139a3
commit
b9051067e0
|
|
@ -23,9 +23,10 @@ namespace Nz
|
|||
class NAZARA_UTILITY_API IndexMapper
|
||||
{
|
||||
public:
|
||||
IndexMapper(IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadWrite);
|
||||
IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadOnly);
|
||||
IndexMapper(const SubMesh* subMesh);
|
||||
IndexMapper(IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadWrite, std::size_t indexCount = 0);
|
||||
IndexMapper(SubMesh* subMesh, BufferAccess access = BufferAccess_ReadWrite);
|
||||
IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadOnly, std::size_t indexCount = 0);
|
||||
IndexMapper(const SubMesh* subMesh, BufferAccess access = BufferAccess_ReadOnly);
|
||||
~IndexMapper() = default;
|
||||
|
||||
UInt32 Get(unsigned int i) const;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,13 @@ namespace Nz
|
|||
{
|
||||
namespace
|
||||
{
|
||||
UInt32 GetterSequential(const void* buffer, unsigned int i)
|
||||
{
|
||||
NazaraUnused(buffer);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
UInt32 Getter16(const void* buffer, unsigned int i)
|
||||
{
|
||||
const UInt16* ptr = static_cast<const UInt16*>(buffer);
|
||||
|
|
@ -42,17 +49,13 @@ namespace Nz
|
|||
}
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(IndexBuffer* indexBuffer, BufferAccess access) :
|
||||
m_indexCount(indexBuffer->GetIndexCount())
|
||||
IndexMapper::IndexMapper(IndexBuffer* indexBuffer, BufferAccess access, std::size_t indexCount) :
|
||||
m_indexCount((indexCount != 0) ? indexCount : indexBuffer->GetIndexCount())
|
||||
{
|
||||
#if NAZARA_UTILITY_SAFE
|
||||
if (!indexBuffer)
|
||||
{
|
||||
NazaraError("Index buffer must be valid");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
NazaraAssert(indexCount != 0 || indexBuffer, "Invalid index count with invalid index buffer");
|
||||
|
||||
if (indexBuffer)
|
||||
{
|
||||
if (!m_mapper.Map(indexBuffer, access))
|
||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||
|
||||
|
|
@ -73,19 +76,26 @@ namespace Nz
|
|||
m_setter = SetterError;
|
||||
}
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access) :
|
||||
m_setter(SetterError),
|
||||
m_indexCount(indexBuffer->GetIndexCount())
|
||||
else
|
||||
{
|
||||
#if NAZARA_UTILITY_SAFE
|
||||
if (!indexBuffer)
|
||||
{
|
||||
NazaraError("Index buffer must be valid");
|
||||
return;
|
||||
m_getter = GetterSequential;
|
||||
m_setter = SetterError;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
IndexMapper::IndexMapper(SubMesh* subMesh, BufferAccess access) :
|
||||
IndexMapper(subMesh->GetIndexBuffer(), access, (subMesh->GetIndexBuffer()) ? 0 : subMesh->GetVertexCount())
|
||||
{
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access, std::size_t indexCount) :
|
||||
m_setter(SetterError),
|
||||
m_indexCount((indexCount != 0) ? indexCount : indexBuffer->GetIndexCount())
|
||||
{
|
||||
NazaraAssert(indexCount != 0 || indexBuffer, "Invalid index count with invalid index buffer");
|
||||
|
||||
if (indexBuffer)
|
||||
{
|
||||
if (!m_mapper.Map(indexBuffer, access))
|
||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||
|
||||
|
|
@ -94,9 +104,12 @@ namespace Nz
|
|||
else
|
||||
m_getter = Getter16;
|
||||
}
|
||||
else
|
||||
m_getter = GetterSequential;
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(const SubMesh* subMesh) :
|
||||
IndexMapper(subMesh->GetIndexBuffer())
|
||||
IndexMapper::IndexMapper(const SubMesh* subMesh, BufferAccess access) :
|
||||
IndexMapper(subMesh->GetIndexBuffer(), access, (subMesh->GetIndexBuffer()) ? 0 : subMesh->GetVertexCount())
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue