[Bf-blender-cvs] [e54d8eeab2e] blender2.8: Draw Manager: Make Viewport Data passed by the manager call.
Clément Foucault
noreply at git.blender.org
Mon Mar 27 14:08:51 CEST 2017
Commit: e54d8eeab2eac9b98bb57a886eb334a812f6487a
Author: Clément Foucault
Date: Sun Mar 26 19:10:53 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBe54d8eeab2eac9b98bb57a886eb334a812f6487a
Draw Manager: Make Viewport Data passed by the manager call.
===================================================================
M source/blender/draw/engines/clay/clay.c
M source/blender/draw/engines/eevee/eevee.c
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
M source/blender/draw/modes/edit_armature_mode.c
M source/blender/draw/modes/edit_curve_mode.c
M source/blender/draw/modes/edit_lattice_mode.c
M source/blender/draw/modes/edit_mesh_mode.c
M source/blender/draw/modes/edit_metaball_mode.c
M source/blender/draw/modes/edit_surface_mode.c
M source/blender/draw/modes/edit_text_mode.c
M source/blender/draw/modes/object_mode.c
M source/blender/draw/modes/paint_texture_mode.c
M source/blender/draw/modes/paint_vertex_mode.c
M source/blender/draw/modes/paint_weight_mode.c
M source/blender/draw/modes/particle_mode.c
M source/blender/draw/modes/pose_mode.c
M source/blender/draw/modes/sculpt_mode.c
===================================================================
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index 9a2cab12730..750e6f4ebfe 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -275,12 +275,11 @@ RenderEngineSettings *CLAY_render_settings_create(void)
return (RenderEngineSettings *)settings;
}
-static void CLAY_engine_init(void)
+static void CLAY_engine_init(void *vedata)
{
- CLAY_Data *ved = DRW_viewport_engine_data_get("Clay");
- CLAY_StorageList *stl = ved->stl;
- CLAY_TextureList *txl = ved->txl;
- CLAY_FramebufferList *fbl = ved->fbl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+ CLAY_TextureList *txl = ((CLAY_Data *)vedata)->txl;
+ CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
/* Create Texture Array */
if (!e_data.matcap_array) {
@@ -433,10 +432,9 @@ static void CLAY_engine_init(void)
}
}
-static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *material_id)
+static DRWShadingGroup *CLAY_shgroup_create(CLAY_Data *vedata, DRWPass *pass, int *material_id)
{
- CLAY_Data *vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_TextureList *txl = vedata->txl;
+ CLAY_TextureList *txl = ((CLAY_Data *)vedata)->txl;
const int depthloc = 0, matcaploc = 1, jitterloc = 2, sampleloc = 3;
DRWShadingGroup *grp = DRW_shgroup_create(e_data.clay_sh, pass);
@@ -556,7 +554,7 @@ static void override_setting(CollectionEngineSettings *ces, const char *name, vo
}
}
-static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl)
+static DRWShadingGroup *CLAY_object_shgrp_get(CLAY_Data *vedata, Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl)
{
DRWShadingGroup **shgrps = stl->storage->shgrps;
MaterialEngineSettingsClay *settings = DRW_render_settings_get(NULL, RE_engine_id_BLENDER_CLAY);
@@ -591,7 +589,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, &e_data.ubo_mat_idxs[id]);
+ shgrps[id] = CLAY_shgroup_create(vedata, 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);
@@ -601,11 +599,10 @@ static DRWShadingGroup *CLAY_object_shgrp_get(Object *ob, CLAY_StorageList *stl,
return shgrps[id];
}
-static void CLAY_cache_init(void)
+static void CLAY_cache_init(void *vedata)
{
- g_data.vedata = DRW_viewport_engine_data_get("Clay");
- CLAY_PassList *psl = g_data.vedata->psl;
- CLAY_StorageList *stl = g_data.vedata->stl;
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
/* Depth Pass */
{
@@ -624,10 +621,10 @@ static void CLAY_cache_init(void)
}
}
-static void CLAY_cache_populate(Object *ob)
+static void CLAY_cache_populate(void *vedata, Object *ob)
{
- CLAY_PassList *psl = g_data.vedata->psl;
- CLAY_StorageList *stl = g_data.vedata->stl;
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
struct Batch *geom;
DRWShadingGroup *clay_shgrp;
@@ -646,23 +643,23 @@ static void CLAY_cache_populate(Object *ob)
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);
+ clay_shgrp = CLAY_object_shgrp_get(vedata, ob, stl, psl);
DRW_shgroup_call_add(clay_shgrp, geom, ob->obmat);
}
}
-static void CLAY_cache_finish(void)
+static void CLAY_cache_finish(void *vedata)
{
- CLAY_StorageList *stl = g_data.vedata->stl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
DRW_uniformbuffer_update(stl->mat_ubo, &stl->storage->mat_storage);
}
-static void CLAY_draw_scene(void)
+static void CLAY_draw_scene(void *vedata)
{
- CLAY_Data *ved = DRW_viewport_engine_data_get("Clay");
- CLAY_PassList *psl = ved->psl;
- CLAY_FramebufferList *fbl = ved->fbl;
+
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
/* Pass 1 : Depth pre-pass */
diff --git a/source/blender/draw/engines/eevee/eevee.c b/source/blender/draw/engines/eevee/eevee.c
index 2f058e3e6e3..bb17a6b46b0 100644
--- a/source/blender/draw/engines/eevee/eevee.c
+++ b/source/blender/draw/engines/eevee/eevee.c
@@ -54,12 +54,11 @@ extern char datatoc_tonemap_frag_glsl[];
/* *********** FUNCTIONS *********** */
-static void EEVEE_engine_init(void)
+static void EEVEE_engine_init(void *vedata)
{
- 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;
+ EEVEE_TextureList *txl = ((EEVEE_Data *)vedata)->txl;
+ EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_32};
@@ -79,7 +78,6 @@ static void EEVEE_engine_init(void)
if (!e_data.tonemap) {
e_data.tonemap = DRW_shader_create_fullscreen(datatoc_tonemap_frag_glsl, NULL);
}
- UNUSED_VARS(stl);
if (stl->lights_info == NULL)
EEVEE_lights_init(stl);
@@ -87,12 +85,11 @@ static void EEVEE_engine_init(void)
// EEVEE_lights_update(stl);
}
-static void EEVEE_cache_init(void)
+static void EEVEE_cache_init(void *vedata)
{
- g_data.vedata = DRW_viewport_engine_data_get(EEVEE_ENGINE);
- EEVEE_PassList *psl = g_data.vedata->psl;
- EEVEE_TextureList *txl = g_data.vedata->txl;
- EEVEE_StorageList *stl = g_data.vedata->stl;
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_TextureList *txl = ((EEVEE_Data *)vedata)->txl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
{
psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
@@ -138,9 +135,9 @@ static void EEVEE_cache_init(void)
EEVEE_lights_cache_init(stl);
}
-static void EEVEE_cache_populate(Object *ob)
+static void EEVEE_cache_populate(void *vedata, Object *ob)
{
- EEVEE_StorageList *stl = g_data.vedata->stl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
if (ob->type == OB_MESH) {
CollectionEngineSettings *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, "");
@@ -163,18 +160,17 @@ static void EEVEE_cache_populate(Object *ob)
}
}
-static void EEVEE_cache_finish(void)
+static void EEVEE_cache_finish(void *vedata)
{
- EEVEE_StorageList *stl = g_data.vedata->stl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
EEVEE_lights_cache_finish(stl);
}
-static void EEVEE_draw_scene(void)
+static void EEVEE_draw_scene(void *vedata)
{
- EEVEE_Data *ved = DRW_viewport_engine_data_get(EEVEE_ENGINE);
- EEVEE_PassList *psl = ved->psl;
- EEVEE_FramebufferList *fbl = ved->fbl;
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
/* Default framebuffer and texture */
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
@@ -218,7 +214,7 @@ static void EEVEE_collection_settings_create(RenderEngine *UNUSED(engine), Colle
DrawEngineType draw_engine_eevee_type = {
NULL, NULL,
- N_("Clay"),
+ N_("Eevee"),
&EEVEE_engine_init,
&EEVEE_engine_free,
&EEVEE_cache_init,
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 3aabb92be79..1f74ca5981a 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -72,15 +72,15 @@ typedef struct DrawEngineType {
char idname[32];
- void (*engine_init)(void);
+ void (*engine_init)(void *vedata);
void (*engine_free)(void);
- void (*cache_init)(void);
- void (*cache_populate)(struct Object *ob);
- void (*cache_finish)(void);
+ void (*cache_init)(void *vedata);
+ void (*cache_populate)(void *vedata, struct Object *ob);
+ void (*cache_finish)(void *vedata);
- void (*draw_background)(void);
- void (*draw_scene)(void);
+ void (*draw_background)(void *vedata);
+ void (*draw_scene)(void *vedata);
} DrawEngineType;
#ifndef __DRW_ENGINE_H__
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index ee51ec4276f..43a0937a2f5 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1394,8 +1394,9 @@ static void DRW_engines_init(void)
{
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
if (engine->engine_init) {
- engine->engine_init();
+ engine->engine_init(data);
}
}
}
@@ -1404,8 +1405,9 @@ static void DRW_engines_cache_init(void)
{
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
if (engine->cache_init) {
- engine->cache_init();
+ engine->cache_init(data);
}
}
}
@@ -1414,8 +1416,9 @@ static void DRW_engines_cache_populate(Object *ob)
{
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
if (engine->cache_populate) {
- engine->cache_populate(ob);
+ engine->cache_populate(data, ob);
}
}
}
@@ -1424,8 +1427,9 @@ static void DRW_engines_cache_finish(void)
{
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname);
if (engine->cache_finish) {
- engine->cache_finish();
+ engine->cache_finish(data);
}
}
}
@@ -1434,8 +1438,9 @@ static void DRW_engines_draw_background(void)
{
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
DrawEngineType *engine = link->data;
+ ViewportEngineDat
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list