gfx/3d: preallocate vertices

Resolves #2325.
This commit is contained in:
Marcin Kurczewski 2025-01-19 23:05:05 +01:00
parent 83758c0c1d
commit e2181347e8
2 changed files with 12 additions and 4 deletions

View file

@ -33,6 +33,7 @@
- fixed sprite pickups not being paused in the pause/inventory screen (#2319, regression from 0.6)
- fixed Skidoo snow wake effects at slow speeds (#2324, regression from 0.6)
- fixed software renderer skybox occlusion issues (#2343, regression from 0.7)
- fixed Floating Islands losing some frames if played first (#2325, regression from 0.7)
## [0.8](https://github.com/LostArtefacts/TRX/compare/tr2-0.8...tr2-0.8) - 2025-01-01
- completed decompilation efforts  TR2X.dll is gone, Tomb2.exe no longer needed (#1694)

View file

@ -5,6 +5,8 @@
#include "log.h"
#include "memory.h"
#define M_PREALLOC_VERTEX_COUNT 8000
static const GLenum GL_PRIM_MODES[] = {
GL_LINES, // GFX_3D_PRIM_LINE
GL_TRIANGLES, // GFX_3D_PRIM_TRI
@ -32,14 +34,19 @@ static void M_PushVertex(
void GFX_3D_VertexStream_Init(GFX_3D_VERTEX_STREAM *const vertex_stream)
{
vertex_stream->prim_type = GFX_3D_PRIM_TRI;
vertex_stream->buffer_size = 0;
vertex_stream->pending_vertices.data = NULL;
vertex_stream->pending_vertices.count = 0;
vertex_stream->pending_vertices.capacity = 0;
vertex_stream->buffer_size =
M_PREALLOC_VERTEX_COUNT * sizeof(GFX_3D_VERTEX);
vertex_stream->rendered_count = 0;
vertex_stream->pending_vertices.count = 0;
vertex_stream->pending_vertices.capacity = M_PREALLOC_VERTEX_COUNT;
vertex_stream->pending_vertices.data = Memory_Alloc(
vertex_stream->pending_vertices.capacity * sizeof(GFX_3D_VERTEX));
GFX_GL_Buffer_Init(&vertex_stream->buffer, GL_ARRAY_BUFFER);
GFX_GL_Buffer_Bind(&vertex_stream->buffer);
GFX_GL_Buffer_Data(
&vertex_stream->buffer, vertex_stream->buffer_size, NULL,
GL_STREAM_DRAW);
GFX_GL_VertexArray_Init(&vertex_stream->vtc_format);
GFX_GL_VertexArray_Bind(&vertex_stream->vtc_format);