Commit: 9f35495a26552ba4b18ead8c1bc486207ddbc171 Author: Mike Erwin Date: Tue Nov 29 00:12:50 2016 -0500 Branches: blender2.8 https://developer.blender.org/rB9f35495a26552ba4b18ead8c1bc486207ddbc171
Gawain: batch mode uses buffer ID funcs The _discard functions now free their resources! These were waiting on thread-safe ID management, which we now have. =================================================================== M source/blender/gpu/gawain/batch.c M source/blender/gpu/gawain/element.c M source/blender/gpu/gawain/vertex_buffer.c =================================================================== diff --git a/source/blender/gpu/gawain/batch.c b/source/blender/gpu/gawain/batch.c index f1c07d4..a60865d 100644 --- a/source/blender/gpu/gawain/batch.c +++ b/source/blender/gpu/gawain/batch.c @@ -10,6 +10,7 @@ // the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. #include "batch.h" +#include "buffer_id.h" #include <stdlib.h> // necessary functions from matrix API @@ -36,7 +37,10 @@ Batch* Batch_create(PrimitiveType prim_type, VertexBuffer* verts, ElementList* e void Batch_discard(Batch* batch) { - // TODO: clean up + if (batch->vao_id) + vao_id_free(batch->vao_id); + + free(batch); } void Batch_discard_all(Batch* batch) @@ -194,7 +198,7 @@ void Batch_Uniform4fv(Batch* batch, const char* name, const float data[4]) static void Batch_prime(Batch* batch) { - glGenVertexArrays(1, &batch->vao_id); + batch->vao_id = vao_id_alloc(); glBindVertexArray(batch->vao_id); VertexBuffer_use(batch->verts); diff --git a/source/blender/gpu/gawain/element.c b/source/blender/gpu/gawain/element.c index 30d7548..3c3ca1c 100644 --- a/source/blender/gpu/gawain/element.c +++ b/source/blender/gpu/gawain/element.c @@ -10,6 +10,7 @@ // the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. #include "element.h" +#include "buffer_id.h" #include <stdlib.h> #define KEEP_SINGLE_COPY 1 @@ -36,7 +37,7 @@ unsigned ElementList_size(const ElementList* elem) static void ElementList_prime(ElementList* elem) { - glGenBuffers(1, &elem->vbo_id); + elem->vbo_id = buffer_id_alloc(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elem->vbo_id); // fill with delicious data & send to GPU the first time only glBufferData(GL_ELEMENT_ARRAY_BUFFER, ElementList_size(elem), elem->data, GL_STATIC_DRAW); @@ -270,5 +271,13 @@ void ElementList_build_in_place(ElementListBuilder* builder, ElementList* elem) void ElementList_discard(ElementList* elem) { - // TODO: clean up + if (elem->vbo_id) + buffer_id_free(elem->vbo_id); +#if KEEP_SINGLE_COPY + else +#endif + if (elem->data) + free(elem->data); + + free(elem); } diff --git a/source/blender/gpu/gawain/vertex_buffer.c b/source/blender/gpu/gawain/vertex_buffer.c index 403df3c..5f2da60 100644 --- a/source/blender/gpu/gawain/vertex_buffer.c +++ b/source/blender/gpu/gawain/vertex_buffer.c @@ -10,6 +10,7 @@ // the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. #include "vertex_buffer.h" +#include "buffer_id.h" #include <stdlib.h> #include <string.h> @@ -49,7 +50,15 @@ void VertexBuffer_init_with_format(VertexBuffer* verts, const VertexFormat* form void VertexBuffer_discard(VertexBuffer* verts) { - // TODO: clean up + if (verts->vbo_id) + buffer_id_free(verts->vbo_id); +#if KEEP_SINGLE_COPY + else +#endif + if (verts->data) + free(verts->data); + + free(verts); } unsigned VertexBuffer_size(const VertexBuffer* verts) @@ -140,7 +149,7 @@ static void VertexBuffer_prime(VertexBuffer* verts) { const VertexFormat* format = &verts->format; - glGenBuffers(1, &verts->vbo_id); + verts->vbo_id = buffer_id_alloc(); glBindBuffer(GL_ARRAY_BUFFER, verts->vbo_id); // fill with delicious data & send to GPU the first time only glBufferData(GL_ARRAY_BUFFER, vertex_buffer_size(format, verts->vertex_ct), verts->data, GL_STATIC_DRAW); _______________________________________________ Bf-blender-cvs mailing list [email protected] https://lists.blender.org/mailman/listinfo/bf-blender-cvs
