CIndexBuffer: Make use of size_t where applicable

Provides a nicer interface for operating with standard types, etc.
This commit is contained in:
Lioncash 2020-06-14 18:29:37 -04:00
parent d4564434c3
commit 332be356de
2 changed files with 56 additions and 54 deletions

View File

@ -2,8 +2,8 @@
CIndexBuffer::CIndexBuffer() = default; CIndexBuffer::CIndexBuffer() = default;
CIndexBuffer::CIndexBuffer(GLenum Type) CIndexBuffer::CIndexBuffer(GLenum type)
: mPrimitiveType(Type) : mPrimitiveType(type)
{ {
} }
@ -13,21 +13,21 @@ CIndexBuffer::~CIndexBuffer()
glDeleteBuffers(1, &mIndexBuffer); glDeleteBuffers(1, &mIndexBuffer);
} }
void CIndexBuffer::AddIndex(uint16 Index) void CIndexBuffer::AddIndex(uint16 index)
{ {
mIndices.push_back(Index); mIndices.push_back(index);
} }
void CIndexBuffer::AddIndices(uint16 *pIndices, uint Count) void CIndexBuffer::AddIndices(uint16 *indices, size_t count)
{ {
Reserve(Count); Reserve(count);
for (uint iIdx = 0; iIdx < Count; iIdx++) for (size_t i = 0; i < count; i++)
mIndices.push_back(*pIndices++); mIndices.push_back(*indices++);
} }
void CIndexBuffer::Reserve(uint Size) void CIndexBuffer::Reserve(size_t size)
{ {
mIndices.reserve(mIndices.size() + Size); mIndices.reserve(mIndices.size() + size);
} }
void CIndexBuffer::Clear() void CIndexBuffer::Clear()
@ -53,7 +53,9 @@ void CIndexBuffer::Buffer()
void CIndexBuffer::Bind() void CIndexBuffer::Bind()
{ {
if (!mBuffered) Buffer(); if (!mBuffered)
Buffer();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
} }
@ -64,14 +66,14 @@ void CIndexBuffer::Unbind()
void CIndexBuffer::DrawElements() void CIndexBuffer::DrawElements()
{ {
Bind(); Bind();
glDrawElements(mPrimitiveType, mIndices.size(), GL_UNSIGNED_SHORT, (void*) 0); glDrawElements(mPrimitiveType, mIndices.size(), GL_UNSIGNED_SHORT, nullptr);
Unbind(); Unbind();
} }
void CIndexBuffer::DrawElements(uint Offset, uint Size) void CIndexBuffer::DrawElements(uint offset, uint size)
{ {
Bind(); Bind();
glDrawElements(mPrimitiveType, Size, GL_UNSIGNED_SHORT, (char*)0 + (Offset * 2)); glDrawElements(mPrimitiveType, size, GL_UNSIGNED_SHORT, (char*)0 + (offset * 2));
Unbind(); Unbind();
} }
@ -90,62 +92,62 @@ GLenum CIndexBuffer::GetPrimitiveType() const
return mPrimitiveType; return mPrimitiveType;
} }
void CIndexBuffer::SetPrimitiveType(GLenum Type) void CIndexBuffer::SetPrimitiveType(GLenum type)
{ {
mPrimitiveType = Type; mPrimitiveType = type;
} }
void CIndexBuffer::TrianglesToStrips(uint16 *pIndices, uint Count) void CIndexBuffer::TrianglesToStrips(uint16 *indices, size_t count)
{ {
Reserve(Count + (Count / 3)); Reserve(count + (count / 3));
for (uint iIdx = 0; iIdx < Count; iIdx += 3) for (size_t i = 0; i < count; i += 3)
{ {
mIndices.push_back(*pIndices++); mIndices.push_back(*indices++);
mIndices.push_back(*pIndices++); mIndices.push_back(*indices++);
mIndices.push_back(*pIndices++); mIndices.push_back(*indices++);
mIndices.push_back(0xFFFF); mIndices.push_back(0xFFFF);
} }
} }
void CIndexBuffer::FansToStrips(uint16 *pIndices, uint Count) void CIndexBuffer::FansToStrips(uint16 *indices, size_t count)
{ {
Reserve(Count); Reserve(count);
uint16 FirstIndex = *pIndices; const uint16 firstIndex = *indices;
for (uint iIdx = 2; iIdx < Count; iIdx += 3) for (size_t i = 2; i < count; i += 3)
{ {
mIndices.push_back(pIndices[iIdx - 1]); mIndices.push_back(indices[i - 1]);
mIndices.push_back(pIndices[iIdx]); mIndices.push_back(indices[i]);
mIndices.push_back(FirstIndex); mIndices.push_back(firstIndex);
if (iIdx + 1 < Count) if (i + 1 < count)
mIndices.push_back(pIndices[iIdx + 1]); mIndices.push_back(indices[i + 1]);
if (iIdx + 2 < Count) if (i + 2 < count)
mIndices.push_back(pIndices[iIdx + 2]); mIndices.push_back(indices[i + 2]);
mIndices.push_back(0xFFFF); mIndices.push_back(0xFFFF);
} }
} }
void CIndexBuffer::QuadsToStrips(uint16 *pIndices, uint Count) void CIndexBuffer::QuadsToStrips(uint16 *indices, size_t count)
{ {
Reserve((uint) (Count * 1.25)); Reserve(static_cast<size_t>(count * 1.25));
uint iIdx = 3; size_t i = 3;
for (; iIdx < Count; iIdx += 4) for (; i < count; i += 4)
{ {
mIndices.push_back(pIndices[iIdx - 2]); mIndices.push_back(indices[i - 2]);
mIndices.push_back(pIndices[iIdx - 1]); mIndices.push_back(indices[i - 1]);
mIndices.push_back(pIndices[iIdx - 3]); mIndices.push_back(indices[i - 3]);
mIndices.push_back(pIndices[iIdx]); mIndices.push_back(indices[i]);
mIndices.push_back(0xFFFF); mIndices.push_back(0xFFFF);
} }
// if there's three indices present that indicates a single triangle // if there's three indices present that indicates a single triangle
if (iIdx == Count) if (i == count)
{ {
mIndices.push_back(pIndices[iIdx - 3]); mIndices.push_back(indices[i - 3]);
mIndices.push_back(pIndices[iIdx - 2]); mIndices.push_back(indices[i - 2]);
mIndices.push_back(pIndices[iIdx - 1]); mIndices.push_back(indices[i - 1]);
mIndices.push_back(0xFFFF); mIndices.push_back(0xFFFF);
} }

View File

@ -14,26 +14,26 @@ class CIndexBuffer
public: public:
CIndexBuffer(); CIndexBuffer();
explicit CIndexBuffer(GLenum Type); explicit CIndexBuffer(GLenum type);
~CIndexBuffer(); ~CIndexBuffer();
void AddIndex(uint16 Index); void AddIndex(uint16 index);
void AddIndices(uint16 *pIndices, uint Count); void AddIndices(uint16 *indices, size_t count);
void Reserve(uint Size); void Reserve(size_t size);
void Clear(); void Clear();
void Buffer(); void Buffer();
void Bind(); void Bind();
void Unbind(); void Unbind();
void DrawElements(); void DrawElements();
void DrawElements(uint Offset, uint Size); void DrawElements(uint offset, uint size);
bool IsBuffered() const; bool IsBuffered() const;
uint GetSize() const; uint GetSize() const;
GLenum GetPrimitiveType() const; GLenum GetPrimitiveType() const;
void SetPrimitiveType(GLenum Type); void SetPrimitiveType(GLenum type);
void TrianglesToStrips(uint16 *pIndices, uint Count); void TrianglesToStrips(uint16 *indices, size_t count);
void FansToStrips(uint16 *pIndices, uint Count); void FansToStrips(uint16 *indices, size_t count);
void QuadsToStrips(uint16 *pIndices, uint Count); void QuadsToStrips(uint16 *indices, size_t count);
}; };
#endif // CINDEXBUFFER_H #endif // CINDEXBUFFER_H