mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-07-04 12:15:58 +00:00
CIndexBuffer: Make use of size_t where applicable
Provides a nicer interface for operating with standard types, etc.
This commit is contained in:
parent
d4564434c3
commit
332be356de
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user