1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Replace data structure for HW buffer book-keeping

before
  time in endScene ÷ num hw buf ________________  199x   0.128
after
  time in endScene ÷ num hw buf ________________  199x   0.057
This commit is contained in:
sfan5 2024-12-28 14:39:54 +01:00
parent a2058f7f3a
commit 40afc84597
4 changed files with 46 additions and 40 deletions

View file

@ -17,7 +17,6 @@
#include "S3DVertex.h"
#include "SVertexIndex.h"
#include "SExposedVideoData.h"
#include <list>
namespace irr
{
@ -293,7 +292,7 @@ protected:
struct SHWBufferLink
{
SHWBufferLink(const scene::IVertexBuffer *vb) :
VertexBuffer(vb), ChangedID(0), IsVertex(true)
VertexBuffer(vb), IsVertex(true)
{
if (VertexBuffer) {
VertexBuffer->grab();
@ -301,7 +300,7 @@ protected:
}
}
SHWBufferLink(const scene::IIndexBuffer *ib) :
IndexBuffer(ib), ChangedID(0), IsVertex(false)
IndexBuffer(ib), IsVertex(false)
{
if (IndexBuffer) {
IndexBuffer->grab();
@ -324,9 +323,9 @@ protected:
const scene::IVertexBuffer *VertexBuffer;
const scene::IIndexBuffer *IndexBuffer;
};
u32 ChangedID;
size_t ListPosition = static_cast<size_t>(-1);
u32 ChangedID = 0;
bool IsVertex;
std::list<SHWBufferLink*>::iterator listPosition;
};
//! Gets hardware buffer link from a vertex buffer (may create or update buffer)
@ -361,8 +360,8 @@ public:
//! Remove all hardware buffers
void removeAllHardwareBuffers() override;
//! Update all hardware buffers, remove unused ones
virtual void updateAllHardwareBuffers();
//! Run garbage-collection on all HW buffers
void expireHardwareBuffers();
//! is vbo recommended?
virtual bool isHardwareBufferRecommend(const scene::IVertexBuffer *mb);
@ -582,6 +581,9 @@ protected:
//! deletes all material renderers
void deleteMaterialRenders();
// adds a created hardware buffer to the relevant data structure
void registerHardwareBuffer(SHWBufferLink *HWBuffer);
// prints renderer version
void printVersion();
@ -705,7 +707,7 @@ protected:
core::array<video::IImageWriter *> SurfaceWriter;
core::array<SMaterialRenderer> MaterialRenderers;
std::list<SHWBufferLink *> HWBufferList;
std::vector<SHWBufferLink *> HWBufferList;
io::IFileSystem *FileSystem;