diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-08-10 12:41:22 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-08-13 15:20:24 +0300 |
commit | 47bfb0f7ad2f70017585fe55a68e49ae09f1150c (patch) | |
tree | 3840e9e93bb3a1cc18735b512356fd4ec86108c8 /source/blender/gpu/intern | |
parent | 9443da6166f58403eab07c7bff9eac55af04f981 (diff) |
GPUBatch: Move allocator to backend
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_backend.hh | 6 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_batch.cc | 14 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_batch_private.hh | 14 |
3 files changed, 30 insertions, 4 deletions
diff --git a/source/blender/gpu/intern/gpu_backend.hh b/source/blender/gpu/intern/gpu_backend.hh index 4dd6036e672..ba382e3c3fc 100644 --- a/source/blender/gpu/intern/gpu_backend.hh +++ b/source/blender/gpu/intern/gpu_backend.hh @@ -27,6 +27,7 @@ #include "gpu_context_private.hh" #include "gpu_drawlist_private.hh" +#include "gpu_batch_private.hh" namespace blender { namespace gpu { @@ -38,7 +39,12 @@ class GPUBackend { static GPUBackend *get(void); virtual GPUContext *context_alloc(void *ghost_window) = 0; + + virtual Batch *batch_alloc(void) = 0; virtual DrawList *drawlist_alloc(int list_length) = 0; + // virtual FrameBuffer *framebuffer_alloc(void) = 0; + // virtual Shader *shader_alloc(void) = 0; + // virtual Texture *texture_alloc(void) = 0; }; } // namespace gpu diff --git a/source/blender/gpu/intern/gpu_batch.cc b/source/blender/gpu/intern/gpu_batch.cc index 0a802946913..27196413b20 100644 --- a/source/blender/gpu/intern/gpu_batch.cc +++ b/source/blender/gpu/intern/gpu_batch.cc @@ -33,6 +33,7 @@ #include "GPU_platform.h" #include "GPU_shader.h" +#include "gpu_backend.hh" #include "gpu_batch_private.hh" #include "gpu_context_private.hh" #include "gpu_primitive_private.h" @@ -43,6 +44,8 @@ #include <stdlib.h> #include <string.h> +using namespace blender::gpu; + static GLuint g_default_attr_vbo = 0; static void gpu_batch_bind(GPUBatch *batch); @@ -86,9 +89,11 @@ void GPU_batch_vao_cache_clear(GPUBatch *batch) batch->context = NULL; } -GPUBatch *GPU_batch_calloc(uint count) +GPUBatch *GPU_batch_calloc(void) { - return (GPUBatch *)MEM_callocN(sizeof(GPUBatch) * count, "GPUBatch"); + GPUBatch *batch = GPUBackend::get()->batch_alloc(); + memset(batch, 0, sizeof(*batch)); + return batch; } GPUBatch *GPU_batch_create_ex(GPUPrimType prim_type, @@ -96,7 +101,7 @@ GPUBatch *GPU_batch_create_ex(GPUPrimType prim_type, GPUIndexBuf *elem, eGPUBatchFlag owns_flag) { - GPUBatch *batch = GPU_batch_calloc(1); + GPUBatch *batch = GPU_batch_calloc(); GPU_batch_init_ex(batch, prim_type, verts, elem, owns_flag); return batch; } @@ -163,7 +168,8 @@ void GPU_batch_clear(GPUBatch *batch) void GPU_batch_discard(GPUBatch *batch) { GPU_batch_clear(batch); - MEM_freeN(batch); + + delete static_cast<Batch *>(batch); } /* NOTE: Override ONLY the first instance vbo (and free them if owned). */ diff --git a/source/blender/gpu/intern/gpu_batch_private.hh b/source/blender/gpu/intern/gpu_batch_private.hh index a5a863310a1..a9293a5b206 100644 --- a/source/blender/gpu/intern/gpu_batch_private.hh +++ b/source/blender/gpu/intern/gpu_batch_private.hh @@ -30,4 +30,18 @@ #include "GPU_context.h" #include "GPU_shader_interface.h" +namespace blender { +namespace gpu { + +class Batch : public GPUBatch { + public: + Batch(){}; + virtual ~Batch(){}; + + virtual void draw(int v_first, int v_count, int i_first, int i_count) = 0; +}; + +} // namespace gpu +} // namespace blender + void gpu_batch_remove_interface_ref(GPUBatch *batch, const GPUShaderInterface *interface); |