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

Handle vertex & index VBOs separately in GL drivers

This commit is contained in:
sfan5 2024-08-28 19:35:28 +02:00
parent be9aa19208
commit 6b7fc1e9fe
7 changed files with 346 additions and 283 deletions

View file

@ -46,16 +46,11 @@ public:
struct SHWBufferLink_opengl : public SHWBufferLink
{
SHWBufferLink_opengl(const scene::IMeshBuffer *meshBuffer) :
SHWBufferLink(meshBuffer), vbo_verticesID(0), vbo_indicesID(0), vbo_verticesSize(0), vbo_indicesSize(0)
{
}
SHWBufferLink_opengl(const scene::IVertexBuffer *vb) : SHWBufferLink(vb) {}
SHWBufferLink_opengl(const scene::IIndexBuffer *ib) : SHWBufferLink(ib) {}
u32 vbo_verticesID; // tmp
u32 vbo_indicesID; // tmp
u32 vbo_verticesSize; // tmp
u32 vbo_indicesSize; // tmp
GLuint vbo_ID = 0;
u32 vbo_Size = 0;
};
bool updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer);
@ -64,14 +59,18 @@ public:
//! updates hardware buffer if needed
bool updateHardwareBuffer(SHWBufferLink *HWBuffer) override;
//! Create hardware buffer from mesh
SHWBufferLink *createHardwareBuffer(const scene::IMeshBuffer *mb) override;
//! Create hardware buffer from vertex buffer
SHWBufferLink *createHardwareBuffer(const scene::IVertexBuffer *vb) override;
//! Create hardware buffer from index buffer
SHWBufferLink *createHardwareBuffer(const scene::IIndexBuffer *ib) override;
//! Delete hardware buffer (only some drivers can)
void deleteHardwareBuffer(SHWBufferLink *HWBuffer) override;
//! Draw hardware buffer
void drawHardwareBuffer(SHWBufferLink *HWBuffer) override;
void drawBuffers(const scene::IVertexBuffer *vb,
const scene::IIndexBuffer *ib, u32 primCount,
scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES) override;
IRenderTarget *addRenderTarget() override;
@ -291,10 +290,7 @@ protected:
LockRenderStateMode = false;
}
void draw2D3DVertexPrimitiveList(const void *vertices,
u32 vertexCount, const void *indexList, u32 primitiveCount,
E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType,
E_INDEX_TYPE iType, bool is3D);
bool updateHardwareBuffer(SHWBufferLink_opengl *b, const void *buffer, size_t bufferSize, scene::E_HARDWARE_MAPPING hint);
void createMaterialRenderers();