Replace HWBufferMap with a list and back pointers (#99)

This commit is contained in:
paradust7
2022-04-29 03:04:22 -07:00
committed by GitHub
parent c9b66c8c58
commit ba0396e93d
8 changed files with 56 additions and 38 deletions

View File

@ -21,6 +21,7 @@
#include "SVertexIndex.h"
#include "SLight.h"
#include "SExposedVideoData.h"
#include <list>
namespace irr
{
@ -388,25 +389,29 @@ namespace video
{
SHWBufferLink(const scene::IMeshBuffer *_MeshBuffer)
:MeshBuffer(_MeshBuffer),
ChangedID_Vertex(0),ChangedID_Index(0),LastUsed(0),
ChangedID_Vertex(0),ChangedID_Index(0),
Mapped_Vertex(scene::EHM_NEVER),Mapped_Index(scene::EHM_NEVER)
{
if (MeshBuffer)
if (MeshBuffer) {
MeshBuffer->grab();
MeshBuffer->setHWBuffer(reinterpret_cast<void*>(this));
}
}
virtual ~SHWBufferLink()
{
if (MeshBuffer)
if (MeshBuffer) {
MeshBuffer->setHWBuffer(NULL);
MeshBuffer->drop();
}
}
const scene::IMeshBuffer *MeshBuffer;
u32 ChangedID_Vertex;
u32 ChangedID_Index;
u32 LastUsed;
scene::E_HARDWARE_MAPPING Mapped_Vertex;
scene::E_HARDWARE_MAPPING Mapped_Index;
std::list<SHWBufferLink*>::iterator listPosition;
};
//! Gets hardware buffer link from a meshbuffer (may create or update buffer)
@ -818,8 +823,7 @@ namespace video
core::array<SLight> Lights;
core::array<SMaterialRenderer> MaterialRenderers;
//core::array<SHWBufferLink*> HWBufferLinks;
core::map< const scene::IMeshBuffer* , SHWBufferLink* > HWBufferMap;
std::list<SHWBufferLink*> HWBufferList;
io::IFileSystem* FileSystem;