Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2017-03-19 00:14:53 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-03-20 17:19:03 +0300
commitfc72a2ff4b470b1563d8480d231ca5b1b03a7983 (patch)
tree3fa13f6ff2c3b4fd3610992318171cb1799eebfd /source
parent69a17bce1a29f89859d0148733e8f1086b033432 (diff)
Draw module: code style, encapsulate static vars
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/clay/clay.c206
-rw-r--r--source/blender/draw/engines/eevee/eevee.c8
-rw-r--r--source/blender/draw/modes/edit_armature_mode.c25
-rw-r--r--source/blender/draw/modes/edit_curve_mode.c82
-rw-r--r--source/blender/draw/modes/edit_lattice_mode.c82
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c293
-rw-r--r--source/blender/draw/modes/edit_metaball_mode.c82
-rw-r--r--source/blender/draw/modes/edit_surface_mode.c82
-rw-r--r--source/blender/draw/modes/edit_text_mode.c82
-rw-r--r--source/blender/draw/modes/object_mode.c349
-rw-r--r--source/blender/draw/modes/paint_texture_mode.c82
-rw-r--r--source/blender/draw/modes/paint_vertex_mode.c82
-rw-r--r--source/blender/draw/modes/paint_weight_mode.c82
-rw-r--r--source/blender/draw/modes/particle_mode.c76
-rw-r--r--source/blender/draw/modes/pose_mode.c76
-rw-r--r--source/blender/draw/modes/sculpt_mode.c76
16 files changed, 909 insertions, 856 deletions
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index a40805a50c1..6a7e8d10f9c 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -44,7 +44,7 @@ extern char datatoc_clay_vert_glsl[];
extern char datatoc_ssao_alchemy_glsl[];
extern char datatoc_ssao_groundtruth_glsl[];
-/* Storage */
+/* *********** LISTS *********** */
/* UBOs data needs to be 16 byte aligned (size of vec4) */
/* Reminder : float, int, bool are 4 bytes */
@@ -64,24 +64,6 @@ typedef struct CLAY_UBO_Storage {
CLAY_UBO_Material materials[MAX_CLAY_MAT];
} CLAY_UBO_Storage;
-static struct CLAY_data {
- /* Depth Pre Pass */
- struct GPUShader *depth_sh;
- /* Shading Pass */
- struct GPUShader *clay_sh;
-
- /* Matcap textures */
- struct GPUTexture *matcap_array;
- float matcap_colors[24][3];
-
- /* Ssao */
- float winmat[4][4];
- float viewvecs[3][4];
- float ssao_params[4];
- struct GPUTexture *jitter_tx;
- struct GPUTexture *sampling_tx;
-} data = {NULL};
-
/* GPUViewport.storage
* Is freed everytime the viewport engine changes */
typedef struct CLAY_Storage {
@@ -91,9 +73,6 @@ typedef struct CLAY_Storage {
DRWShadingGroup *shgrps[MAX_CLAY_MAT];
} CLAY_Storage;
-/* Just a serie of int from 0 to MAX_CLAY_MAT-1 */
-static int ubo_mat_idxs[MAX_CLAY_MAT] = {0};
-
/* keep it under MAX_STORAGE */
typedef struct CLAY_StorageList {
struct CLAY_Storage *storage;
@@ -132,6 +111,38 @@ typedef struct CLAY_Data {
CLAY_StorageList *stl;
} CLAY_Data;
+/* *********** STATIC *********** */
+
+static struct {
+ /* Depth Pre Pass */
+ struct GPUShader *depth_sh;
+ /* Shading Pass */
+ struct GPUShader *clay_sh;
+
+ /* Matcap textures */
+ struct GPUTexture *matcap_array;
+ float matcap_colors[24][3];
+
+ /* Ssao */
+ float winmat[4][4];
+ float viewvecs[3][4];
+ float ssao_params[4];
+ struct GPUTexture *jitter_tx;
+ struct GPUTexture *sampling_tx;
+
+ /* Just a serie of int from 0 to MAX_CLAY_MAT-1 */
+ int ubo_mat_idxs[MAX_CLAY_MAT];
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ DRWShadingGroup *depth_shgrp;
+ DRWShadingGroup *depth_shgrp_select;
+ DRWShadingGroup *depth_shgrp_active;
+ DRWShadingGroup *depth_shgrp_cull;
+ DRWShadingGroup *depth_shgrp_cull_select;
+ DRWShadingGroup *depth_shgrp_cull_active;
+ CLAY_Data *vedata;
+} g_data = {NULL}; /* Transient data */
//#define GTAO
@@ -148,15 +159,15 @@ static void add_icon_to_rect(PreviewImage *prv, float *final_rect, int layer)
/* Find overall color */
for (int y = 0; y < 4; ++y) {
for (int x = 0; x < 4; ++x) {
- data.matcap_colors[layer][0] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 0];
- data.matcap_colors[layer][1] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 1];
- data.matcap_colors[layer][2] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 2];
+ e_data.matcap_colors[layer][0] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 0];
+ e_data.matcap_colors[layer][1] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 1];
+ e_data.matcap_colors[layer][2] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 2];
}
}
- data.matcap_colors[layer][0] /= 16.0f * 2.0f; /* the * 2 is to darken for shadows */
- data.matcap_colors[layer][1] /= 16.0f * 2.0f;
- data.matcap_colors[layer][2] /= 16.0f * 2.0f;
+ e_data.matcap_colors[layer][0] /= 16.0f * 2.0f; /* the * 2 is to darken for shadows */
+ e_data.matcap_colors[layer][1] /= 16.0f * 2.0f;
+ e_data.matcap_colors[layer][2] /= 16.0f * 2.0f;
}
static struct GPUTexture *load_matcaps(PreviewImage *prv[24], int nbr)
@@ -273,13 +284,13 @@ RenderEngineSettings *CLAY_render_settings_create(void)
static void CLAY_engine_init(void)
{
- CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_StorageList *stl = vedata->stl;
- CLAY_TextureList *txl = vedata->txl;
- CLAY_FramebufferList *fbl = vedata->fbl;
+ CLAY_Data *ved = DRW_viewport_engine_data_get("Clay");
+ CLAY_StorageList *stl = ved->stl;
+ CLAY_TextureList *txl = ved->txl;
+ CLAY_FramebufferList *fbl = ved->fbl;
/* Create Texture Array */
- if (!data.matcap_array) {
+ if (!e_data.matcap_array) {
PreviewImage *prv[24]; /* For now use all of the 24 internal matcaps */
/* TODO only load used matcaps */
@@ -308,27 +319,27 @@ static void CLAY_engine_init(void)
prv[22] = UI_icon_to_preview(ICON_MATCAP_23);
prv[23] = UI_icon_to_preview(ICON_MATCAP_24);
- data.matcap_array = load_matcaps(prv, 24);
+ e_data.matcap_array = load_matcaps(prv, 24);
}
/* AO Jitter */
- if (!data.jitter_tx) {
- data.jitter_tx = create_jitter_texture();
+ if (!e_data.jitter_tx) {
+ e_data.jitter_tx = create_jitter_texture();
}
/* AO Samples */
/* TODO use hammersley sequence */
- if (!data.sampling_tx) {
- data.sampling_tx = create_spiral_sample_texture(500);
+ if (!e_data.sampling_tx) {
+ e_data.sampling_tx = create_spiral_sample_texture(500);
}
/* Depth prepass */
- if (!data.depth_sh) {
- data.depth_sh = DRW_shader_create_3D_depth_only();
+ if (!e_data.depth_sh) {
+ e_data.depth_sh = DRW_shader_create_3D_depth_only();
}
/* Shading pass */
- if (!data.clay_sh) {
+ if (!e_data.clay_sh) {
DynStr *ds = BLI_dynstr_new();
const char *max_mat =
"#define MAX_MATERIAL 512\n"
@@ -346,7 +357,7 @@ static void CLAY_engine_init(void)
matcap_with_ao = BLI_dynstr_get_cstring(ds);
- data.clay_sh = DRW_shader_create(datatoc_clay_vert_glsl, NULL, matcap_with_ao, max_mat);
+ e_data.clay_sh = DRW_shader_create(datatoc_clay_vert_glsl, NULL, matcap_with_ao, max_mat);
BLI_dynstr_free(ds);
MEM_freeN(matcap_with_ao);
@@ -360,10 +371,10 @@ static void CLAY_engine_init(void)
stl->mat_ubo = DRW_uniformbuffer_create(sizeof(CLAY_UBO_Storage), NULL);
}
- if (ubo_mat_idxs[1] == 0) {
+ if (e_data.ubo_mat_idxs[1] == 0) {
/* Just int to have pointers to them */
for (int i = 0; i < MAX_CLAY_MAT; ++i) {
- ubo_mat_idxs[i] = i;
+ e_data.ubo_mat_idxs[i] = i;
}
}
@@ -392,14 +403,14 @@ static void CLAY_engine_init(void)
DRW_get_dfdy_factors(dfdyfacs);
- data.ssao_params[0] = settings->ssao_samples;
- data.ssao_params[1] = size[0] / 64.0;
- data.ssao_params[2] = size[1] / 64.0;
- data.ssao_params[3] = dfdyfacs[1]; /* dfdy sign for offscreen */
+ e_data.ssao_params[0] = settings->ssao_samples;
+ e_data.ssao_params[1] = size[0] / 64.0;
+ e_data.ssao_params[2] = size[1] / 64.0;
+ e_data.ssao_params[3] = dfdyfacs[1]; /* dfdy sign for offscreen */
/* invert the view matrix */
- DRW_viewport_matrix_get(data.winmat, DRW_MAT_WIN);
- invert_m4_m4(invproj, data.winmat);
+ DRW_viewport_matrix_get(e_data.winmat, DRW_MAT_WIN);
+ invert_m4_m4(invproj, e_data.winmat);
/* convert the view vectors to view space */
for (i = 0; i < 3; i++) {
@@ -410,19 +421,19 @@ static void CLAY_engine_init(void)
mul_v3_fl(viewvecs[i], 1.0f / viewvecs[i][2]);
viewvecs[i][3] = 1.0;
- copy_v4_v4(data.viewvecs[i], viewvecs[i]);
+ copy_v4_v4(e_data.viewvecs[i], viewvecs[i]);
}
/* we need to store the differences */
- data.viewvecs[1][0] -= data.viewvecs[0][0];
- data.viewvecs[1][1] = data.viewvecs[2][1] - data.viewvecs[0][1];
+ e_data.viewvecs[1][0] -= e_data.viewvecs[0][0];
+ e_data.viewvecs[1][1] = e_data.viewvecs[2][1] - e_data.viewvecs[0][1];
/* calculate a depth offset as well */
if (!is_persp) {
float vec_far[] = {-1.0f, -1.0f, 1.0f, 1.0f};
mul_m4_v4(invproj, vec_far);
mul_v3_fl(vec_far, 1.0f / vec_far[3]);
- data.viewvecs[1][2] = vec_far[2] - data.viewvecs[0][2];
+ e_data.viewvecs[1][2] = vec_far[2] - e_data.viewvecs[0][2];
}
}
}
@@ -433,21 +444,21 @@ static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *material_id)
CLAY_TextureList *txl = vedata->txl;
const int depthloc = 0, matcaploc = 1, jitterloc = 2, sampleloc = 3;
- DRWShadingGroup *grp = DRW_shgroup_create(data.clay_sh, pass);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.clay_sh, pass);
DRW_shgroup_uniform_vec2(grp, "screenres", DRW_viewport_size_get(), 1);
DRW_shgroup_uniform_buffer(grp, "depthtex", &txl->depth_dup, depthloc);
- DRW_shgroup_uniform_texture(grp, "matcaps", data.matcap_array, matcaploc);
- DRW_shgroup_uniform_mat4(grp, "WinMatrix", (float *)data.winmat);
- DRW_shgroup_uniform_vec4(grp, "viewvecs", (float *)data.viewvecs, 3);
- DRW_shgroup_uniform_vec4(grp, "ssao_params", data.ssao_params, 1);
- DRW_shgroup_uniform_vec3(grp, "matcaps_color", (float *)data.matcap_colors, 24);
+ DRW_shgroup_uniform_texture(grp, "matcaps", e_data.matcap_array, matcaploc);
+ DRW_shgroup_uniform_mat4(grp, "WinMatrix", (float *)e_data.winmat);
+ DRW_shgroup_uniform_vec4(grp, "viewvecs", (float *)e_data.viewvecs, 3);
+ DRW_shgroup_uniform_vec4(grp, "ssao_params", e_data.ssao_params, 1);
+ DRW_shgroup_uniform_vec3(grp, "matcaps_color", (float *)e_data.matcap_colors, 24);
DRW_shgroup_uniform_int(grp, "mat_id", material_id, 1);
#ifndef GTAO
- DRW_shgroup_uniform_texture(grp, "ssao_jitter", data.jitter_tx, jitterloc);
- DRW_shgroup_uniform_texture(grp, "ssao_samples", data.sampling_tx, sampleloc);
+ DRW_shgroup_uniform_texture(grp, "ssao_jitter", e_data.jitter_tx, jitterloc);
+ DRW_shgroup_uniform_texture(grp, "ssao_samples", e_data.sampling_tx, sampleloc);
#endif
return grp;
@@ -586,7 +597,7 @@ static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl,
ssao_attenuation, matcap_icon);
if (shgrps[id] == NULL) {
- shgrps[id] = CLAY_shgroup_create(psl->clay_pass, &ubo_mat_idxs[id]);
+ shgrps[id] = CLAY_shgroup_create(psl->clay_pass, &e_data.ubo_mat_idxs[id]);
/* if it's the first shgrp, pass bind the material UBO */
if (stl->storage->ubo_current_id == 1) {
DRW_shgroup_uniform_block(shgrps[0], "material_block", stl->mat_ubo, 0);
@@ -596,38 +607,31 @@ static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl,
return shgrps[id];
}
-static DRWShadingGroup *depth_shgrp;
-static DRWShadingGroup *depth_shgrp_select;
-static DRWShadingGroup *depth_shgrp_active;
-static DRWShadingGroup *depth_shgrp_cull;
-static DRWShadingGroup *depth_shgrp_cull_select;
-static DRWShadingGroup *depth_shgrp_cull_active;
-
static void CLAY_cache_init(void)
{
- CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_PassList *psl = vedata->psl;
- CLAY_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("Clay");
+ CLAY_PassList *psl = g_data.vedata->psl;
+ CLAY_StorageList *stl = g_data.vedata->stl;
/* Depth Pass */
{
psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
- depth_shgrp = DRW_shgroup_create(data.depth_sh, psl->depth_pass);
+ g_data.depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
- depth_shgrp_select = DRW_shgroup_create(data.depth_sh, psl->depth_pass);
- DRW_shgroup_state_set(depth_shgrp_select, DRW_STATE_WRITE_STENCIL_SELECT);
+ g_data.depth_shgrp_select = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
+ DRW_shgroup_state_set(g_data.depth_shgrp_select, DRW_STATE_WRITE_STENCIL_SELECT);
- depth_shgrp_active = DRW_shgroup_create(data.depth_sh, psl->depth_pass);
- DRW_shgroup_state_set(depth_shgrp_active, DRW_STATE_WRITE_STENCIL_ACTIVE);
+ g_data.depth_shgrp_active = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
+ DRW_shgroup_state_set(g_data.depth_shgrp_active, DRW_STATE_WRITE_STENCIL_ACTIVE);
psl->depth_pass_cull = DRW_pass_create("Depth Pass Cull", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK);
- depth_shgrp_cull = DRW_shgroup_create(data.depth_sh, psl->depth_pass_cull);
+ g_data.depth_shgrp_cull = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
- depth_shgrp_cull_select = DRW_shgroup_create(data.depth_sh, psl->depth_pass_cull);
- DRW_shgroup_state_set(depth_shgrp_cull_select, DRW_STATE_WRITE_STENCIL_SELECT);
+ g_data.depth_shgrp_cull_select = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
+ DRW_shgroup_state_set(g_data.depth_shgrp_cull_select, DRW_STATE_WRITE_STENCIL_SELECT);
- depth_shgrp_cull_active = DRW_shgroup_create(data.depth_sh, psl->depth_pass_cull);
- DRW_shgroup_state_set(depth_shgrp_cull_active, DRW_STATE_WRITE_STENCIL_ACTIVE);
+ g_data.depth_shgrp_cull_active = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
+ DRW_shgroup_state_set(g_data.depth_shgrp_cull_active, DRW_STATE_WRITE_STENCIL_ACTIVE);
}
/* Clay Pass */
@@ -640,9 +644,8 @@ static void CLAY_cache_init(void)
static void CLAY_cache_populate(Object *ob)
{
- CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_PassList *psl = vedata->psl;
- CLAY_StorageList *stl = vedata->stl;
+ CLAY_PassList *psl = g_data.vedata->psl;
+ CLAY_StorageList *stl = g_data.vedata->stl;
struct Batch *geom;
DRWShadingGroup *clay_shgrp;
@@ -660,11 +663,11 @@ static void CLAY_cache_populate(Object *ob)
/* Depth Prepass */
/* waiting for proper flag */
// if ((ob->base_flag & BASE_ACTIVE) != 0)
- // DRW_shgroup_call_add((do_cull) ? depth_shgrp_cull_active : depth_shgrp_active, geom, ob->obmat);
+ // DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull_active : g_data.depth_shgrp_active, geom, ob->obmat);
if ((ob->base_flag & BASE_SELECTED) != 0)
- DRW_shgroup_call_add((do_cull) ? depth_shgrp_cull_select : depth_shgrp_select, geom, ob->obmat);
+ DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull_select : g_data.depth_shgrp_select, geom, ob->obmat);
else
- DRW_shgroup_call_add((do_cull) ? depth_shgrp_cull : depth_shgrp, geom, ob->obmat);
+ DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull : g_data.depth_shgrp, geom, ob->obmat);
/* Shading */
clay_shgrp = CLAY_object_shgrp_get(ob, stl, psl);
@@ -674,17 +677,16 @@ static void CLAY_cache_populate(Object *ob)
static void CLAY_cache_finish(void)
{
- CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_StorageList *stl = vedata->stl;
+ CLAY_StorageList *stl = g_data.vedata->stl;
DRW_uniformbuffer_update(stl->mat_ubo, &stl->storage->mat_storage);
}
static void CLAY_draw_scene(void)
{
- CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_PassList *psl = vedata->psl;
- CLAY_FramebufferList *fbl = vedata->fbl;
+ CLAY_Data *ved = DRW_viewport_engine_data_get("Clay");
+ CLAY_PassList *psl = ved->psl;
+ CLAY_FramebufferList *fbl = ved->fbl;
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
/* Pass 1 : Depth pre-pass */
@@ -716,17 +718,17 @@ static void CLAY_collection_settings_create(RenderEngine *UNUSED(engine), Collec
static void CLAY_engine_free(void)
{
- if (data.clay_sh) {
- DRW_shader_free(data.clay_sh);
+ if (e_data.clay_sh) {
+ DRW_shader_free(e_data.clay_sh);
}
- if (data.matcap_array) {
- DRW_texture_free(data.matcap_array);
+ if (e_data.matcap_array) {
+ DRW_texture_free(e_data.matcap_array);
}
- if (data.jitter_tx) {
- DRW_texture_free(data.jitter_tx);
+ if (e_data.jitter_tx) {
+ DRW_texture_free(e_data.jitter_tx);
}
- if (data.sampling_tx) {
- DRW_texture_free(data.sampling_tx);
+ if (e_data.sampling_tx) {
+ DRW_texture_free(e_data.sampling_tx);
}
}
diff --git a/source/blender/draw/engines/eevee/eevee.c b/source/blender/draw/engines/eevee/eevee.c
index c85e35c904d..2f058e3e6e3 100644
--- a/source/blender/draw/engines/eevee/eevee.c
+++ b/source/blender/draw/engines/eevee/eevee.c
@@ -56,10 +56,10 @@ extern char datatoc_tonemap_frag_glsl[];
static void EEVEE_engine_init(void)
{
- g_data.vedata = DRW_viewport_engine_data_get(EEVEE_ENGINE);
- EEVEE_TextureList *txl = g_data.vedata->txl;
- EEVEE_FramebufferList *fbl = g_data.vedata->fbl;
- EEVEE_StorageList *stl = g_data.vedata->stl;
+ EEVEE_Data *ved = DRW_viewport_engine_data_get(EEVEE_ENGINE);
+ EEVEE_TextureList *txl = ved->txl;
+ EEVEE_FramebufferList *fbl = ved->fbl;
+ EEVEE_StorageList *stl = ved->stl;
DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_32};
diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c
index d6193986c7f..c56bbe519da 100644
--- a/source/blender/draw/modes/edit_armature_mode.c
+++ b/source/blender/draw/modes/edit_armature_mode.c
@@ -32,6 +32,9 @@
#include "draw_mode_engines.h"
+extern GlobalsUboStorage ts;
+
+/* *********** LISTS *********** */
/* keep it under MAX_PASSES */
typedef struct EDIT_ARMATURE_PassList {
struct DRWPass *bone_solid;
@@ -47,16 +50,19 @@ typedef struct EDIT_ARMATURE_Data {
void *stl;
} EDIT_ARMATURE_Data;
-static DRWShadingGroup *relationship_lines;
+/* *********** STATIC *********** */
-extern GlobalsUboStorage ts;
+static struct {
+ DRWShadingGroup *relationship_lines;
+ EDIT_ARMATURE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
-static EDIT_ARMATURE_Data *vedata;
+/* *********** FUNCTIONS *********** */
static void EDIT_ARMATURE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditArmatureMode");
- EDIT_ARMATURE_PassList *psl = vedata->psl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditArmatureMode");
+ EDIT_ARMATURE_PassList *psl = g_data.vedata->psl;
{
/* Solid bones */
@@ -76,20 +82,19 @@ static void EDIT_ARMATURE_cache_init(void)
psl->relationship = DRW_pass_create("Bone Relationship Pass", state);
/* Relationship Lines */
- relationship_lines = shgroup_dynlines_uniform_color(psl->relationship, ts.colorWire);
- DRW_shgroup_state_set(relationship_lines, DRW_STATE_STIPPLE_3);
+ g_data.relationship_lines = shgroup_dynlines_uniform_color(psl->relationship, ts.colorWire);
+ DRW_shgroup_state_set(g_data.relationship_lines, DRW_STATE_STIPPLE_3);
}
-
}
static void EDIT_ARMATURE_cache_populate(Object *ob)
{
bArmature *arm = ob->data;
- EDIT_ARMATURE_PassList *psl = vedata->psl;
+ EDIT_ARMATURE_PassList *psl = g_data.vedata->psl;
if (ob->type == OB_ARMATURE) {
if (arm->edbo) {
- DRW_shgroup_armature_edit(ob, psl->bone_solid, psl->bone_wire, relationship_lines);
+ DRW_shgroup_armature_edit(ob, psl->bone_solid, psl->bone_wire, g_data.relationship_lines);
}
}
}
diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c
index 49b48396613..745342a4f19 100644
--- a/source/blender/draw/modes/edit_curve_mode.c
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct EDIT_CURVE_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in EDIT_CURVE_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in EDIT_CURVE_engine_init();
- * free in EDIT_CURVE_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static EDIT_CURVE_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_CURVE_engine_init();
+ * free in EDIT_CURVE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ EDIT_CURVE_Data *vedata;
+
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_CURVE_cache_populate() */
+ DRWShadingGroup *group;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static EDIT_CURVE_Data *vedata;
* (Optional) */
static void EDIT_CURVE_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditCurveMode");
- EDIT_CURVE_TextureList *txl = vedata->txl;
- EDIT_CURVE_FramebufferList *fbl = vedata->fbl;
- EDIT_CURVE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditCurveMode");
+ EDIT_CURVE_TextureList *txl = g_data.vedata->txl;
+ EDIT_CURVE_FramebufferList *fbl = g_data.vedata->fbl;
+ EDIT_CURVE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void EDIT_CURVE_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void EDIT_CURVE_engine_init(void)
* Assume that all Passes are NULL */
static void EDIT_CURVE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditCurveMode");
- EDIT_CURVE_PassList *psl = vedata->psl;
- EDIT_CURVE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditCurveMode");
+ EDIT_CURVE_PassList *psl = g_data.vedata->psl;
+ EDIT_CURVE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void EDIT_CURVE_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void EDIT_CURVE_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void EDIT_CURVE_cache_populate(Object *ob)
{
- EDIT_CURVE_PassList *psl = vedata->psl;
- EDIT_CURVE_StorageList *stl = vedata->stl;
+ EDIT_CURVE_PassList *psl = g_data.vedata->psl;
+ EDIT_CURVE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void EDIT_CURVE_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void EDIT_CURVE_cache_finish(void)
{
- EDIT_CURVE_PassList *psl = vedata->psl;
- EDIT_CURVE_StorageList *stl = vedata->stl;
+ EDIT_CURVE_PassList *psl = g_data.vedata->psl;
+ EDIT_CURVE_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void EDIT_CURVE_draw_scene(void)
{
EDIT_CURVE_Data *ved = DRW_viewport_engine_data_get("EditCurveMode");
EDIT_CURVE_PassList *psl = ved->psl;
- EDIT_CURVE_FramebufferList *fbl = vedata->fbl;
+ EDIT_CURVE_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/edit_lattice_mode.c b/source/blender/draw/modes/edit_lattice_mode.c
index e8bf1d92701..30603c2bfc3 100644
--- a/source/blender/draw/modes/edit_lattice_mode.c
+++ b/source/blender/draw/modes/edit_lattice_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct EDIT_LATTICE_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in EDIT_LATTICE_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in EDIT_LATTICE_engine_init();
- * free in EDIT_LATTICE_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static EDIT_LATTICE_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_LATTICE_engine_init();
+ * free in EDIT_LATTICE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_LATTICE_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ EDIT_LATTICE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static EDIT_LATTICE_Data *vedata;
* (Optional) */
static void EDIT_LATTICE_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditLatticeMode");
- EDIT_LATTICE_TextureList *txl = vedata->txl;
- EDIT_LATTICE_FramebufferList *fbl = vedata->fbl;
- EDIT_LATTICE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditLatticeMode");
+ EDIT_LATTICE_TextureList *txl = g_data.vedata->txl;
+ EDIT_LATTICE_FramebufferList *fbl = g_data.vedata->fbl;
+ EDIT_LATTICE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void EDIT_LATTICE_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void EDIT_LATTICE_engine_init(void)
* Assume that all Passes are NULL */
static void EDIT_LATTICE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditLatticeMode");
- EDIT_LATTICE_PassList *psl = vedata->psl;
- EDIT_LATTICE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditLatticeMode");
+ EDIT_LATTICE_PassList *psl = g_data.vedata->psl;
+ EDIT_LATTICE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void EDIT_LATTICE_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {1.0f, 0.0f, 0.0f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void EDIT_LATTICE_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void EDIT_LATTICE_cache_populate(Object *ob)
{
- EDIT_LATTICE_PassList *psl = vedata->psl;
- EDIT_LATTICE_StorageList *stl = vedata->stl;
+ EDIT_LATTICE_PassList *psl = g_data.vedata->psl;
+ EDIT_LATTICE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void EDIT_LATTICE_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void EDIT_LATTICE_cache_finish(void)
{
- EDIT_LATTICE_PassList *psl = vedata->psl;
- EDIT_LATTICE_StorageList *stl = vedata->stl;
+ EDIT_LATTICE_PassList *psl = g_data.vedata->psl;
+ EDIT_LATTICE_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void EDIT_LATTICE_draw_scene(void)
{
EDIT_LATTICE_Data *ved = DRW_viewport_engine_data_get("EditLatticeMode");
EDIT_LATTICE_PassList *psl = ved->psl;
- EDIT_LATTICE_FramebufferList *fbl = vedata->fbl;
+ EDIT_LATTICE_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index b0e1dc1d022..fee2a284d64 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -33,6 +33,26 @@
#include "draw_mode_engines.h"
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+extern char datatoc_edit_overlay_frag_glsl[];
+extern char datatoc_edit_overlay_vert_glsl[];
+extern char datatoc_edit_overlay_geom_tri_glsl[];
+extern char datatoc_edit_overlay_geom_edge_glsl[];
+extern char datatoc_edit_overlay_loosevert_vert_glsl[];
+extern char datatoc_edit_overlay_facedot_frag_glsl[];
+extern char datatoc_edit_overlay_facedot_vert_glsl[];
+extern char datatoc_edit_overlay_mix_vert_glsl[];
+extern char datatoc_edit_overlay_mix_frag_glsl[];
+extern char datatoc_edit_overlay_facefill_vert_glsl[];
+extern char datatoc_edit_overlay_facefill_frag_glsl[];
+extern char datatoc_edit_normals_vert_glsl[];
+extern char datatoc_edit_normals_geom_glsl[];
+
+extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+
+/* *********** LISTS *********** */
/* keep it under MAX_PASSES */
typedef struct EDIT_MESH_PassList {
struct DRWPass *depth_hidden_wire;
@@ -62,61 +82,52 @@ typedef struct EDIT_MESH_Data {
void *stl;
} EDIT_MESH_Data;
-static DRWShadingGroup *depth_shgrp_hidden_wire;
-
-static DRWShadingGroup *fnormals_shgrp;
-static DRWShadingGroup *vnormals_shgrp;
-static DRWShadingGroup *lnormals_shgrp;
-
-static DRWShadingGroup *face_overlay_shgrp;
-static DRWShadingGroup *ledges_overlay_shgrp;
-static DRWShadingGroup *lverts_overlay_shgrp;
-static DRWShadingGroup *facedot_overlay_shgrp;
-
-static DRWShadingGroup *face_occluded_shgrp;
-static DRWShadingGroup *ledges_occluded_shgrp;
-static DRWShadingGroup *lverts_occluded_shgrp;
-static DRWShadingGroup *facedot_occluded_shgrp;
-static DRWShadingGroup *facefill_occluded_shgrp;
-
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-static struct GPUShader *overlay_tri_sh = NULL;
-static struct GPUShader *overlay_tri_fast_sh = NULL;
-static struct GPUShader *overlay_tri_vcol_sh = NULL;
-static struct GPUShader *overlay_tri_vcol_fast_sh = NULL;
-static struct GPUShader *overlay_edge_sh = NULL;
-static struct GPUShader *overlay_edge_vcol_sh = NULL;
-static struct GPUShader *overlay_vert_sh = NULL;
-static struct GPUShader *overlay_facedot_sh = NULL;
-static struct GPUShader *overlay_mix_sh = NULL;
-static struct GPUShader *overlay_facefill_sh = NULL;
-static struct GPUShader *normals_face_sh = NULL;
-static struct GPUShader *normals_sh = NULL;
-static struct GPUShader *depth_sh = NULL;
-
-extern char datatoc_edit_overlay_frag_glsl[];
-extern char datatoc_edit_overlay_vert_glsl[];
-extern char datatoc_edit_overlay_geom_tri_glsl[];
-extern char datatoc_edit_overlay_geom_edge_glsl[];
-extern char datatoc_edit_overlay_loosevert_vert_glsl[];
-extern char datatoc_edit_overlay_facedot_frag_glsl[];
-extern char datatoc_edit_overlay_facedot_vert_glsl[];
-extern char datatoc_edit_overlay_mix_vert_glsl[];
-extern char datatoc_edit_overlay_mix_frag_glsl[];
-extern char datatoc_edit_overlay_facefill_vert_glsl[];
-extern char datatoc_edit_overlay_facefill_frag_glsl[];
-extern char datatoc_edit_normals_vert_glsl[];
-extern char datatoc_edit_normals_geom_glsl[];
-
-extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+/* *********** STATIC *********** */
+
+static struct {
+ struct GPUShader *overlay_tri_sh;
+ struct GPUShader *overlay_tri_fast_sh;
+ struct GPUShader *overlay_tri_vcol_sh;
+ struct GPUShader *overlay_tri_vcol_fast_sh;
+ struct GPUShader *overlay_edge_sh;
+ struct GPUShader *overlay_edge_vcol_sh;
+ struct GPUShader *overlay_vert_sh;
+ struct GPUShader *overlay_facedot_sh;
+ struct GPUShader *overlay_mix_sh;
+ struct GPUShader *overlay_facefill_sh;
+ struct GPUShader *normals_face_sh;
+ struct GPUShader *normals_sh;
+ struct GPUShader *depth_sh;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ DRWShadingGroup *depth_shgrp_hidden_wire;
+
+ DRWShadingGroup *fnormals_shgrp;
+ DRWShadingGroup *vnormals_shgrp;
+ DRWShadingGroup *lnormals_shgrp;
+
+ DRWShadingGroup *face_overlay_shgrp;
+ DRWShadingGroup *ledges_overlay_shgrp;
+ DRWShadingGroup *lverts_overlay_shgrp;
+ DRWShadingGroup *facedot_overlay_shgrp;
+
+ DRWShadingGroup *face_occluded_shgrp;
+ DRWShadingGroup *ledges_occluded_shgrp;
+ DRWShadingGroup *lverts_occluded_shgrp;
+ DRWShadingGroup *facedot_occluded_shgrp;
+ DRWShadingGroup *facefill_occluded_shgrp;
+
+ EDIT_MESH_Data *vedata;
+} g_data = {NULL}; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
static void EDIT_MESH_engine_init(void)
{
- EDIT_MESH_Data *vedata = DRW_viewport_engine_data_get("EditMeshMode");
- EDIT_MESH_TextureList *txl = vedata->txl;
- EDIT_MESH_FramebufferList *fbl = vedata->fbl;
+ EDIT_MESH_Data *ved = DRW_viewport_engine_data_get("EditMeshMode");
+ EDIT_MESH_TextureList *txl = ved->txl;
+ EDIT_MESH_FramebufferList *fbl = ved->fbl;
float *viewport_size = DRW_viewport_size_get();
@@ -126,62 +137,62 @@ static void EDIT_MESH_engine_init(void)
(int)viewport_size[0], (int)viewport_size[1],
tex, 2);
- if (!overlay_tri_sh) {
- overlay_tri_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
+ if (!e_data.overlay_tri_sh) {
+ e_data.overlay_tri_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, "#define EDGE_FIX\n");
}
- if (!overlay_tri_fast_sh) {
- overlay_tri_fast_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
+ if (!e_data.overlay_tri_fast_sh) {
+ e_data.overlay_tri_fast_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, NULL);
}
- if (!overlay_tri_vcol_sh) {
- overlay_tri_vcol_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
+ if (!e_data.overlay_tri_vcol_sh) {
+ e_data.overlay_tri_vcol_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, "#define EDGE_FIX\n"
"#define VERTEX_SELECTION\n");
}
- if (!overlay_tri_vcol_fast_sh) {
- overlay_tri_vcol_fast_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
+ if (!e_data.overlay_tri_vcol_fast_sh) {
+ e_data.overlay_tri_vcol_fast_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
datatoc_edit_overlay_frag_glsl, "#define VERTEX_SELECTION\n");
}
- if (!overlay_edge_sh) {
- overlay_edge_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
+ if (!e_data.overlay_edge_sh) {
+ e_data.overlay_edge_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_edge_glsl,
datatoc_edit_overlay_frag_glsl, NULL);
}
- if (!overlay_edge_vcol_sh) {
- overlay_edge_vcol_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
+ if (!e_data.overlay_edge_vcol_sh) {
+ e_data.overlay_edge_vcol_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_edge_glsl,
datatoc_edit_overlay_frag_glsl, "#define VERTEX_SELECTION\n");
}
- if (!overlay_vert_sh) {
- overlay_vert_sh = DRW_shader_create(datatoc_edit_overlay_loosevert_vert_glsl, NULL,
+ if (!e_data.overlay_vert_sh) {
+ e_data.overlay_vert_sh = DRW_shader_create(datatoc_edit_overlay_loosevert_vert_glsl, NULL,
datatoc_edit_overlay_frag_glsl, "#define VERTEX_SELECTION\n");
}
- if (!overlay_facedot_sh) {
- overlay_facedot_sh = DRW_shader_create(datatoc_edit_overlay_facedot_vert_glsl, NULL,
+ if (!e_data.overlay_facedot_sh) {
+ e_data.overlay_facedot_sh = DRW_shader_create(datatoc_edit_overlay_facedot_vert_glsl, NULL,
datatoc_edit_overlay_facedot_frag_glsl, NULL);
}
- if (!overlay_mix_sh) {
- overlay_mix_sh = DRW_shader_create_fullscreen(datatoc_edit_overlay_mix_frag_glsl, NULL);
+ if (!e_data.overlay_mix_sh) {
+ e_data.overlay_mix_sh = DRW_shader_create_fullscreen(datatoc_edit_overlay_mix_frag_glsl, NULL);
}
- if (!overlay_facefill_sh) {
- overlay_facefill_sh = DRW_shader_create(datatoc_edit_overlay_facefill_vert_glsl, NULL,
+ if (!e_data.overlay_facefill_sh) {
+ e_data.overlay_facefill_sh = DRW_shader_create(datatoc_edit_overlay_facefill_vert_glsl, NULL,
datatoc_edit_overlay_facefill_frag_glsl, NULL);
}
- if (!normals_face_sh) {
- normals_face_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl, datatoc_edit_normals_geom_glsl,
+ if (!e_data.normals_face_sh) {
+ e_data.normals_face_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl, datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl, "#define FACE_NORMALS\n");
}
- if (!normals_sh) {
- normals_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl, datatoc_edit_normals_geom_glsl,
+ if (!e_data.normals_sh) {
+ e_data.normals_sh = DRW_shader_create(datatoc_edit_normals_vert_glsl, datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl, NULL);
}
- if (!depth_sh) {
- depth_sh = DRW_shader_create_3D_depth_only();
+ if (!e_data.depth_sh) {
+ e_data.depth_sh = DRW_shader_create_3D_depth_only();
}
}
@@ -196,20 +207,20 @@ static DRWPass *edit_mesh_create_overlay_pass(DRWShadingGroup **face_shgrp, DRWS
ToolSettings *tsettings = scene->toolsettings;
if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) {
- ledge_sh = overlay_edge_vcol_sh;
+ ledge_sh = e_data.overlay_edge_vcol_sh;
if ((rv3d->rflag & RV3D_NAVIGATING) != 0)
- tri_sh = overlay_tri_vcol_fast_sh;
+ tri_sh = e_data.overlay_tri_vcol_fast_sh;
else
- tri_sh = overlay_tri_vcol_sh;
+ tri_sh = e_data.overlay_tri_vcol_sh;
}
else {
- ledge_sh = overlay_edge_sh;
+ ledge_sh = e_data.overlay_edge_sh;
if ((rv3d->rflag & RV3D_NAVIGATING) != 0)
- tri_sh = overlay_tri_fast_sh;
+ tri_sh = e_data.overlay_tri_fast_sh;
else
- tri_sh = overlay_tri_sh;
+ tri_sh = e_data.overlay_tri_sh;
}
DRWPass *pass = DRW_pass_create("Edit Mesh Face Overlay Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_POINT | statemod);
@@ -223,12 +234,12 @@ static DRWPass *edit_mesh_create_overlay_pass(DRWShadingGroup **face_shgrp, DRWS
DRW_shgroup_uniform_vec2(*ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
if ((tsettings->selectmode & (SCE_SELECT_VERTEX)) != 0) {
- *lverts_shgrp = DRW_shgroup_create(overlay_vert_sh, pass);
+ *lverts_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, pass);
DRW_shgroup_uniform_vec2(*lverts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
}
if ((tsettings->selectmode & (SCE_SELECT_FACE)) != 0) {
- *facedot_shgrp = DRW_shgroup_create(overlay_facedot_sh, pass);
+ *facedot_shgrp = DRW_shgroup_create(e_data.overlay_facedot_sh, pass);
}
return pass;
@@ -240,9 +251,9 @@ static float size_normal;
static void EDIT_MESH_cache_init(void)
{
- EDIT_MESH_Data *vedata = DRW_viewport_engine_data_get("EditMeshMode");
- EDIT_MESH_TextureList *txl = vedata->txl;
- EDIT_MESH_PassList *psl = vedata->psl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditMeshMode");
+ EDIT_MESH_TextureList *txl = g_data.vedata->txl;
+ EDIT_MESH_PassList *psl = g_data.vedata->psl;
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
const struct bContext *C = DRW_get_context();
@@ -255,47 +266,47 @@ static void EDIT_MESH_cache_init(void)
{
/* Complementary Depth Pass */
psl->depth_hidden_wire = DRW_pass_create("Depth Pass Hidden Wire", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK);
- depth_shgrp_hidden_wire = DRW_shgroup_create(depth_sh, psl->depth_hidden_wire);
+ g_data.depth_shgrp_hidden_wire = DRW_shgroup_create(e_data.depth_sh, psl->depth_hidden_wire);
}
{
/* Normals */
psl->normals = DRW_pass_create("Edit Mesh Normals Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS);
- fnormals_shgrp = DRW_shgroup_create(normals_face_sh, psl->normals);
- DRW_shgroup_uniform_float(fnormals_shgrp, "normalSize", &size_normal, 1);
- DRW_shgroup_uniform_vec4(fnormals_shgrp, "color", ts.colorNormal, 1);
+ g_data.fnormals_shgrp = DRW_shgroup_create(e_data.normals_face_sh, psl->normals);
+ DRW_shgroup_uniform_float(g_data.fnormals_shgrp, "normalSize", &size_normal, 1);
+ DRW_shgroup_uniform_vec4(g_data.fnormals_shgrp, "color", ts.colorNormal, 1);
- vnormals_shgrp = DRW_shgroup_create(normals_sh, psl->normals);
- DRW_shgroup_uniform_float(vnormals_shgrp, "normalSize", &size_normal, 1);
- DRW_shgroup_uniform_vec4(vnormals_shgrp, "color", ts.colorVNormal, 1);
+ g_data.vnormals_shgrp = DRW_shgroup_create(e_data.normals_sh, psl->normals);
+ DRW_shgroup_uniform_float(g_data.vnormals_shgrp, "normalSize", &size_normal, 1);
+ DRW_shgroup_uniform_vec4(g_data.vnormals_shgrp, "color", ts.colorVNormal, 1);
- lnormals_shgrp = DRW_shgroup_create(normals_sh, psl->normals);
- DRW_shgroup_uniform_float(lnormals_shgrp, "normalSize", &size_normal, 1);
- DRW_shgroup_uniform_vec4(lnormals_shgrp, "color", ts.colorLNormal, 1);
+ g_data.lnormals_shgrp = DRW_shgroup_create(e_data.normals_sh, psl->normals);
+ DRW_shgroup_uniform_float(g_data.lnormals_shgrp, "normalSize", &size_normal, 1);
+ DRW_shgroup_uniform_vec4(g_data.lnormals_shgrp, "color", ts.colorLNormal, 1);
}
if (!do_zbufclip) {
- psl->edit_face_overlay = edit_mesh_create_overlay_pass(&face_overlay_shgrp, &ledges_overlay_shgrp, &lverts_overlay_shgrp,
- &facedot_overlay_shgrp, &face_mod, DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_DEPTH | DRW_STATE_BLEND);
+ psl->edit_face_overlay = edit_mesh_create_overlay_pass(&g_data.face_overlay_shgrp, &g_data.ledges_overlay_shgrp, &g_data.lverts_overlay_shgrp,
+ &g_data.facedot_overlay_shgrp, &face_mod, DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_DEPTH | DRW_STATE_BLEND);
}
else {
/* We render all wires with depth and opaque to a new fbo and blend the result based on depth values */
- psl->edit_face_occluded = edit_mesh_create_overlay_pass(&face_occluded_shgrp, &ledges_occluded_shgrp, &lverts_occluded_shgrp,
- &facedot_occluded_shgrp, &zero, DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_DEPTH);
+ psl->edit_face_occluded = edit_mesh_create_overlay_pass(&g_data.face_occluded_shgrp, &g_data.ledges_occluded_shgrp, &g_data.lverts_occluded_shgrp,
+ &g_data.facedot_occluded_shgrp, &zero, DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_DEPTH);
/* however we loose the front faces value (because we need the depth of occluded wires and
* faces are alpha blended ) so we recover them in a new pass. */
psl->facefill_occlude = DRW_pass_create("Front Face Color", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
- facefill_occluded_shgrp = DRW_shgroup_create(overlay_facefill_sh, psl->facefill_occlude);
- DRW_shgroup_uniform_block(facefill_occluded_shgrp, "globalsBlock", globals_ubo, 0);
+ g_data.facefill_occluded_shgrp = DRW_shgroup_create(e_data.overlay_facefill_sh, psl->facefill_occlude);
+ DRW_shgroup_uniform_block(g_data.facefill_occluded_shgrp, "globalsBlock", globals_ubo, 0);
/* we need a full screen pass to combine the result */
struct Batch *quad = DRW_cache_fullscreen_quad_get();
static float mat[4][4]; /* not even used but avoid crash */
psl->mix_occlude = DRW_pass_create("Mix Occluded Wires", DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND);
- DRWShadingGroup *mix_shgrp = DRW_shgroup_create(overlay_mix_sh, psl->mix_occlude);
+ DRWShadingGroup *mix_shgrp = DRW_shgroup_create(e_data.overlay_mix_sh, psl->mix_occlude);
DRW_shgroup_call_add(mix_shgrp, quad, mat);
DRW_shgroup_uniform_float(mix_shgrp, "alpha", &backwire_opacity, 1);
DRW_shgroup_uniform_buffer(mix_shgrp, "wireColor", &txl->occlude_wire_color_tx, 0);
@@ -349,31 +360,31 @@ static void EDIT_MESH_cache_populate(Object *ob)
if (do_occlude_wire) {
geom = DRW_cache_surface_get(ob);
- DRW_shgroup_call_add(depth_shgrp_hidden_wire, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.depth_shgrp_hidden_wire, geom, ob->obmat);
}
if (fnormals_do) {
geom = DRW_cache_face_centers_get(ob);
- DRW_shgroup_call_add(fnormals_shgrp, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.fnormals_shgrp, geom, ob->obmat);
}
if (vnormals_do) {
geom = DRW_cache_verts_get(ob);
- DRW_shgroup_call_add(vnormals_shgrp, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.vnormals_shgrp, geom, ob->obmat);
}
if (lnormals_do) {
geom = DRW_cache_surface_verts_get(ob);
- DRW_shgroup_call_add(lnormals_shgrp, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.lnormals_shgrp, geom, ob->obmat);
}
if ((v3d->flag & V3D_ZBUF_SELECT) == 0) {
- edit_mesh_add_ob_to_pass(scene, ob, face_occluded_shgrp, ledges_occluded_shgrp,
- lverts_occluded_shgrp, facedot_occluded_shgrp, facefill_occluded_shgrp);
+ edit_mesh_add_ob_to_pass(scene, ob, g_data.face_occluded_shgrp, g_data.ledges_occluded_shgrp,
+ g_data.lverts_occluded_shgrp, g_data.facedot_occluded_shgrp, g_data.facefill_occluded_shgrp);
}
else {
- edit_mesh_add_ob_to_pass(scene, ob, face_overlay_shgrp, ledges_overlay_shgrp,
- lverts_overlay_shgrp, facedot_overlay_shgrp, NULL);
+ edit_mesh_add_ob_to_pass(scene, ob, g_data.face_overlay_shgrp, g_data.ledges_overlay_shgrp,
+ g_data.lverts_overlay_shgrp, g_data.facedot_overlay_shgrp, NULL);
}
}
}
@@ -381,9 +392,9 @@ static void EDIT_MESH_cache_populate(Object *ob)
static void EDIT_MESH_draw_scene(void)
{
- EDIT_MESH_Data *vedata = DRW_viewport_engine_data_get("EditMeshMode");
- EDIT_MESH_PassList *psl = vedata->psl;
- EDIT_MESH_FramebufferList *fbl = vedata->fbl;
+ EDIT_MESH_Data *ved = DRW_viewport_engine_data_get("EditMeshMode");
+ EDIT_MESH_PassList *psl = ved->psl;
+ EDIT_MESH_FramebufferList *fbl = ved->fbl;
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
@@ -429,30 +440,30 @@ void EDIT_MESH_collection_settings_create(CollectionEngineSettings *ces)
static void EDIT_MESH_engine_free(void)
{
- if (overlay_tri_sh)
- DRW_shader_free(overlay_tri_sh);
- if (overlay_tri_fast_sh)
- DRW_shader_free(overlay_tri_fast_sh);
- if (overlay_tri_vcol_sh)
- DRW_shader_free(overlay_tri_vcol_sh);
- if (overlay_tri_vcol_fast_sh)
- DRW_shader_free(overlay_tri_vcol_fast_sh);
- if (overlay_edge_sh)
- DRW_shader_free(overlay_edge_sh);
- if (overlay_edge_vcol_sh)
- DRW_shader_free(overlay_edge_vcol_sh);
- if (overlay_vert_sh)
- DRW_shader_free(overlay_vert_sh);
- if (overlay_facedot_sh)
- DRW_shader_free(overlay_facedot_sh);
- if (overlay_mix_sh)
- DRW_shader_free(overlay_mix_sh);
- if (overlay_facefill_sh)
- DRW_shader_free(overlay_facefill_sh);
- if (normals_face_sh)
- DRW_shader_free(normals_face_sh);
- if (normals_sh)
- DRW_shader_free(normals_sh);
+ if (e_data.overlay_tri_sh)
+ DRW_shader_free(e_data.overlay_tri_sh);
+ if (e_data.overlay_tri_fast_sh)
+ DRW_shader_free(e_data.overlay_tri_fast_sh);
+ if (e_data.overlay_tri_vcol_sh)
+ DRW_shader_free(e_data.overlay_tri_vcol_sh);
+ if (e_data.overlay_tri_vcol_fast_sh)
+ DRW_shader_free(e_data.overlay_tri_vcol_fast_sh);
+ if (e_data.overlay_edge_sh)
+ DRW_shader_free(e_data.overlay_edge_sh);
+ if (e_data.overlay_edge_vcol_sh)
+ DRW_shader_free(e_data.overlay_edge_vcol_sh);
+ if (e_data.overlay_vert_sh)
+ DRW_shader_free(e_data.overlay_vert_sh);
+ if (e_data.overlay_facedot_sh)
+ DRW_shader_free(e_data.overlay_facedot_sh);
+ if (e_data.overlay_mix_sh)
+ DRW_shader_free(e_data.overlay_mix_sh);
+ if (e_data.overlay_facefill_sh)
+ DRW_shader_free(e_data.overlay_facefill_sh);
+ if (e_data.normals_face_sh)
+ DRW_shader_free(e_data.normals_face_sh);
+ if (e_data.normals_sh)
+ DRW_shader_free(e_data.normals_sh);
}
DrawEngineType draw_engine_edit_mesh_type = {
diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c
index afb08abf0e8..6f3e11be4a7 100644
--- a/source/blender/draw/modes/edit_metaball_mode.c
+++ b/source/blender/draw/modes/edit_metaball_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct EDIT_METABALL_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in EDIT_METABALL_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in EDIT_METABALL_engine_init();
- * free in EDIT_METABALL_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static EDIT_METABALL_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_METABALL_engine_init();
+ * free in EDIT_METABALL_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_METABALL_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ EDIT_METABALL_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static EDIT_METABALL_Data *vedata;
* (Optional) */
static void EDIT_METABALL_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditMetaballMode");
- EDIT_METABALL_TextureList *txl = vedata->txl;
- EDIT_METABALL_FramebufferList *fbl = vedata->fbl;
- EDIT_METABALL_StorageList *stl = vedata->stl;
+ EDIT_METABALL_Data *ved = DRW_viewport_engine_data_get("EditMetaballMode");
+ EDIT_METABALL_TextureList *txl = ved->txl;
+ EDIT_METABALL_FramebufferList *fbl = ved->fbl;
+ EDIT_METABALL_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void EDIT_METABALL_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void EDIT_METABALL_engine_init(void)
* Assume that all Passes are NULL */
static void EDIT_METABALL_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditMetaballMode");
- EDIT_METABALL_PassList *psl = vedata->psl;
- EDIT_METABALL_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditMetaballMode");
+ EDIT_METABALL_PassList *psl = g_data.vedata->psl;
+ EDIT_METABALL_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void EDIT_METABALL_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.0f, 1.0f, 0.0f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void EDIT_METABALL_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void EDIT_METABALL_cache_populate(Object *ob)
{
- EDIT_METABALL_PassList *psl = vedata->psl;
- EDIT_METABALL_StorageList *stl = vedata->stl;
+ EDIT_METABALL_PassList *psl = g_data.vedata->psl;
+ EDIT_METABALL_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void EDIT_METABALL_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void EDIT_METABALL_cache_finish(void)
{
- EDIT_METABALL_PassList *psl = vedata->psl;
- EDIT_METABALL_StorageList *stl = vedata->stl;
+ EDIT_METABALL_PassList *psl = g_data.vedata->psl;
+ EDIT_METABALL_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void EDIT_METABALL_draw_scene(void)
{
EDIT_METABALL_Data *ved = DRW_viewport_engine_data_get("EditMetaballMode");
EDIT_METABALL_PassList *psl = ved->psl;
- EDIT_METABALL_FramebufferList *fbl = vedata->fbl;
+ EDIT_METABALL_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/edit_surface_mode.c b/source/blender/draw/modes/edit_surface_mode.c
index c3904ad3bab..286ba7f9818 100644
--- a/source/blender/draw/modes/edit_surface_mode.c
+++ b/source/blender/draw/modes/edit_surface_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct EDIT_SURFACE_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in EDIT_SURFACE_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in EDIT_SURFACE_engine_init();
- * free in EDIT_SURFACE_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static EDIT_SURFACE_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_SURFACE_engine_init();
+ * free in EDIT_SURFACE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_SURFACE_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ EDIT_SURFACE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static EDIT_SURFACE_Data *vedata;
* (Optional) */
static void EDIT_SURFACE_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditSurfaceMode");
- EDIT_SURFACE_TextureList *txl = vedata->txl;
- EDIT_SURFACE_FramebufferList *fbl = vedata->fbl;
- EDIT_SURFACE_StorageList *stl = vedata->stl;
+ EDIT_SURFACE_Data *ved = DRW_viewport_engine_data_get("EditSurfaceMode");
+ EDIT_SURFACE_TextureList *txl = ved->txl;
+ EDIT_SURFACE_FramebufferList *fbl = ved->fbl;
+ EDIT_SURFACE_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void EDIT_SURFACE_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void EDIT_SURFACE_engine_init(void)
* Assume that all Passes are NULL */
static void EDIT_SURFACE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditSurfaceMode");
- EDIT_SURFACE_PassList *psl = vedata->psl;
- EDIT_SURFACE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditSurfaceMode");
+ EDIT_SURFACE_PassList *psl = g_data.vedata->psl;
+ EDIT_SURFACE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void EDIT_SURFACE_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.0f, 0.0f, 1.0f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void EDIT_SURFACE_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void EDIT_SURFACE_cache_populate(Object *ob)
{
- EDIT_SURFACE_PassList *psl = vedata->psl;
- EDIT_SURFACE_StorageList *stl = vedata->stl;
+ EDIT_SURFACE_PassList *psl = g_data.vedata->psl;
+ EDIT_SURFACE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void EDIT_SURFACE_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void EDIT_SURFACE_cache_finish(void)
{
- EDIT_SURFACE_PassList *psl = vedata->psl;
- EDIT_SURFACE_StorageList *stl = vedata->stl;
+ EDIT_SURFACE_PassList *psl = g_data.vedata->psl;
+ EDIT_SURFACE_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void EDIT_SURFACE_draw_scene(void)
{
EDIT_SURFACE_Data *ved = DRW_viewport_engine_data_get("EditSurfaceMode");
EDIT_SURFACE_PassList *psl = ved->psl;
- EDIT_SURFACE_FramebufferList *fbl = vedata->fbl;
+ EDIT_SURFACE_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/edit_text_mode.c b/source/blender/draw/modes/edit_text_mode.c
index f7210496544..dfe91daea9f 100644
--- a/source/blender/draw/modes/edit_text_mode.c
+++ b/source/blender/draw/modes/edit_text_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct EDIT_TEXT_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in EDIT_TEXT_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in EDIT_TEXT_engine_init();
- * free in EDIT_TEXT_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static EDIT_TEXT_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_TEXT_engine_init();
+ * free in EDIT_TEXT_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_TEXT_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ EDIT_TEXT_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static EDIT_TEXT_Data *vedata;
* (Optional) */
static void EDIT_TEXT_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditTextMode");
- EDIT_TEXT_TextureList *txl = vedata->txl;
- EDIT_TEXT_FramebufferList *fbl = vedata->fbl;
- EDIT_TEXT_StorageList *stl = vedata->stl;
+ EDIT_TEXT_Data *ved = DRW_viewport_engine_data_get("EditTextMode");
+ EDIT_TEXT_TextureList *txl = ved->txl;
+ EDIT_TEXT_FramebufferList *fbl = ved->fbl;
+ EDIT_TEXT_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void EDIT_TEXT_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void EDIT_TEXT_engine_init(void)
* Assume that all Passes are NULL */
static void EDIT_TEXT_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("EditTextMode");
- EDIT_TEXT_PassList *psl = vedata->psl;
- EDIT_TEXT_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("EditTextMode");
+ EDIT_TEXT_PassList *psl = g_data.vedata->psl;
+ EDIT_TEXT_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void EDIT_TEXT_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {1.0f, 0.0f, 0.0f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void EDIT_TEXT_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void EDIT_TEXT_cache_populate(Object *ob)
{
- EDIT_TEXT_PassList *psl = vedata->psl;
- EDIT_TEXT_StorageList *stl = vedata->stl;
+ EDIT_TEXT_PassList *psl = g_data.vedata->psl;
+ EDIT_TEXT_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void EDIT_TEXT_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void EDIT_TEXT_cache_finish(void)
{
- EDIT_TEXT_PassList *psl = vedata->psl;
- EDIT_TEXT_StorageList *stl = vedata->stl;
+ EDIT_TEXT_PassList *psl = g_data.vedata->psl;
+ EDIT_TEXT_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void EDIT_TEXT_draw_scene(void)
{
EDIT_TEXT_Data *ved = DRW_viewport_engine_data_get("EditTextMode");
EDIT_TEXT_PassList *psl = ved->psl;
- EDIT_TEXT_FramebufferList *fbl = vedata->fbl;
+ EDIT_TEXT_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 8cb09a4e14f..93fb24f32ec 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -42,6 +42,11 @@
#include "draw_mode_engines.h"
#include "draw_common.h"
+extern GlobalsUboStorage ts;
+
+extern char datatoc_object_occluded_outline_frag_glsl[];
+
+/* *********** LISTS *********** */
/* keep it under MAX_PASSES */
typedef struct OBJECT_PassList {
struct DRWPass *non_meshes;
@@ -60,86 +65,90 @@ typedef struct OBJECT_Data {
void *stl;
} OBJECT_Data;
-/* Empties */
-static DRWShadingGroup *plain_axes;
-static DRWShadingGroup *cube;
-static DRWShadingGroup *circle;
-static DRWShadingGroup *sphere;
-static DRWShadingGroup *cone;
-static DRWShadingGroup *single_arrow;
-static DRWShadingGroup *single_arrow_line;
-static DRWShadingGroup *arrows;
-static DRWShadingGroup *axis_names;
-
-/* Speaker */
-static DRWShadingGroup *speaker;
-
-/* Lamps */
-static DRWShadingGroup *lamp_center;
-static DRWShadingGroup *lamp_center_group;
-static DRWShadingGroup *lamp_groundpoint;
-static DRWShadingGroup *lamp_groundline;
-static DRWShadingGroup *lamp_circle;
-static DRWShadingGroup *lamp_circle_shadow;
-static DRWShadingGroup *lamp_sunrays;
-static DRWShadingGroup *lamp_distance;
-static DRWShadingGroup *lamp_buflimit;
-static DRWShadingGroup *lamp_buflimit_points;
-static DRWShadingGroup *lamp_area;
-static DRWShadingGroup *lamp_hemi;
-static DRWShadingGroup *lamp_spot_cone;
-static DRWShadingGroup *lamp_spot_blend;
-static DRWShadingGroup *lamp_spot_pyramid;
-static DRWShadingGroup *lamp_spot_blend_rect;
-
-/* Helpers */
-static DRWShadingGroup *relationship_lines;
-
-/* Objects Centers */
-static DRWShadingGroup *center_active;
-static DRWShadingGroup *center_selected;
-static DRWShadingGroup *center_deselected;
-
-/* Camera */
-static DRWShadingGroup *camera;
-static DRWShadingGroup *camera_tria;
-static DRWShadingGroup *camera_focus;
-static DRWShadingGroup *camera_clip;
-static DRWShadingGroup *camera_clip_points;
-static DRWShadingGroup *camera_mist;
-static DRWShadingGroup *camera_mist_points;
-
-/* Outlines */
-static DRWShadingGroup *outlines_active;
-static DRWShadingGroup *outlines_active_group;
-static DRWShadingGroup *outlines_select;
-static DRWShadingGroup *outlines_select_group;
-static DRWShadingGroup *outlines_transform;
-static DRWShadingGroup *outlines_transp_select;
-static DRWShadingGroup *outlines_transp_select_group;
-static DRWShadingGroup *outlines_transp_active;
-static DRWShadingGroup *outlines_transp_active_group;
-static DRWShadingGroup *outlines_transp_transform;
-
-extern GlobalsUboStorage ts;
-
-static OBJECT_Data *vedata;
-
-static struct GPUShader *outline_sh = NULL;
-
-extern char datatoc_object_occluded_outline_frag_glsl[];
+/* *********** STATIC *********** */
+
+static struct {
+ /* Empties */
+ DRWShadingGroup *plain_axes;
+ DRWShadingGroup *cube;
+ DRWShadingGroup *circle;
+ DRWShadingGroup *sphere;
+ DRWShadingGroup *cone;
+ DRWShadingGroup *single_arrow;
+ DRWShadingGroup *single_arrow_line;
+ DRWShadingGroup *arrows;
+ DRWShadingGroup *axis_names;
+
+ /* Speaker */
+ DRWShadingGroup *speaker;
+
+ /* Lamps */
+ DRWShadingGroup *lamp_center;
+ DRWShadingGroup *lamp_center_group;
+ DRWShadingGroup *lamp_groundpoint;
+ DRWShadingGroup *lamp_groundline;
+ DRWShadingGroup *lamp_circle;
+ DRWShadingGroup *lamp_circle_shadow;
+ DRWShadingGroup *lamp_sunrays;
+ DRWShadingGroup *lamp_distance;
+ DRWShadingGroup *lamp_buflimit;
+ DRWShadingGroup *lamp_buflimit_points;
+ DRWShadingGroup *lamp_area;
+ DRWShadingGroup *lamp_hemi;
+ DRWShadingGroup *lamp_spot_cone;
+ DRWShadingGroup *lamp_spot_blend;
+ DRWShadingGroup *lamp_spot_pyramid;
+ DRWShadingGroup *lamp_spot_blend_rect;
+
+ /* Helpers */
+ DRWShadingGroup *relationship_lines;
+
+ /* Objects Centers */
+ DRWShadingGroup *center_active;
+ DRWShadingGroup *center_selected;
+ DRWShadingGroup *center_deselected;
+
+ /* Camera */
+ DRWShadingGroup *camera;
+ DRWShadingGroup *camera_tria;
+ DRWShadingGroup *camera_focus;
+ DRWShadingGroup *camera_clip;
+ DRWShadingGroup *camera_clip_points;
+ DRWShadingGroup *camera_mist;
+ DRWShadingGroup *camera_mist_points;
+
+ /* Outlines */
+ DRWShadingGroup *outlines_active;
+ DRWShadingGroup *outlines_active_group;
+ DRWShadingGroup *outlines_select;
+ DRWShadingGroup *outlines_select_group;
+ DRWShadingGroup *outlines_transform;
+ DRWShadingGroup *outlines_transp_select;
+ DRWShadingGroup *outlines_transp_select_group;
+ DRWShadingGroup *outlines_transp_active;
+ DRWShadingGroup *outlines_transp_active_group;
+ DRWShadingGroup *outlines_transp_transform;
+
+ OBJECT_Data *vedata;
+} g_data = {NULL}; /* Transient data */
+
+static struct {
+ struct GPUShader *outline_sh;
+} e_data = {NULL}; /* Engine data */
+
+/* *********** FUNCTIONS *********** */
static void OBJECT_engine_init(void)
{
- if (!outline_sh) {
- outline_sh = DRW_shader_create_3D(datatoc_object_occluded_outline_frag_glsl, NULL);
+ if (!e_data.outline_sh) {
+ e_data.outline_sh = DRW_shader_create_3D(datatoc_object_occluded_outline_frag_glsl, NULL);
}
}
static void OBJECT_engine_free(void)
{
- if (outline_sh)
- DRW_shader_free(outline_sh);
+ if (e_data.outline_sh)
+ DRW_shader_free(e_data.outline_sh);
}
static DRWShadingGroup *shgroup_outline(DRWPass *pass, int state_flag, const float col[4], struct GPUShader *sh)
@@ -154,8 +163,8 @@ static DRWShadingGroup *shgroup_outline(DRWPass *pass, int state_flag, const flo
static void OBJECT_cache_init(void)
{
/* DRW_viewport_engine_data_get is rather slow, better not do it on every objects */
- vedata = DRW_viewport_engine_data_get("ObjectMode");
- OBJECT_PassList *psl = vedata->psl;
+ g_data.vedata = DRW_viewport_engine_data_get("ObjectMode");
+ OBJECT_PassList *psl = g_data.vedata->psl;
{
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE_LARGE;
@@ -164,15 +173,15 @@ static void OBJECT_cache_init(void)
struct GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
/* Select */
- outlines_select = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_SELECT, ts.colorSelect, sh);
- outlines_select_group = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_SELECT, ts.colorGroupActive, sh);
+ g_data.outlines_select = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_SELECT, ts.colorSelect, sh);
+ g_data.outlines_select_group = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_SELECT, ts.colorGroupActive, sh);
/* Transform */
- outlines_transform = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_SELECT, ts.colorTransform, sh);
+ g_data.outlines_transform = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_SELECT, ts.colorTransform, sh);
/* Active */
- outlines_active = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorActive, sh);
- outlines_active_group = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorGroupActive, sh);
+ g_data.outlines_active = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorActive, sh);
+ g_data.outlines_active_group = shgroup_outline(psl->outlines, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorGroupActive, sh);
}
{
@@ -181,15 +190,15 @@ static void OBJECT_cache_init(void)
psl->outlines_transp = DRW_pass_create("See-through Outlines Pass", state);
/* Select */
- outlines_transp_select = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_SELECT, ts.colorSelect, outline_sh);
- outlines_transp_select_group = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_SELECT, ts.colorGroupActive, outline_sh);
+ g_data.outlines_transp_select = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_SELECT, ts.colorSelect, e_data.outline_sh);
+ g_data.outlines_transp_select_group = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_SELECT, ts.colorGroupActive, e_data.outline_sh);
/* Transform */
- outlines_transp_transform = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_SELECT, ts.colorTransform, outline_sh);
+ g_data.outlines_transp_transform = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_SELECT, ts.colorTransform, e_data.outline_sh);
/* Active */
- outlines_transp_active = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorActive, outline_sh);
- outlines_transp_active_group = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorGroupActive, outline_sh);
+ g_data.outlines_transp_active = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorActive, e_data.outline_sh);
+ g_data.outlines_transp_active_group = shgroup_outline(psl->outlines_transp, DRW_STATE_TEST_STENCIL_ACTIVE, ts.colorGroupActive, e_data.outline_sh);
}
{
@@ -214,53 +223,53 @@ static void OBJECT_cache_init(void)
/* Empties */
geom = DRW_cache_plain_axes_get();
- plain_axes = shgroup_instance(psl->non_meshes, geom);
+ g_data.plain_axes = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_cube_get();
- cube = shgroup_instance(psl->non_meshes, geom);
+ g_data.cube = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_circle_get();
- circle = shgroup_instance(psl->non_meshes, geom);
+ g_data.circle = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_empty_sphere_get();
- sphere = shgroup_instance(psl->non_meshes, geom);
+ g_data.sphere = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_empty_cone_get();
- cone = shgroup_instance(psl->non_meshes, geom);
+ g_data.cone = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_single_arrow_get();
- single_arrow = shgroup_instance(psl->non_meshes, geom);
+ g_data.single_arrow = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_single_line_get();
- single_arrow_line = shgroup_instance(psl->non_meshes, geom);
+ g_data.single_arrow_line = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_arrows_get();
- arrows = shgroup_instance(psl->non_meshes, geom);
+ g_data.arrows = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_axis_names_get();
- axis_names = shgroup_instance_axis_names(psl->non_meshes, geom);
+ g_data.axis_names = shgroup_instance_axis_names(psl->non_meshes, geom);
/* Speaker */
geom = DRW_cache_speaker_get();
- speaker = shgroup_instance(psl->non_meshes, geom);
+ g_data.speaker = shgroup_instance(psl->non_meshes, geom);
/* Camera */
geom = DRW_cache_camera_get();
- camera = shgroup_camera_instance(psl->non_meshes, geom);
+ g_data.camera = shgroup_camera_instance(psl->non_meshes, geom);
geom = DRW_cache_camera_tria_get();
- camera_tria = shgroup_camera_instance(psl->non_meshes, geom);
+ g_data.camera_tria = shgroup_camera_instance(psl->non_meshes, geom);
geom = DRW_cache_plain_axes_get();
- camera_focus = shgroup_instance(psl->non_meshes, geom);
+ g_data.camera_focus = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_single_line_get();
- camera_clip = shgroup_distance_lines_instance(psl->non_meshes, geom);
- camera_mist = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.camera_clip = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.camera_mist = shgroup_distance_lines_instance(psl->non_meshes, geom);
geom = DRW_cache_single_line_endpoints_get();
- camera_clip_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
- camera_mist_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.camera_clip_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.camera_mist_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
/* Lamps */
/* TODO
@@ -269,48 +278,48 @@ static void OBJECT_cache_init(void)
/* start with buflimit because we don't want stipples */
geom = DRW_cache_single_line_get();
- lamp_buflimit = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.lamp_buflimit = shgroup_distance_lines_instance(psl->non_meshes, geom);
- lamp_center = shgroup_dynpoints_uniform_color(psl->non_meshes, ts.colorLampNoAlpha, &ts.sizeLampCenter);
- lamp_center_group = shgroup_dynpoints_uniform_color(psl->non_meshes, ts.colorGroup, &ts.sizeLampCenter);
+ g_data.lamp_center = shgroup_dynpoints_uniform_color(psl->non_meshes, ts.colorLampNoAlpha, &ts.sizeLampCenter);
+ g_data.lamp_center_group = shgroup_dynpoints_uniform_color(psl->non_meshes, ts.colorGroup, &ts.sizeLampCenter);
geom = DRW_cache_lamp_get();
- lamp_circle = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
- lamp_circle_shadow = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircleShadow);
+ g_data.lamp_circle = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
+ g_data.lamp_circle_shadow = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircleShadow);
geom = DRW_cache_lamp_sunrays_get();
- lamp_sunrays = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
+ g_data.lamp_sunrays = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
- lamp_groundline = shgroup_groundlines_uniform_color(psl->non_meshes, ts.colorLamp);
- lamp_groundpoint = shgroup_groundpoints_uniform_color(psl->non_meshes, ts.colorLamp);
+ g_data.lamp_groundline = shgroup_groundlines_uniform_color(psl->non_meshes, ts.colorLamp);
+ g_data.lamp_groundpoint = shgroup_groundpoints_uniform_color(psl->non_meshes, ts.colorLamp);
geom = DRW_cache_lamp_area_get();
- lamp_area = shgroup_instance(psl->non_meshes, geom);
+ g_data.lamp_area = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_lamp_hemi_get();
- lamp_hemi = shgroup_instance(psl->non_meshes, geom);
+ g_data.lamp_hemi = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_single_line_get();
- lamp_distance = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.lamp_distance = shgroup_distance_lines_instance(psl->non_meshes, geom);
geom = DRW_cache_single_line_endpoints_get();
- lamp_buflimit_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ g_data.lamp_buflimit_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
geom = DRW_cache_lamp_spot_get();
- lamp_spot_cone = shgroup_spot_instance(psl->non_meshes, geom);
+ g_data.lamp_spot_cone = shgroup_spot_instance(psl->non_meshes, geom);
geom = DRW_cache_circle_get();
- lamp_spot_blend = shgroup_instance(psl->non_meshes, geom);
+ g_data.lamp_spot_blend = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_lamp_spot_square_get();
- lamp_spot_pyramid = shgroup_instance(psl->non_meshes, geom);
+ g_data.lamp_spot_pyramid = shgroup_instance(psl->non_meshes, geom);
geom = DRW_cache_square_get();
- lamp_spot_blend_rect = shgroup_instance(psl->non_meshes, geom);
+ g_data.lamp_spot_blend_rect = shgroup_instance(psl->non_meshes, geom);
/* Relationship Lines */
- relationship_lines = shgroup_dynlines_uniform_color(psl->non_meshes, ts.colorWire);
- DRW_shgroup_state_set(relationship_lines, DRW_STATE_STIPPLE_3);
+ g_data.relationship_lines = shgroup_dynlines_uniform_color(psl->non_meshes, ts.colorWire);
+ DRW_shgroup_state_set(g_data.relationship_lines, DRW_STATE_STIPPLE_3);
}
{
@@ -332,17 +341,17 @@ static void OBJECT_cache_init(void)
DRW_shgroup_uniform_float(grp, "outlineWidth", &outlineWidth, 1);
DRW_shgroup_uniform_vec4(grp, "color", ts.colorActive, 1);
DRW_shgroup_uniform_vec4(grp, "outlineColor", ts.colorOutline, 1);
- center_active = grp;
+ g_data.center_active = grp;
/* Select */
grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
DRW_shgroup_uniform_vec4(grp, "color", ts.colorSelect, 1);
- center_selected = grp;
+ g_data.center_selected = grp;
/* Deselect */
grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
DRW_shgroup_uniform_vec4(grp, "color", ts.colorDeselect, 1);
- center_deselected = grp;
+ g_data.center_deselected = grp;
}
}
@@ -355,29 +364,29 @@ static void DRW_shgroup_lamp(Object *ob)
/* Don't draw the center if it's selected or active */
if (theme_id == TH_GROUP)
- DRW_shgroup_dynamic_call_add(lamp_center_group, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_center_group, ob->obmat[3]);
else if (theme_id == TH_LAMP)
- DRW_shgroup_dynamic_call_add(lamp_center, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_center, ob->obmat[3]);
/* First circle */
- DRW_shgroup_dynamic_call_add(lamp_circle, ob->obmat[3], color);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_circle, ob->obmat[3], color);
/* draw dashed outer circle if shadow is on. remember some lamps can't have certain shadows! */
if (la->type != LA_HEMI) {
if ((la->mode & LA_SHAD_RAY) || ((la->mode & LA_SHAD_BUF) && (la->type == LA_SPOT))) {
- DRW_shgroup_dynamic_call_add(lamp_circle_shadow, ob->obmat[3], color);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_circle_shadow, ob->obmat[3], color);
}
}
/* Distance */
if (ELEM(la->type, LA_HEMI, LA_SUN, LA_AREA)) {
- DRW_shgroup_dynamic_call_add(lamp_distance, color, &zero, &la->dist, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_distance, color, &zero, &la->dist, ob->obmat);
}
copy_m4_m4(la->shapemat, ob->obmat);
if (la->type == LA_SUN) {
- DRW_shgroup_dynamic_call_add(lamp_sunrays, ob->obmat[3], color);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_sunrays, ob->obmat[3], color);
}
else if (la->type == LA_SPOT) {
float size[3], sizemat[4][4];
@@ -397,33 +406,33 @@ static void DRW_shgroup_lamp(Object *ob)
mul_m4_m4m4(la->spotblendmat, la->spotconemat, sizemat);
if (la->mode & LA_SQUARE) {
- DRW_shgroup_dynamic_call_add(lamp_spot_pyramid, color, &one, la->spotconemat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_spot_pyramid, color, &one, la->spotconemat);
/* hide line if it is zero size or overlaps with outer border,
* previously it adjusted to always to show it but that seems
* confusing because it doesn't show the actual blend size */
if (blend != 0.0f && blend != 1.0f) {
- DRW_shgroup_dynamic_call_add(lamp_spot_blend_rect, color, &one, la->spotblendmat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_spot_blend_rect, color, &one, la->spotblendmat);
}
}
else {
- DRW_shgroup_dynamic_call_add(lamp_spot_cone, color, la->spotconemat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_spot_cone, color, la->spotconemat);
/* hide line if it is zero size or overlaps with outer border,
* previously it adjusted to always to show it but that seems
* confusing because it doesn't show the actual blend size */
if (blend != 0.0f && blend != 1.0f) {
- DRW_shgroup_dynamic_call_add(lamp_spot_blend, color, &one, la->spotblendmat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_spot_blend, color, &one, la->spotblendmat);
}
}
normalize_m4(la->shapemat);
- DRW_shgroup_dynamic_call_add(lamp_buflimit, color, &la->clipsta, &la->clipend, ob->obmat);
- DRW_shgroup_dynamic_call_add(lamp_buflimit_points, color, &la->clipsta, &la->clipend, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_buflimit, color, &la->clipsta, &la->clipend, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_buflimit_points, color, &la->clipsta, &la->clipend, ob->obmat);
}
else if (la->type == LA_HEMI) {
static float hemisize = 2.0f;
- DRW_shgroup_dynamic_call_add(lamp_hemi, color, &hemisize, la->shapemat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_hemi, color, &hemisize, la->shapemat);
}
else if (la->type == LA_AREA) {
float size[3] = {1.0f, 1.0f, 1.0f}, sizemat[4][4];
@@ -434,12 +443,12 @@ static void DRW_shgroup_lamp(Object *ob)
mul_m4_m4m4(la->shapemat, la->shapemat, sizemat);
}
- DRW_shgroup_dynamic_call_add(lamp_area, color, &la->area_size, la->shapemat);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_area, color, &la->area_size, la->shapemat);
}
/* Line and point going to the ground */
- DRW_shgroup_dynamic_call_add(lamp_groundline, ob->obmat[3]);
- DRW_shgroup_dynamic_call_add(lamp_groundpoint, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_groundline, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.lamp_groundpoint, ob->obmat[3]);
}
static void DRW_shgroup_camera(Object *ob)
@@ -477,11 +486,11 @@ static void DRW_shgroup_camera(Object *ob)
cam->drwtria[1][0] = shift[0];
cam->drwtria[1][1] = shift[1] + ((1.1f * drawsize * (asp[1] + 0.7f)) * scale[1]);
- DRW_shgroup_dynamic_call_add(camera, color, cam->drwcorners, &cam->drwdepth, cam->drwtria, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera, color, cam->drwcorners, &cam->drwdepth, cam->drwtria, ob->obmat);
/* Active cam */
if (is_active) {
- DRW_shgroup_dynamic_call_add(camera_tria, color, cam->drwcorners, &cam->drwdepth, cam->drwtria, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera_tria, color, cam->drwcorners, &cam->drwdepth, cam->drwtria, ob->obmat);
}
/* draw the rest in normalize object space */
@@ -498,10 +507,10 @@ static void DRW_shgroup_camera(Object *ob)
size_to_mat4(sizemat, size);
mul_m4_m4m4(cam->drwfocusmat, cam->drwfocusmat, sizemat);
- DRW_shgroup_dynamic_call_add(camera_focus, (is_active ? col_hi : col), &cam->drawsize, cam->drwfocusmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera_focus, (is_active ? col_hi : col), &cam->drawsize, cam->drwfocusmat);
- DRW_shgroup_dynamic_call_add(camera_clip, color, &cam->clipsta, &cam->clipend, cam->drwnormalmat);
- DRW_shgroup_dynamic_call_add(camera_clip_points, (is_active ? col_hi : col), &cam->clipsta, &cam->clipend, cam->drwnormalmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera_clip, color, &cam->clipsta, &cam->clipend, cam->drwnormalmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera_clip_points, (is_active ? col_hi : col), &cam->clipsta, &cam->clipend, cam->drwnormalmat);
}
if (cam->flag & CAM_SHOWMIST) {
@@ -510,8 +519,8 @@ static void DRW_shgroup_camera(Object *ob)
if (world) {
static float col[3] = {0.5f, 0.5f, 0.5f}, col_hi[3] = {1.0f, 1.0f, 1.0f};
world->mistend = world->miststa + world->mistdist;
- DRW_shgroup_dynamic_call_add(camera_mist, color, &world->miststa, &world->mistend, cam->drwnormalmat);
- DRW_shgroup_dynamic_call_add(camera_mist_points, (is_active ? col_hi : col), &world->miststa, &world->mistend, cam->drwnormalmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera_mist, color, &world->miststa, &world->mistend, cam->drwnormalmat);
+ DRW_shgroup_dynamic_call_add(g_data.camera_mist_points, (is_active ? col_hi : col), &world->miststa, &world->mistend, cam->drwnormalmat);
}
}
}
@@ -523,27 +532,27 @@ static void DRW_shgroup_empty(Object *ob)
switch (ob->empty_drawtype) {
case OB_PLAINAXES:
- DRW_shgroup_dynamic_call_add(plain_axes, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.plain_axes, color, &ob->empty_drawsize, ob->obmat);
break;
case OB_SINGLE_ARROW:
- DRW_shgroup_dynamic_call_add(single_arrow, color, &ob->empty_drawsize, ob->obmat);
- DRW_shgroup_dynamic_call_add(single_arrow_line, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.single_arrow, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.single_arrow_line, color, &ob->empty_drawsize, ob->obmat);
break;
case OB_CUBE:
- DRW_shgroup_dynamic_call_add(cube, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.cube, color, &ob->empty_drawsize, ob->obmat);
break;
case OB_CIRCLE:
- DRW_shgroup_dynamic_call_add(circle, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.circle, color, &ob->empty_drawsize, ob->obmat);
break;
case OB_EMPTY_SPHERE:
- DRW_shgroup_dynamic_call_add(sphere, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.sphere, color, &ob->empty_drawsize, ob->obmat);
break;
case OB_EMPTY_CONE:
- DRW_shgroup_dynamic_call_add(cone, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.cone, color, &ob->empty_drawsize, ob->obmat);
break;
case OB_ARROWS:
- DRW_shgroup_dynamic_call_add(arrows, color, &ob->empty_drawsize, ob->obmat);
- DRW_shgroup_dynamic_call_add(axis_names, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.arrows, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.axis_names, color, &ob->empty_drawsize, ob->obmat);
break;
}
}
@@ -554,24 +563,24 @@ static void DRW_shgroup_speaker(Object *ob)
static float one = 1.0f;
DRW_object_wire_theme_get(ob, &color);
- DRW_shgroup_dynamic_call_add(speaker, color, &one, ob->obmat);
+ DRW_shgroup_dynamic_call_add(g_data.speaker, color, &one, ob->obmat);
}
static void DRW_shgroup_relationship_lines(Object *ob)
{
if (ob->parent) {
- DRW_shgroup_dynamic_call_add(relationship_lines, ob->obmat[3]);
- DRW_shgroup_dynamic_call_add(relationship_lines, ob->parent->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.relationship_lines, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.relationship_lines, ob->parent->obmat[3]);
}
}
static void DRW_shgroup_object_center(Object *ob)
{
if ((ob->base_flag & BASE_SELECTED) != 0) {
- DRW_shgroup_dynamic_call_add(center_selected, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.center_selected, ob->obmat[3]);
}
else if (0) {
- DRW_shgroup_dynamic_call_add(center_deselected, ob->obmat[3]);
+ DRW_shgroup_dynamic_call_add(g_data.center_deselected, ob->obmat[3]);
}
}
@@ -595,20 +604,20 @@ static void OBJECT_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_wire_outline_get(ob);
switch (theme_id) {
case TH_ACTIVE:
- DRW_shgroup_call_add(outlines_active, geom, ob->obmat);
- DRW_shgroup_call_add(outlines_transp_active, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_active, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_transp_active, geom, ob->obmat);
break;
case TH_SELECT:
- DRW_shgroup_call_add(outlines_select, geom, ob->obmat);
- DRW_shgroup_call_add(outlines_transp_select, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_select, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_transp_select, geom, ob->obmat);
break;
case TH_GROUP_ACTIVE:
- DRW_shgroup_call_add(outlines_select_group, geom, ob->obmat);
- DRW_shgroup_call_add(outlines_transp_select_group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_select_group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_transp_select_group, geom, ob->obmat);
break;
case TH_TRANSFORM:
- DRW_shgroup_call_add(outlines_transform, geom, ob->obmat);
- DRW_shgroup_call_add(outlines_transp_transform, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_transform, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.outlines_transp_transform, geom, ob->obmat);
break;
}
}
@@ -631,9 +640,9 @@ static void OBJECT_cache_populate(Object *ob)
{
bArmature *arm = ob->data;
if (arm->edbo == NULL) {
- DRW_shgroup_armature_object(ob, vedata->psl->bone_solid,
- vedata->psl->bone_wire,
- relationship_lines);
+ DRW_shgroup_armature_object(ob, g_data.vedata->psl->bone_solid,
+ g_data.vedata->psl->bone_wire,
+ g_data.relationship_lines);
}
}
break;
diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c
index c084955a6b2..3ec60e93a1b 100644
--- a/source/blender/draw/modes/paint_texture_mode.c
+++ b/source/blender/draw/modes/paint_texture_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct PAINT_TEXTURE_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in PAINT_TEXTURE_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in PAINT_TEXTURE_engine_init();
- * free in PAINT_TEXTURE_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static PAINT_TEXTURE_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in PAINT_TEXTURE_engine_init();
+ * free in PAINT_TEXTURE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in PAINT_TEXTURE_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ PAINT_TEXTURE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static PAINT_TEXTURE_Data *vedata;
* (Optional) */
static void PAINT_TEXTURE_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("PaintTextureMode");
- PAINT_TEXTURE_TextureList *txl = vedata->txl;
- PAINT_TEXTURE_FramebufferList *fbl = vedata->fbl;
- PAINT_TEXTURE_StorageList *stl = vedata->stl;
+ PAINT_TEXTURE_Data *ved = DRW_viewport_engine_data_get("PaintTextureMode");
+ PAINT_TEXTURE_TextureList *txl = ved->txl;
+ PAINT_TEXTURE_FramebufferList *fbl = ved->fbl;
+ PAINT_TEXTURE_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void PAINT_TEXTURE_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void PAINT_TEXTURE_engine_init(void)
* Assume that all Passes are NULL */
static void PAINT_TEXTURE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("PaintTextureMode");
- PAINT_TEXTURE_PassList *psl = vedata->psl;
- PAINT_TEXTURE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("PaintTextureMode");
+ PAINT_TEXTURE_PassList *psl = g_data.vedata->psl;
+ PAINT_TEXTURE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void PAINT_TEXTURE_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void PAINT_TEXTURE_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void PAINT_TEXTURE_cache_populate(Object *ob)
{
- PAINT_TEXTURE_PassList *psl = vedata->psl;
- PAINT_TEXTURE_StorageList *stl = vedata->stl;
+ PAINT_TEXTURE_PassList *psl = g_data.vedata->psl;
+ PAINT_TEXTURE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void PAINT_TEXTURE_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void PAINT_TEXTURE_cache_finish(void)
{
- PAINT_TEXTURE_PassList *psl = vedata->psl;
- PAINT_TEXTURE_StorageList *stl = vedata->stl;
+ PAINT_TEXTURE_PassList *psl = g_data.vedata->psl;
+ PAINT_TEXTURE_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void PAINT_TEXTURE_draw_scene(void)
{
PAINT_TEXTURE_Data *ved = DRW_viewport_engine_data_get("PaintTextureMode");
PAINT_TEXTURE_PassList *psl = ved->psl;
- PAINT_TEXTURE_FramebufferList *fbl = vedata->fbl;
+ PAINT_TEXTURE_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c
index b5f594b7f8e..bac81c9b81c 100644
--- a/source/blender/draw/modes/paint_vertex_mode.c
+++ b/source/blender/draw/modes/paint_vertex_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct PAINT_VERTEX_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in PAINT_VERTEX_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in PAINT_VERTEX_engine_init();
- * free in PAINT_VERTEX_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static PAINT_VERTEX_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in PAINT_VERTEX_engine_init();
+ * free in PAINT_VERTEX_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in PAINT_VERTEX_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ PAINT_VERTEX_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static PAINT_VERTEX_Data *vedata;
* (Optional) */
static void PAINT_VERTEX_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("PaintVertexMode");
- PAINT_VERTEX_TextureList *txl = vedata->txl;
- PAINT_VERTEX_FramebufferList *fbl = vedata->fbl;
- PAINT_VERTEX_StorageList *stl = vedata->stl;
+ PAINT_VERTEX_Data *ved = DRW_viewport_engine_data_get("PaintVertexMode");
+ PAINT_VERTEX_TextureList *txl = ved->txl;
+ PAINT_VERTEX_FramebufferList *fbl = ved->fbl;
+ PAINT_VERTEX_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void PAINT_VERTEX_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void PAINT_VERTEX_engine_init(void)
* Assume that all Passes are NULL */
static void PAINT_VERTEX_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("PaintVertexMode");
- PAINT_VERTEX_PassList *psl = vedata->psl;
- PAINT_VERTEX_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("PaintVertexMode");
+ PAINT_VERTEX_PassList *psl = g_data.vedata->psl;
+ PAINT_VERTEX_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void PAINT_VERTEX_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void PAINT_VERTEX_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void PAINT_VERTEX_cache_populate(Object *ob)
{
- PAINT_VERTEX_PassList *psl = vedata->psl;
- PAINT_VERTEX_StorageList *stl = vedata->stl;
+ PAINT_VERTEX_PassList *psl = g_data.vedata->psl;
+ PAINT_VERTEX_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void PAINT_VERTEX_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void PAINT_VERTEX_cache_finish(void)
{
- PAINT_VERTEX_PassList *psl = vedata->psl;
- PAINT_VERTEX_StorageList *stl = vedata->stl;
+ PAINT_VERTEX_PassList *psl = g_data.vedata->psl;
+ PAINT_VERTEX_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void PAINT_VERTEX_draw_scene(void)
{
PAINT_VERTEX_Data *ved = DRW_viewport_engine_data_get("PaintVertexMode");
PAINT_VERTEX_PassList *psl = ved->psl;
- PAINT_VERTEX_FramebufferList *fbl = vedata->fbl;
+ PAINT_VERTEX_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
index c083aaaae82..06f73436760 100644
--- a/source/blender/draw/modes/paint_weight_mode.c
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -33,6 +33,12 @@
#include "draw_mode_engines.h"
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
/* *********** LISTS *********** */
/* All lists are per viewport specific datas.
* They are all free when viewport changes engines
@@ -85,26 +91,24 @@ typedef struct PAINT_WEIGHT_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in PAINT_WEIGHT_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in PAINT_WEIGHT_engine_init();
- * free in PAINT_WEIGHT_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static PAINT_WEIGHT_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in PAINT_WEIGHT_engine_init();
+ * free in PAINT_WEIGHT_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in PAINT_WEIGHT_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ PAINT_WEIGHT_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +117,10 @@ static PAINT_WEIGHT_Data *vedata;
* (Optional) */
static void PAINT_WEIGHT_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("PaintWeightMode");
- PAINT_WEIGHT_TextureList *txl = vedata->txl;
- PAINT_WEIGHT_FramebufferList *fbl = vedata->fbl;
- PAINT_WEIGHT_StorageList *stl = vedata->stl;
+ PAINT_WEIGHT_Data *ved = DRW_viewport_engine_data_get("PaintWeightMode");
+ PAINT_WEIGHT_TextureList *txl = ved->txl;
+ PAINT_WEIGHT_FramebufferList *fbl = ved->fbl;
+ PAINT_WEIGHT_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +139,8 @@ static void PAINT_WEIGHT_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +148,9 @@ static void PAINT_WEIGHT_engine_init(void)
* Assume that all Passes are NULL */
static void PAINT_WEIGHT_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("PaintWeightMode");
- PAINT_WEIGHT_PassList *psl = vedata->psl;
- PAINT_WEIGHT_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("PaintWeightMode");
+ PAINT_WEIGHT_PassList *psl = g_data.vedata->psl;
+ PAINT_WEIGHT_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +161,16 @@ static void PAINT_WEIGHT_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +178,8 @@ static void PAINT_WEIGHT_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void PAINT_WEIGHT_cache_populate(Object *ob)
{
- PAINT_WEIGHT_PassList *psl = vedata->psl;
- PAINT_WEIGHT_StorageList *stl = vedata->stl;
+ PAINT_WEIGHT_PassList *psl = g_data.vedata->psl;
+ PAINT_WEIGHT_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +188,15 @@ static void PAINT_WEIGHT_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void PAINT_WEIGHT_cache_finish(void)
{
- PAINT_WEIGHT_PassList *psl = vedata->psl;
- PAINT_WEIGHT_StorageList *stl = vedata->stl;
+ PAINT_WEIGHT_PassList *psl = g_data.vedata->psl;
+ PAINT_WEIGHT_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +207,7 @@ static void PAINT_WEIGHT_draw_scene(void)
{
PAINT_WEIGHT_Data *ved = DRW_viewport_engine_data_get("PaintWeightMode");
PAINT_WEIGHT_PassList *psl = ved->psl;
- PAINT_WEIGHT_FramebufferList *fbl = vedata->fbl;
+ PAINT_WEIGHT_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c
index 4c36e1dd1a7..393268f81c2 100644
--- a/source/blender/draw/modes/particle_mode.c
+++ b/source/blender/draw/modes/particle_mode.c
@@ -85,26 +85,24 @@ typedef struct PARTICLE_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in PARTICLE_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in PARTICLE_engine_init();
- * free in PARTICLE_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static PARTICLE_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in PARTICLE_engine_init();
+ * free in PARTICLE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in PARTICLE_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ PARTICLE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +111,10 @@ static PARTICLE_Data *vedata;
* (Optional) */
static void PARTICLE_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("ParticleMode");
- PARTICLE_TextureList *txl = vedata->txl;
- PARTICLE_FramebufferList *fbl = vedata->fbl;
- PARTICLE_StorageList *stl = vedata->stl;
+ PARTICLE_Data *ved = DRW_viewport_engine_data_get("ParticleMode");
+ PARTICLE_TextureList *txl = ved->txl;
+ PARTICLE_FramebufferList *fbl = ved->fbl;
+ PARTICLE_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +133,8 @@ static void PARTICLE_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +142,9 @@ static void PARTICLE_engine_init(void)
* Assume that all Passes are NULL */
static void PARTICLE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("ParticleMode");
- PARTICLE_PassList *psl = vedata->psl;
- PARTICLE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("ParticleMode");
+ PARTICLE_PassList *psl = g_data.vedata->psl;
+ PARTICLE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +155,16 @@ static void PARTICLE_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +172,8 @@ static void PARTICLE_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void PARTICLE_cache_populate(Object *ob)
{
- PARTICLE_PassList *psl = vedata->psl;
- PARTICLE_StorageList *stl = vedata->stl;
+ PARTICLE_PassList *psl = g_data.vedata->psl;
+ PARTICLE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +182,15 @@ static void PARTICLE_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void PARTICLE_cache_finish(void)
{
- PARTICLE_PassList *psl = vedata->psl;
- PARTICLE_StorageList *stl = vedata->stl;
+ PARTICLE_PassList *psl = g_data.vedata->psl;
+ PARTICLE_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +201,7 @@ static void PARTICLE_draw_scene(void)
{
PARTICLE_Data *ved = DRW_viewport_engine_data_get("ParticleMode");
PARTICLE_PassList *psl = ved->psl;
- PARTICLE_FramebufferList *fbl = vedata->fbl;
+ PARTICLE_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index 3e22643bbdd..184d8ae85e5 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -85,26 +85,24 @@ typedef struct POSE_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in POSE_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in POSE_engine_init();
- * free in POSE_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static POSE_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in POSE_engine_init();
+ * free in POSE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in POSE_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ POSE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +111,10 @@ static POSE_Data *vedata;
* (Optional) */
static void POSE_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("PoseMode");
- POSE_TextureList *txl = vedata->txl;
- POSE_FramebufferList *fbl = vedata->fbl;
- POSE_StorageList *stl = vedata->stl;
+ POSE_Data *ved = DRW_viewport_engine_data_get("PoseMode");
+ POSE_TextureList *txl = ved->txl;
+ POSE_FramebufferList *fbl = ved->fbl;
+ POSE_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +133,8 @@ static void POSE_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +142,9 @@ static void POSE_engine_init(void)
* Assume that all Passes are NULL */
static void POSE_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("PoseMode");
- POSE_PassList *psl = vedata->psl;
- POSE_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("PoseMode");
+ POSE_PassList *psl = g_data.vedata->psl;
+ POSE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +155,16 @@ static void POSE_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +172,8 @@ static void POSE_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void POSE_cache_populate(Object *ob)
{
- POSE_PassList *psl = vedata->psl;
- POSE_StorageList *stl = vedata->stl;
+ POSE_PassList *psl = g_data.vedata->psl;
+ POSE_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +182,15 @@ static void POSE_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void POSE_cache_finish(void)
{
- POSE_PassList *psl = vedata->psl;
- POSE_StorageList *stl = vedata->stl;
+ POSE_PassList *psl = g_data.vedata->psl;
+ POSE_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +201,7 @@ static void POSE_draw_scene(void)
{
POSE_Data *ved = DRW_viewport_engine_data_get("PoseMode");
POSE_PassList *psl = ved->psl;
- POSE_FramebufferList *fbl = vedata->fbl;
+ POSE_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
diff --git a/source/blender/draw/modes/sculpt_mode.c b/source/blender/draw/modes/sculpt_mode.c
index d67ff581f39..f25f21bfbda 100644
--- a/source/blender/draw/modes/sculpt_mode.c
+++ b/source/blender/draw/modes/sculpt_mode.c
@@ -85,26 +85,24 @@ typedef struct SCULPT_Data {
/* *********** STATIC *********** */
-/* This keeps the references of the shading groups for
- * easy access in SCULPT_cache_populate() */
-static DRWShadingGroup *group;
-
-/* If needed, contains all global/Theme colors
- * Add needed theme colors / values to DRW_globals_update() and update UBO
- * Not needed for constant color. */
-extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
-extern struct GlobalsUboStorage ts; /* draw_common.c */
-
-/* Custom shaders :
- * Add sources to source/blender/draw/modes/shaders
- * init in SCULPT_engine_init();
- * free in SCULPT_engine_free(); */
-static struct GPUShader *custom_shader = NULL;
-
-/* This keeps the reference of the viewport engine data because
- * DRW_viewport_engine_data_get is slow and we don't want to
- * call it for every object */
-static SCULPT_Data *vedata;
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in SCULPT_engine_init();
+ * free in SCULPT_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ /* This keeps the references of the shading groups for
+ * easy access in SCULPT_cache_populate() */
+ DRWShadingGroup *group;
+
+ /* This keeps the reference of the viewport engine data because
+ * DRW_viewport_engine_data_get is slow and we don't want to
+ * call it for every object */
+ SCULPT_Data *vedata;
+} g_data = {NULL}; /* Transient data */
/* *********** FUNCTIONS *********** */
@@ -113,10 +111,10 @@ static SCULPT_Data *vedata;
* (Optional) */
static void SCULPT_engine_init(void)
{
- vedata = DRW_viewport_engine_data_get("SculptMode");
- SCULPT_TextureList *txl = vedata->txl;
- SCULPT_FramebufferList *fbl = vedata->fbl;
- SCULPT_StorageList *stl = vedata->stl;
+ SCULPT_Data *ved = DRW_viewport_engine_data_get("SculptMode");
+ SCULPT_TextureList *txl = ved->txl;
+ SCULPT_FramebufferList *fbl = ved->fbl;
+ SCULPT_StorageList *stl = ved->stl;
UNUSED_VARS(txl, fbl, stl);
@@ -135,8 +133,8 @@ static void SCULPT_engine_init(void)
* tex, 2);
*/
- if (!custom_shader) {
- custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
}
}
@@ -144,9 +142,9 @@ static void SCULPT_engine_init(void)
* Assume that all Passes are NULL */
static void SCULPT_cache_init(void)
{
- vedata = DRW_viewport_engine_data_get("SculptMode");
- SCULPT_PassList *psl = vedata->psl;
- SCULPT_StorageList *stl = vedata->stl;
+ g_data.vedata = DRW_viewport_engine_data_get("SculptMode");
+ SCULPT_PassList *psl = g_data.vedata->psl;
+ SCULPT_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(stl);
@@ -157,16 +155,16 @@ static void SCULPT_cache_init(void)
/* Create a shadingGroup using a function in draw_common.c or custom one */
/*
- * group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * g_data.group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
* -- or --
- * group = DRW_shgroup_create(custom_shader, psl->pass);
+ * g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
*/
- group = DRW_shgroup_create(custom_shader, psl->pass);
+ g_data.group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
/* Uniforms need a pointer to it's value so be sure it's accessible at
* any given time (i.e. use static vars) */
static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
- DRW_shgroup_uniform_vec4(group, "color", color, 1);
+ DRW_shgroup_uniform_vec4(g_data.group, "color", color, 1);
}
}
@@ -174,8 +172,8 @@ static void SCULPT_cache_init(void)
/* Add geometry to shadingGroups. Execute for each objects */
static void SCULPT_cache_populate(Object *ob)
{
- SCULPT_PassList *psl = vedata->psl;
- SCULPT_StorageList *stl = vedata->stl;
+ SCULPT_PassList *psl = g_data.vedata->psl;
+ SCULPT_StorageList *stl = g_data.vedata->stl;
UNUSED_VARS(psl, stl);
@@ -184,15 +182,15 @@ static void SCULPT_cache_populate(Object *ob)
struct Batch *geom = DRW_cache_surface_get(ob);
/* Add geom to a shading group */
- DRW_shgroup_call_add(group, geom, ob->obmat);
+ DRW_shgroup_call_add(g_data.group, geom, ob->obmat);
}
}
/* Optional: Post-cache_populate callback */
static void SCULPT_cache_finish(void)
{
- SCULPT_PassList *psl = vedata->psl;
- SCULPT_StorageList *stl = vedata->stl;
+ SCULPT_PassList *psl = g_data.vedata->psl;
+ SCULPT_StorageList *stl = g_data.vedata->stl;
/* Do something here! dependant on the objects gathered */
UNUSED_VARS(psl, stl);
@@ -203,7 +201,7 @@ static void SCULPT_draw_scene(void)
{
SCULPT_Data *ved = DRW_viewport_engine_data_get("SculptMode");
SCULPT_PassList *psl = ved->psl;
- SCULPT_FramebufferList *fbl = vedata->fbl;
+ SCULPT_FramebufferList *fbl = ved->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();