[Bf-blender-cvs] [48690d967a7] master: GPUContext: Move GPUContext to gpu::Context for more consistency

Clément Foucault noreply at git.blender.org
Tue Sep 8 04:15:57 CEST 2020


Commit: 48690d967a7731367cda01ab8dca64e7f4c3f6b5
Author: Clément Foucault
Date:   Tue Sep 8 04:12:12 2020 +0200
Branches: master
https://developer.blender.org/rB48690d967a7731367cda01ab8dca64e7f4c3f6b5

GPUContext: Move GPUContext to gpu::Context for more consistency

This makes the GPUContext follow the same naming convention as the rest
of the module.

Also add a static getter for extra bonus style (no need for casts):
- Context::get()
- GLContext::get()

===================================================================

M	source/blender/gpu/GPU_context.h
M	source/blender/gpu/intern/gpu_backend.hh
M	source/blender/gpu/intern/gpu_batch.cc
M	source/blender/gpu/intern/gpu_capabilities.cc
M	source/blender/gpu/intern/gpu_context.cc
M	source/blender/gpu/intern/gpu_context_private.hh
M	source/blender/gpu/intern/gpu_framebuffer.cc
M	source/blender/gpu/intern/gpu_immediate.cc
M	source/blender/gpu/intern/gpu_matrix.cc
M	source/blender/gpu/intern/gpu_shader.cc
M	source/blender/gpu/intern/gpu_state.cc
M	source/blender/gpu/intern/gpu_texture.cc
M	source/blender/gpu/opengl/gl_backend.hh
M	source/blender/gpu/opengl/gl_batch.cc
M	source/blender/gpu/opengl/gl_context.cc
M	source/blender/gpu/opengl/gl_context.hh
M	source/blender/gpu/opengl/gl_debug.cc
M	source/blender/gpu/opengl/gl_drawlist.cc
M	source/blender/gpu/opengl/gl_framebuffer.cc
M	source/blender/gpu/opengl/gl_immediate.cc
M	source/blender/gpu/opengl/gl_shader.cc
M	source/blender/gpu/opengl/gl_texture.cc
M	source/blender/gpu/opengl/gl_uniform_buffer.cc
M	source/blender/gpu/opengl/gl_vertex_array.cc
M	source/blender/gpu/opengl/gl_vertex_buffer.cc

===================================================================

diff --git a/source/blender/gpu/GPU_context.h b/source/blender/gpu/GPU_context.h
index be7e604fb96..82f13424502 100644
--- a/source/blender/gpu/GPU_context.h
+++ b/source/blender/gpu/GPU_context.h
@@ -32,8 +32,6 @@
 extern "C" {
 #endif
 
-typedef struct GPUContext GPUContext;
-
 typedef enum eGPUBackendType {
   GPU_BACKEND_NONE = 0,
   GPU_BACKEND_OPENGL,
@@ -42,6 +40,9 @@ typedef enum eGPUBackendType {
 void GPU_backend_init(eGPUBackendType backend);
 void GPU_backend_exit(void);
 
+/** Opaque type hiding blender::gpu::Context. */
+typedef struct GPUContext GPUContext;
+
 GPUContext *GPU_context_create(void *ghost_window);
 void GPU_context_discard(GPUContext *);
 
diff --git a/source/blender/gpu/intern/gpu_backend.hh b/source/blender/gpu/intern/gpu_backend.hh
index 1a6a6668b42..04ec82a9213 100644
--- a/source/blender/gpu/intern/gpu_backend.hh
+++ b/source/blender/gpu/intern/gpu_backend.hh
@@ -25,11 +25,11 @@
 
 #pragma once
 
-struct GPUContext;
-
 namespace blender {
 namespace gpu {
 
+class Context;
+
 class Batch;
 class DrawList;
 class FrameBuffer;
@@ -48,7 +48,7 @@ class GPUBackend {
 
   virtual void samplers_update(void) = 0;
 
-  virtual GPUContext *context_alloc(void *ghost_window) = 0;
+  virtual Context *context_alloc(void *ghost_window) = 0;
 
   virtual Batch *batch_alloc(void) = 0;
   virtual DrawList *drawlist_alloc(int list_length) = 0;
diff --git a/source/blender/gpu/intern/gpu_batch.cc b/source/blender/gpu/intern/gpu_batch.cc
index d6f4f223a83..de079a89de7 100644
--- a/source/blender/gpu/intern/gpu_batch.cc
+++ b/source/blender/gpu/intern/gpu_batch.cc
@@ -258,7 +258,7 @@ void GPU_batch_draw_instanced(GPUBatch *batch, int i_count)
 void GPU_batch_draw_advanced(
     GPUBatch *gpu_batch, int v_first, int v_count, int i_first, int i_count)
 {
-  BLI_assert(GPU_context_active_get()->shader != NULL);
+  BLI_assert(Context::get()->shader != NULL);
   Batch *batch = static_cast<Batch *>(gpu_batch);
 
   if (v_count == 0) {
diff --git a/source/blender/gpu/intern/gpu_capabilities.cc b/source/blender/gpu/intern/gpu_capabilities.cc
index 0ee25ea2569..a79ce27ba63 100644
--- a/source/blender/gpu/intern/gpu_capabilities.cc
+++ b/source/blender/gpu/intern/gpu_capabilities.cc
@@ -115,13 +115,13 @@ bool GPU_mem_stats_supported(void)
 
 void GPU_mem_stats_get(int *totalmem, int *freemem)
 {
-  GPU_context_active_get()->memory_statistics_get(totalmem, freemem);
+  Context::get()->memory_statistics_get(totalmem, freemem);
 }
 
 /* Return support for the active context + window. */
 bool GPU_stereo_quadbuffer_support(void)
 {
-  return GPU_context_active_get()->front_right != nullptr;
+  return Context::get()->front_right != nullptr;
 }
 
 /** \} */
diff --git a/source/blender/gpu/intern/gpu_context.cc b/source/blender/gpu/intern/gpu_context.cc
index 8ebd49a658e..188225b3eed 100644
--- a/source/blender/gpu/intern/gpu_context.cc
+++ b/source/blender/gpu/intern/gpu_context.cc
@@ -54,20 +54,22 @@
 
 using namespace blender::gpu;
 
-static thread_local GPUContext *active_ctx = NULL;
+static thread_local Context *active_ctx = NULL;
 
 /* -------------------------------------------------------------------- */
-/** \name GPUContext methods
+/** \name gpu::Context methods
  * \{ */
 
-GPUContext::GPUContext()
+namespace blender::gpu {
+
+Context::Context()
 {
   thread_ = pthread_self();
   is_active_ = false;
   matrix_state = GPU_matrix_state_create();
 }
 
-GPUContext::~GPUContext()
+Context::~Context()
 {
   GPU_matrix_state_discard(matrix_state);
   delete state_manager;
@@ -78,11 +80,18 @@ GPUContext::~GPUContext()
   delete imm;
 }
 
-bool GPUContext::is_active_on_thread(void)
+bool Context::is_active_on_thread(void)
 {
   return (this == active_ctx) && pthread_equal(pthread_self(), thread_);
 }
 
+Context *Context::get(void)
+{
+  return active_ctx;
+}
+
+}  // namespace blender::gpu
+
 /** \} */
 
 /* -------------------------------------------------------------------- */
@@ -94,22 +103,25 @@ GPUContext *GPU_context_create(void *ghost_window)
     GPU_backend_init(GPU_BACKEND_OPENGL);
   }
 
-  GPUContext *ctx = GPUBackend::get()->context_alloc(ghost_window);
+  Context *ctx = GPUBackend::get()->context_alloc(ghost_window);
 
-  GPU_context_active_set(ctx);
-  return ctx;
+  GPU_context_active_set(wrap(ctx));
+  return wrap(ctx);
 }
 
 /* to be called after GPU_context_active_set(ctx_to_destroy) */
-void GPU_context_discard(GPUContext *ctx)
+void GPU_context_discard(GPUContext *ctx_)
 {
+  Context *ctx = unwrap(ctx_);
   delete ctx;
   active_ctx = NULL;
 }
 
 /* ctx can be NULL */
-void GPU_context_active_set(GPUContext *ctx)
+void GPU_context_active_set(GPUContext *ctx_)
 {
+  Context *ctx = unwrap(ctx_);
+
   if (active_ctx) {
     active_ctx->deactivate();
   }
@@ -123,13 +135,7 @@ void GPU_context_active_set(GPUContext *ctx)
 
 GPUContext *GPU_context_active_get(void)
 {
-  return active_ctx;
-}
-
-struct GPUMatrixState *gpu_context_active_matrix_state_get()
-{
-  BLI_assert(active_ctx);
-  return active_ctx->matrix_state;
+  return wrap(Context::get());
 }
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/gpu/intern/gpu_context_private.hh b/source/blender/gpu/intern/gpu_context_private.hh
index 5344cc6fb87..bc07bea4bb1 100644
--- a/source/blender/gpu/intern/gpu_context_private.hh
+++ b/source/blender/gpu/intern/gpu_context_private.hh
@@ -34,22 +34,20 @@
 #include "gpu_shader_private.hh"
 #include "gpu_state_private.hh"
 
-#include <mutex>
 #include <pthread.h>
-#include <string.h>
-#include <unordered_set>
-#include <vector>
 
 struct GPUMatrixState;
 
-struct GPUContext {
+namespace blender::gpu {
+
+class Context {
  public:
   /** State management */
-  blender::gpu::Shader *shader = NULL;
-  blender::gpu::FrameBuffer *active_fb = NULL;
+  Shader *shader = NULL;
+  FrameBuffer *active_fb = NULL;
   GPUMatrixState *matrix_state = NULL;
-  blender::gpu::GPUStateManager *state_manager = NULL;
-  blender::gpu::Immediate *imm = NULL;
+  GPUStateManager *state_manager = NULL;
+  Immediate *imm = NULL;
 
   /**
    * All 4 window frame-buffers.
@@ -58,10 +56,10 @@ struct GPUContext {
    * Front frame-buffers contains (in principle, but not always) the last frame color.
    * Default frame-buffer is back_left.
    */
-  blender::gpu::FrameBuffer *back_left = NULL;
-  blender::gpu::FrameBuffer *front_left = NULL;
-  blender::gpu::FrameBuffer *back_right = NULL;
-  blender::gpu::FrameBuffer *front_right = NULL;
+  FrameBuffer *back_left = NULL;
+  FrameBuffer *front_left = NULL;
+  FrameBuffer *back_right = NULL;
+  FrameBuffer *front_right = NULL;
 
  protected:
   /** Thread on which this context is active. */
@@ -71,8 +69,10 @@ struct GPUContext {
   void *ghost_window_;
 
  public:
-  GPUContext();
-  virtual ~GPUContext();
+  Context();
+  virtual ~Context();
+
+  static Context *get(void);
 
   virtual void activate(void) = 0;
   virtual void deactivate(void) = 0;
@@ -85,11 +85,20 @@ struct GPUContext {
   virtual void memory_statistics_get(int *total_mem, int *free_mem) = 0;
 
   bool is_active_on_thread(void);
-
-  MEM_CXX_CLASS_ALLOC_FUNCS("GPUContext")
 };
 
-void gpu_context_active_framebuffer_set(GPUContext *ctx, struct GPUFrameBuffer *fb);
-struct GPUFrameBuffer *gpu_context_active_framebuffer_get(GPUContext *ctx);
-
-struct GPUMatrixState *gpu_context_active_matrix_state_get(void);
+/* Syntacting suggar. */
+static inline GPUContext *wrap(Context *ctx)
+{
+  return reinterpret_cast<GPUContext *>(ctx);
+}
+static inline Context *unwrap(GPUContext *ctx)
+{
+  return reinterpret_cast<Context *>(ctx);
+}
+static inline const Context *unwrap(const GPUContext *ctx)
+{
+  return reinterpret_cast<const Context *>(ctx);
+}
+
+}  // namespace blender::gpu
\ No newline at end of file
diff --git a/source/blender/gpu/intern/gpu_framebuffer.cc b/source/blender/gpu/intern/gpu_framebuffer.cc
index e548eb241cf..88779dead28 100644
--- a/source/blender/gpu/intern/gpu_framebuffer.cc
+++ b/source/blender/gpu/intern/gpu_framebuffer.cc
@@ -224,7 +224,7 @@ void GPU_framebuffer_bind_no_srgb(GPUFrameBuffer *gpu_fb)
  */
 void GPU_backbuffer_bind(eGPUBackBuffer buffer)
 {
-  GPUContext *ctx = GPU_context_active_get();
+  Context *ctx = Context::get();
 
   if (buffer == GPU_BACKBUFFER_LEFT) {
     ctx->back_left->bind(false);
@@ -236,19 +236,19 @@ void GPU_backbuffer_bind(eGPUBackBuffer buffer)
 
 void GPU_framebuffer_restore(void)
 {
-  GPU_context_active_get()->back_left->bind(false);
+  Context::get()->back_left->bind(false);
 }
 
 GPUFrameBuffer *GPU_framebuffer_active_get(void)
 {
-  GPUContext *ctx = GPU_context_active_get();
+  Context *ctx = Context::get();
   return wrap(ctx ? ctx->active_fb : NULL);
 }
 
 /* Returns the default frame-buffer. Will always exists even if it's just a dummy. */
 GPUFrameBuffer *GPU_framebuffer_back_get(void)
 {
-  GPUContext *ctx = GPU_context_active_get();
+  Context *ctx = Context::get();
   return wrap(ctx ? ctx->back_left : NULL);
 }
 
@@ -381,13 +381,13 @@ void GPU_framebuffer_multi_clear(GPUFrameBuffer *gpu_fb, const float (*clear_col
 void GPU_clear_color(float red, float green, float blue, float alpha)
 {
   float clear_col[4] = {red, green, blue, alpha};
-  GPU_context_active_get()->active_fb->clear(GPU_COLOR_BIT, clear_col, 0.0f, 0x0);
+  Context::get()->active_fb->clear(GPU_COLOR_BIT, clear_col, 0.0f, 0x0);
 }
 
 void GPU_clear_depth(float depth)
 {
   float clear_col[4] = {0};
-  GPU_context_active_get()->active_fb->clear(GPU_DEPTH_BIT, clear_col, depth, 0x0);
+  Context::get()->active_fb->clear(GPU_DEPTH_BIT, clear_col, depth, 0x0);
 }
 
 void GPU_framebuffer_read_depth(
@@ -416,7 +416,7 @@ void GPU_frontbuffer_read_pixels(
     int x, int y, int w, int h, int channels, eGPUDataFormat format, void *data)
 {
   int rect[4] = {x, y, w, h};
-  GPU_context_active_get()->front_left->read(GPU_COLOR_BIT, format, rect, channels, 0, data);
+  Context::get()->front_left->read(GPU_COLOR_BIT, format, rect, channels, 0, data);
 }
 
 /* read_slot and write_slot are only used for color buffers. */
@@ -431,7 +431,7 @@ void GPU_framebuffer_blit(GPUFrameBuffer *gpufb_read,
   FrameBuffer *fb_write = unwrap(gpufb_write);
   BLI_assert(blit_buffers != 0);
 
-  FrameB

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list