Reuse buffer objects when possible.

glBufferData() recreates anyway.
This commit is contained in:
Unknown W. Brackets 2014-06-07 16:20:12 -07:00
parent 4971206e92
commit 5f521bcfb0
2 changed files with 8 additions and 2 deletions

View File

@ -506,6 +506,11 @@ GLuint TransformDrawEngine::AllocateBuffer() {
return buf;
}
void TransformDrawEngine::FreeBuffer(GLuint buf) {
// We can reuse buffers by setting new data on them.
bufferNameCache_.push_back(buf);
}
void TransformDrawEngine::DoFlush() {
gpuStats.numFlushes++;
gpuStats.numTrackedVertexArrays = (int)vai_.size();
@ -574,11 +579,11 @@ void TransformDrawEngine::DoFlush() {
if (newHash != vai->hash) {
vai->status = VertexArrayInfo::VAI_UNRELIABLE;
if (vai->vbo) {
glDeleteBuffers(1, &vai->vbo);
FreeBuffer(vai->vbo);
vai->vbo = 0;
}
if (vai->ebo) {
glDeleteBuffers(1, &vai->ebo);
FreeBuffer(vai->ebo);
vai->ebo = 0;
}
DecodeVerts();

View File

@ -176,6 +176,7 @@ private:
void ApplyDrawState(int prim);
bool IsReallyAClear(int numVerts) const;
GLuint AllocateBuffer();
void FreeBuffer(GLuint buf);
// Preprocessing for spline/bezier
u32 NormalizeVertices(u8 *outPtr, u8 *bufPtr, const u8 *inPtr, int lowerBound, int upperBound, u32 vertType);