- use an indexed vertex buffer to render the flats.
Right now this has no advantage but it allows optimizing the data, e.g. rendering an entire sector in one go instead of per subsector.
This commit is contained in:
parent
5ec47d8b4f
commit
fd3681dae2
10 changed files with 202 additions and 9 deletions
|
|
@ -125,6 +125,8 @@ void FSimpleVertexBuffer::set(FSimpleVertex *verts, int count)
|
|||
FFlatVertexBuffer::FFlatVertexBuffer(int width, int height)
|
||||
: FVertexBuffer(!gl.legacyMode), FFlatVertexGenerator(width, height)
|
||||
{
|
||||
ibo_id = 0;
|
||||
if (gl.buffermethod != BM_LEGACY) glGenBuffers(1, &ibo_id);
|
||||
switch (gl.buffermethod)
|
||||
{
|
||||
case BM_PERSISTENT:
|
||||
|
|
@ -170,6 +172,11 @@ FFlatVertexBuffer::~FFlatVertexBuffer()
|
|||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
}
|
||||
if (ibo_id != 0)
|
||||
{
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
glDeleteBuffers(1, &ibo_id);
|
||||
}
|
||||
if (gl.legacyMode)
|
||||
{
|
||||
delete[] map;
|
||||
|
|
@ -188,6 +195,7 @@ void FFlatVertexBuffer::OutputResized(int width, int height)
|
|||
void FFlatVertexBuffer::BindVBO()
|
||||
{
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_id);
|
||||
if (!gl.legacyMode)
|
||||
{
|
||||
glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->x);
|
||||
|
|
@ -245,4 +253,9 @@ void FFlatVertexBuffer::CreateVBO()
|
|||
Map();
|
||||
memcpy(map, &vbo_shadowdata[0], vbo_shadowdata.Size() * sizeof(FFlatVertex));
|
||||
Unmap();
|
||||
if (ibo_id > 0)
|
||||
{
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_id);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ibo_data.Size() * sizeof(uint32_t), &ibo_data[0], GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ public:
|
|||
|
||||
class FFlatVertexBuffer : public FVertexBuffer, public FFlatVertexGenerator
|
||||
{
|
||||
unsigned int ibo_id;
|
||||
FFlatVertex *map;
|
||||
unsigned int mIndex;
|
||||
std::atomic<unsigned int> mCurIndex;
|
||||
|
|
@ -177,6 +178,11 @@ public:
|
|||
|
||||
#endif
|
||||
|
||||
uint32_t *GetIndexPointer() const
|
||||
{
|
||||
return ibo_id == 0 ? &ibo_data[0] : nullptr;
|
||||
}
|
||||
|
||||
void CheckPlanes(sector_t *sector)
|
||||
{
|
||||
FFlatVertexGenerator::CheckPlanes(sector, map);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue