Skip to content

Commit df7c8f8

Browse files
committed
Use staging buffer for the geometry cache
1 parent dedb63c commit df7c8f8

File tree

2 files changed

+11
-18
lines changed

2 files changed

+11
-18
lines changed

src/engine/renderer/GeometryCache.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3636
#include "common/Common.h"
3737

3838
#include "GeometryCache.h"
39-
39+
#include "GLMemory.h"
4040
#include "tr_local.h"
4141

4242
GeometryCache geometryCache;
@@ -61,12 +61,6 @@ void GeometryCache::FreeGLBuffers() {
6161
VAO.DelVAO();
6262
}
6363

64-
void GeometryCache::AllocBuffers() {
65-
VBO.BufferData( mapVerticesNumber * 8, nullptr, GL_STATIC_DRAW );
66-
67-
IBO.BufferData( mapIndicesNumber, nullptr, GL_STATIC_DRAW );
68-
}
69-
7064
void GeometryCache::AddMapGeometry( const uint32_t verticesNumber, const uint32_t indicesNumber,
7165
const vertexAttributeSpec_t* attrBegin, const vertexAttributeSpec_t* attrEnd,
7266
const glIndex_t* indices ) {
@@ -75,28 +69,28 @@ void GeometryCache::AddMapGeometry( const uint32_t verticesNumber, const uint32_
7569

7670
VAO.Bind();
7771

78-
AllocBuffers();
79-
8072
VAO.SetAttrs( attrBegin, attrEnd );
8173

8274
VAO.SetVertexBuffer( VBO, 0 );
8375
VAO.SetIndexBuffer( IBO );
8476

8577
VBO.BufferStorage( mapVerticesNumber * 8, 1, nullptr );
86-
VBO.MapAll();
87-
uint32_t* VBOVerts = VBO.GetData();
78+
uint32_t* VBOVerts = stagingBuffer.MapBuffer( mapVerticesNumber * 8 );
8879
for ( const vertexAttributeSpec_t* spec = attrBegin; spec < attrEnd; spec++ ) {
8980
vboAttributeLayout_t& attr = VAO.attrs[spec->attrIndex];
9081

9182
R_CopyVertexAttribute( attr, *spec, mapVerticesNumber, ( byte* ) VBOVerts );
9283
}
93-
VBO.UnmapBuffer();
84+
85+
stagingBuffer.QueueStagingCopy( &VBO, 0 );
9486

9587
IBO.BufferStorage( mapIndicesNumber, 1, nullptr );
96-
IBO.MapAll();
97-
uint32_t* IBOIndices = IBO.GetData();
88+
uint32_t* IBOIndices = stagingBuffer.MapBuffer( mapIndicesNumber );
9889
memcpy( IBOIndices, indices, mapIndicesNumber * sizeof( uint32_t ) );
99-
IBO.UnmapBuffer();
90+
91+
stagingBuffer.QueueStagingCopy( &IBO, 0 );
92+
93+
stagingBuffer.FlushAll();
10094

10195
glBindVertexArray( backEnd.currentVAO );
10296
}

src/engine/renderer/GeometryCache.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ class GeometryCache {
4646
void InitGLBuffers();
4747
void FreeGLBuffers();
4848

49-
void AllocBuffers();
5049
void AddMapGeometry( const uint32_t verticesNumber, const uint32_t indicesNumber,
5150
const vertexAttributeSpec_t* attrBegin,
5251
const vertexAttributeSpec_t* attrEnd,
@@ -59,8 +58,8 @@ class GeometryCache {
5958
GLVAO VAO = GLVAO( 0 );
6059

6160
GLBuffer inputVBO = GLBuffer( "geometryCacheInputVBO", BufferBind::GEOMETRY_CACHE_INPUT_VBO, GL_MAP_WRITE_BIT, GL_MAP_INVALIDATE_RANGE_BIT );
62-
GLBuffer VBO = GLBuffer( "geometryCacheVBO", BufferBind::GEOMETRY_CACHE_VBO, GL_MAP_WRITE_BIT, GL_MAP_FLUSH_EXPLICIT_BIT );
63-
GLBuffer IBO = GLBuffer( "geometryCacheIBO", BufferBind::GEOMETRY_CACHE_IBO, GL_MAP_WRITE_BIT, GL_MAP_INVALIDATE_RANGE_BIT );
61+
GLBuffer VBO = GLBuffer( "geometryCacheVBO", BufferBind::GEOMETRY_CACHE_VBO, 0, 0 );
62+
GLBuffer IBO = GLBuffer( "geometryCacheIBO", BufferBind::GEOMETRY_CACHE_IBO, 0, 0 );
6463
};
6564

6665
extern GeometryCache geometryCache;

0 commit comments

Comments
 (0)