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
|
class NAZARA_UTILITY_API IndexMapper
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IndexMapper(IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadWrite);
|
IndexMapper(IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadWrite, std::size_t indexCount = 0);
|
||||||
IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadOnly);
|
IndexMapper(SubMesh* subMesh, BufferAccess access = BufferAccess_ReadWrite);
|
||||||
IndexMapper(const SubMesh* subMesh);
|
IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access = BufferAccess_ReadOnly, std::size_t indexCount = 0);
|
||||||
|
IndexMapper(const SubMesh* subMesh, BufferAccess access = BufferAccess_ReadOnly);
|
||||||
~IndexMapper() = default;
|
~IndexMapper() = default;
|
||||||
|
|
||||||
UInt32 Get(unsigned int i) const;
|
UInt32 Get(unsigned int i) const;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,13 @@ namespace Nz
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
UInt32 GetterSequential(const void* buffer, unsigned int i)
|
||||||
|
{
|
||||||
|
NazaraUnused(buffer);
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
UInt32 Getter16(const void* buffer, unsigned int i)
|
UInt32 Getter16(const void* buffer, unsigned int i)
|
||||||
{
|
{
|
||||||
const UInt16* ptr = static_cast<const UInt16*>(buffer);
|
const UInt16* ptr = static_cast<const UInt16*>(buffer);
|
||||||
|
|
@ -42,17 +49,13 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexMapper::IndexMapper(IndexBuffer* indexBuffer, BufferAccess access) :
|
IndexMapper::IndexMapper(IndexBuffer* indexBuffer, BufferAccess access, std::size_t indexCount) :
|
||||||
m_indexCount(indexBuffer->GetIndexCount())
|
m_indexCount((indexCount != 0) ? indexCount : indexBuffer->GetIndexCount())
|
||||||
{
|
{
|
||||||
#if NAZARA_UTILITY_SAFE
|
NazaraAssert(indexCount != 0 || indexBuffer, "Invalid index count with invalid index buffer");
|
||||||
if (!indexBuffer)
|
|
||||||
{
|
|
||||||
NazaraError("Index buffer must be valid");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
if (indexBuffer)
|
||||||
|
{
|
||||||
if (!m_mapper.Map(indexBuffer, access))
|
if (!m_mapper.Map(indexBuffer, access))
|
||||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||||
|
|
||||||
|
|
@ -73,19 +76,26 @@ namespace Nz
|
||||||
m_setter = SetterError;
|
m_setter = SetterError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
IndexMapper::IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access) :
|
|
||||||
m_setter(SetterError),
|
|
||||||
m_indexCount(indexBuffer->GetIndexCount())
|
|
||||||
{
|
{
|
||||||
#if NAZARA_UTILITY_SAFE
|
m_getter = GetterSequential;
|
||||||
if (!indexBuffer)
|
m_setter = SetterError;
|
||||||
{
|
}
|
||||||
NazaraError("Index buffer must be valid");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
#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))
|
if (!m_mapper.Map(indexBuffer, access))
|
||||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||||
|
|
||||||
|
|
@ -94,9 +104,12 @@ namespace Nz
|
||||||
else
|
else
|
||||||
m_getter = Getter16;
|
m_getter = Getter16;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
m_getter = GetterSequential;
|
||||||
|
}
|
||||||
|
|
||||||
IndexMapper::IndexMapper(const SubMesh* subMesh) :
|
IndexMapper::IndexMapper(const SubMesh* subMesh, BufferAccess access) :
|
||||||
IndexMapper(subMesh->GetIndexBuffer())
|
IndexMapper(subMesh->GetIndexBuffer(), access, (subMesh->GetIndexBuffer()) ? 0 : subMesh->GetVertexCount())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue