diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-29 19:45:14 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-29 19:45:14 +0300 |
commit | 172aa404d83de2f1f67003d21c2194da72b0ef8b (patch) | |
tree | 0323872e8f71acc4a52dfb4df323018854966755 | |
parent | 62d5a0353d708fb8c30af2ef35ce2288bae4cb51 (diff) | |
parent | 75eb219a2e21abe9c9909d76f85abbb538d8ef9f (diff) |
Merge branch 'blender2.8' into id_override_staticid_override_static
-rw-r--r-- | source/blender/blenkernel/BKE_group.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_object.h | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/group.c | 12 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 116 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object_update.c | 52 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes.cc | 2 | ||||
-rw-r--r-- | source/blender/draw/engines/basic/basic_engine.c | 28 | ||||
-rw-r--r-- | source/blender/draw/engines/clay/clay_engine.c | 36 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 43 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_lightprobes.c | 407 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/default_frag.glsl | 2 | ||||
-rw-r--r-- | source/blender/draw/engines/external/external_engine.c | 32 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_armature.c | 90 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 188 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 7 |
15 files changed, 507 insertions, 518 deletions
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h index 9aab6950496..1d35e6ab9fc 100644 --- a/source/blender/blenkernel/BKE_group.h +++ b/source/blender/blenkernel/BKE_group.h @@ -52,7 +52,6 @@ bool BKE_group_object_exists(struct Group *group, struct Object *ob); bool BKE_group_object_cyclic_check(struct Main *bmain, struct Object *object, struct Group *group); bool BKE_group_is_animated(struct Group *group, struct Object *parent); -void BKE_group_tag_recalc(struct Group *group); void BKE_group_handle_recalc_and_update(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *parent, struct Group *group); #endif /* __BKE_GROUP_H__ */ diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 31125545670..2b183906f57 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -184,7 +184,6 @@ void BKE_object_tfm_protected_restore(struct Object *ob, /* Dependency graph evaluation callbacks. */ void BKE_object_eval_local_transform(const struct EvaluationContext *eval_ctx, - struct Scene *scene, struct Object *ob); void BKE_object_eval_parent(const struct EvaluationContext *eval_ctx, struct Scene *scene, @@ -194,8 +193,9 @@ void BKE_object_eval_constraints(const struct EvaluationContext *eval_ctx, struct Object *ob); void BKE_object_eval_done(const struct EvaluationContext *eval_ctx, struct Object *ob); +bool BKE_object_eval_proxy_copy(const struct EvaluationContext *eval_ct, + struct Object *object); void BKE_object_eval_uber_transform(const struct EvaluationContext *eval_ctx, - struct Scene *scene, struct Object *ob); void BKE_object_eval_uber_data(const struct EvaluationContext *eval_ctx, struct Scene *scene, @@ -205,6 +205,10 @@ void BKE_object_eval_cloth(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *object); +void BKE_object_eval_transform_all(const struct EvaluationContext *eval_ctx, + struct Scene *scene, + struct Object *object); + void BKE_object_eval_update_shading(const struct EvaluationContext *eval_ctx, struct Object *object); void BKE_object_data_select_update(const struct EvaluationContext *eval_ctx, @@ -226,6 +230,7 @@ void BKE_object_handle_update_ex( struct Scene *scene, struct Object *ob, struct RigidBodyWorld *rbw, const bool do_proxy_update); + void BKE_object_sculpt_modifiers_changed(struct Object *ob); int BKE_object_obdata_texspace_get(struct Object *ob, short **r_texflag, float **r_loc, float **r_size, float **r_rot); diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c index 5e5f8114ead..0fd6685242f 100644 --- a/source/blender/blenkernel/intern/group.c +++ b/source/blender/blenkernel/intern/group.c @@ -253,18 +253,6 @@ Group *BKE_group_object_find(Group *group, Object *ob) return NULL; } -void BKE_group_tag_recalc(Group *group) -{ - GroupObject *go; - - if (group == NULL) return; - - for (go = group->gobject.first; go; go = go->next) { - if (go->ob) - go->ob->recalc = go->recalc; - } -} - bool BKE_group_is_animated(Group *group, Object *UNUSED(parent)) { GroupObject *go; diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 3795e1bbf0e..f58a0d76b6a 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -2664,6 +2664,28 @@ bool BKE_object_parent_loop_check(const Object *par, const Object *ob) return BKE_object_parent_loop_check(par->parent, ob); } +static void object_handle_update_proxy(const EvaluationContext *eval_ctx, + Scene *scene, + Object *object, + const bool do_proxy_update) +{ + /* The case when this is a group proxy, object_update is called in group.c */ + if (object->proxy == NULL) { + return; + } + /* set pointer in library proxy target, for copying, but restore it */ + object->proxy->proxy_from = object; + // printf("set proxy pointer for later group stuff %s\n", ob->id.name); + + /* the no-group proxy case, we call update */ + if (object->proxy_group == NULL) { + if (do_proxy_update) { + // printf("call update, lib ob %s proxy %s\n", ob->proxy->id.name, ob->id.name); + BKE_object_handle_update(eval_ctx, scene, object->proxy); + } + } +} + /* proxy rule: lib_object->proxy_from == the one we borrow from, only set temporal and cleared here */ /* local_object->proxy == pointer to library object, saved in files and read */ @@ -2677,75 +2699,49 @@ void BKE_object_handle_update_ex(const EvaluationContext *eval_ctx, RigidBodyWorld *rbw, const bool do_proxy_update) { - if (ob->recalc & OB_RECALC_ALL) { - /* speed optimization for animation lookups */ - if (ob->pose) { - BKE_pose_channels_hash_make(ob->pose); - if (ob->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) { - BKE_pose_update_constraint_flags(ob->pose); - } + if ((ob->recalc & OB_RECALC_ALL) == 0) { + object_handle_update_proxy(eval_ctx, scene, ob, do_proxy_update); + return; + } + /* Speed optimization for animation lookups. */ + if (ob->pose != NULL) { + BKE_pose_channels_hash_make(ob->pose); + if (ob->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) { + BKE_pose_update_constraint_flags(ob->pose); } - - if (ob->recalc & OB_RECALC_DATA) { - if (ob->type == OB_ARMATURE) { - /* this happens for reading old files and to match library armatures - * with poses we do it ahead of BKE_object_where_is_calc to ensure animation - * is evaluated on the rebuilt pose, otherwise we get incorrect poses - * on file load */ - if (ob->pose == NULL || (ob->pose->flag & POSE_RECALC)) - BKE_pose_rebuild(ob, ob->data); - } + } + if (ob->recalc & OB_RECALC_DATA) { + if (ob->type == OB_ARMATURE) { + /* this happens for reading old files and to match library armatures + * with poses we do it ahead of BKE_object_where_is_calc to ensure animation + * is evaluated on the rebuilt pose, otherwise we get incorrect poses + * on file load */ + if (ob->pose == NULL || (ob->pose->flag & POSE_RECALC)) + BKE_pose_rebuild(ob, ob->data); } - - /* XXX new animsys warning: depsgraph tag OB_RECALC_DATA should not skip drivers, - * which is only in BKE_object_where_is_calc now */ - /* XXX: should this case be OB_RECALC_OB instead? */ - if (ob->recalc & OB_RECALC_ALL) { - - if (G.debug & G_DEBUG_DEPSGRAPH) - printf("recalcob %s\n", ob->id.name + 2); - - /* handle proxy copy for target */ - if (ID_IS_LINKED(ob) && ob->proxy_from) { - // printf("ob proxy copy, lib ob %s proxy %s\n", ob->id.name, ob->proxy_from->id.name); - if (ob->proxy_from->proxy_group) { /* transform proxy into group space */ - Object *obg = ob->proxy_from->proxy_group; - float imat[4][4]; - invert_m4_m4(imat, obg->obmat); - mul_m4_m4m4(ob->obmat, imat, ob->proxy_from->obmat); - if (obg->dup_group) { /* should always be true */ - add_v3_v3(ob->obmat[3], obg->dup_group->dupli_ofs); - } - } - else - copy_m4_m4(ob->obmat, ob->proxy_from->obmat); - } - else - BKE_object_where_is_calc_ex(eval_ctx, scene, rbw, ob, NULL); + } + /* XXX new animsys warning: depsgraph tag OB_RECALC_DATA should not skip drivers, + * which is only in BKE_object_where_is_calc now */ + /* XXX: should this case be OB_RECALC_OB instead? */ + if (ob->recalc & OB_RECALC_ALL) { + if (G.debug & G_DEBUG_DEPSGRAPH) { + printf("recalcob %s\n", ob->id.name + 2); } - - if (ob->recalc & OB_RECALC_DATA) { - BKE_object_handle_data_update(eval_ctx, scene, ob); + /* Handle proxy copy for target. */ + if (!BKE_object_eval_proxy_copy(eval_ctx, ob)) { + BKE_object_where_is_calc_ex(eval_ctx, scene, rbw, ob, NULL); } + } - ob->recalc &= ~OB_RECALC_ALL; + if (ob->recalc & OB_RECALC_DATA) { + BKE_object_handle_data_update(eval_ctx, scene, ob); } - /* the case when this is a group proxy, object_update is called in group.c */ - if (ob->proxy) { - /* set pointer in library proxy target, for copying, but restore it */ - ob->proxy->proxy_from = ob; - // printf("set proxy pointer for later group stuff %s\n", ob->id.name); + ob->recalc &= ~OB_RECALC_ALL; - /* the no-group proxy case, we call update */ - if (ob->proxy_group == NULL) { - if (do_proxy_update) { - // printf("call update, lib ob %s proxy %s\n", ob->proxy->id.name, ob->id.name); - BKE_object_handle_update(eval_ctx, scene, ob->proxy); - } - } - } + object_handle_update_proxy(eval_ctx, scene, ob, do_proxy_update); } + /* WARNING: "scene" here may not be the scene object actually resides in. * When dealing with background-sets, "scene" is actually the active scene. * e.g. "scene" <-- set 1 <-- set 2 ("ob" lives here) <-- set 3 <-- ... <-- set n diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index 1e8de416ea9..f5f521e119d 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -68,7 +68,6 @@ #define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf void BKE_object_eval_local_transform(const EvaluationContext *UNUSED(eval_ctx), - Scene *UNUSED(scene), Object *ob) { DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob); @@ -273,33 +272,36 @@ void BKE_object_handle_data_update( /* quick cache removed */ } -void BKE_object_eval_uber_transform(const EvaluationContext *UNUSED(eval_ctx), - Scene *UNUSED(scene), - Object *ob) +bool BKE_object_eval_proxy_copy(const EvaluationContext *UNUSED(eval_ctx), + Object *object) { - /* TODO(sergey): Currently it's a duplicate of logic in BKE_object_handle_update_ex(). */ - // XXX: it's almost redundant now... - /* Handle proxy copy for target, */ - if (ID_IS_LINKED(ob) && ob->proxy_from) { - if (ob->proxy_from->proxy_group) { + if (ID_IS_LINKED(object) && object->proxy_from) { + if (object->proxy_from->proxy_group) { /* Transform proxy into group space. */ - Object *obg = ob->proxy_from->proxy_group; + Object *obg = object->proxy_from->proxy_group; float imat[4][4]; invert_m4_m4(imat, obg->obmat); - mul_m4_m4m4(ob->obmat, imat, ob->proxy_from->obmat); + mul_m4_m4m4(object->obmat, imat, object->proxy_from->obmat); /* Should always be true. */ if (obg->dup_group) { - add_v3_v3(ob->obmat[3], obg->dup_group->dupli_ofs); + add_v3_v3(object->obmat[3], obg->dup_group->dupli_ofs); } } - else - copy_m4_m4(ob->obmat, ob->proxy_from->obmat); + else { + copy_m4_m4(object->obmat, object->proxy_from->obmat); + } + return true; } + return false; +} - ob->recalc &= ~(OB_RECALC_OB | OB_RECALC_TIME); - if (ob->data == NULL) { - ob->recalc &= ~OB_RECALC_DATA; +void BKE_object_eval_uber_transform(const EvaluationContext *eval_ctx, Object *object) +{ + BKE_object_eval_proxy_copy(eval_ctx, object); + object->recalc &= ~(OB_RECALC_OB | OB_RECALC_TIME); + if (object->data == NULL) { + object->recalc &= ~OB_RECALC_DATA; } } @@ -391,6 +393,22 @@ void BKE_object_eval_cloth(const EvaluationContext *UNUSED(eval_ctx), BKE_ptcache_object_reset(scene, object, PTCACHE_RESET_DEPSGRAPH); } +void BKE_object_eval_transform_all(const EvaluationContext *eval_ctx, + Scene *scene, + Object *object) +{ + /* This mimics full transform update chain from new depsgraph. */ + BKE_object_eval_local_transform(eval_ctx, object); + if (object->parent != NULL) { + BKE_object_eval_parent(eval_ctx, scene, object); + } + if (!BLI_listbase_is_empty(&object->constraints)) { + BKE_object_eval_constraints(eval_ctx, scene, object); + } + BKE_object_eval_uber_transform(eval_ctx, object); + BKE_object_eval_done(eval_ctx, object); +} + void BKE_object_eval_update_shading(const EvaluationContext *UNUSED(eval_ctx), Object *object) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index a2a0f633fd9..121db9a4c5f 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -583,7 +583,6 @@ void DepsgraphNodeBuilder::build_object_transform(Object *object) op_node = add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM, function_bind(BKE_object_eval_local_transform, _1, - scene_cow, ob_cow), DEG_OPCODE_TRANSFORM_LOCAL); op_node->set_as_entry(); @@ -607,7 +606,6 @@ void DepsgraphNodeBuilder::build_object_transform(Object *object) add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM, function_bind(BKE_object_eval_uber_transform, _1, - scene_cow, ob_cow), DEG_OPCODE_TRANSFORM_OBJECT_UBEREVAL); diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c index b41420ab95b..10dfe7b5996 100644 --- a/source/blender/draw/engines/basic/basic_engine.c +++ b/source/blender/draw/engines/basic/basic_engine.c @@ -111,7 +111,7 @@ typedef struct BASIC_PrivateData { /* Functions */ -static void BASIC_engine_init(void *vedata) +static void basic_engine_init(void *vedata) { BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl; BASIC_TextureList *txl = ((BASIC_Data *)vedata)->txl; @@ -144,7 +144,7 @@ static void BASIC_engine_init(void *vedata) #endif } -static void BASIC_cache_init(void *vedata) +static void basic_cache_init(void *vedata) { BASIC_PassList *psl = ((BASIC_Data *)vedata)->psl; BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl; @@ -174,7 +174,7 @@ static void BASIC_cache_init(void *vedata) } } -static void BASIC_cache_populate(void *vedata, Object *ob) +static void basic_cache_populate(void *vedata, Object *ob) { BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl; @@ -193,14 +193,14 @@ static void BASIC_cache_populate(void *vedata, Object *ob) } } -static void BASIC_cache_finish(void *vedata) +static void basic_cache_finish(void *vedata) { BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl; UNUSED_VARS(stl); } -static void BASIC_draw_scene(void *vedata) +static void basic_draw_scene(void *vedata) { BASIC_PassList *psl = ((BASIC_Data *)vedata)->psl; @@ -244,24 +244,24 @@ static void BASIC_draw_scene(void *vedata) } } -static void BASIC_engine_free(void) +static void basic_engine_free(void) { /* all shaders are builtin */ } -static const DrawEngineDataSize BASIC_data_size = DRW_VIEWPORT_DATA_SIZE(BASIC_Data); +static const DrawEngineDataSize basic_data_size = DRW_VIEWPORT_DATA_SIZE(BASIC_Data); DrawEngineType draw_engine_basic_type = { NULL, NULL, N_("Basic"), - &BASIC_data_size, - &BASIC_engine_init, - &BASIC_engine_free, - &BASIC_cache_init, - &BASIC_cache_populate, - &BASIC_cache_finish, + &basic_data_size, + &basic_engine_init, + &basic_engine_free, + &basic_cache_init, + &basic_cache_populate, + &basic_cache_finish, NULL, - &BASIC_draw_scene, + &basic_draw_scene, NULL, NULL, }; diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c index 5f68af1f615..01f89ae6b1c 100644 --- a/source/blender/draw/engines/clay/clay_engine.c +++ b/source/blender/draw/engines/clay/clay_engine.c @@ -322,7 +322,7 @@ static struct GPUTexture *create_jitter_texture(int num_samples) return DRW_texture_create_2D(64, 64, DRW_TEX_RGB_16, DRW_TEX_FILTER | DRW_TEX_WRAP, &jitter[0][0]); } -static void CLAY_engine_init(void *vedata) +static void clay_engine_init(void *vedata) { CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl; CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl; @@ -702,7 +702,7 @@ static DRWShadingGroup *CLAY_object_shgrp_default_mode_get( return CLAY_object_shgrp_get(vedata, ob, stl, psl, use_flat); } -static void CLAY_cache_init(void *vedata) +static void clay_cache_init(void *vedata) { CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl; CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl; @@ -746,7 +746,7 @@ static void CLAY_cache_init(void *vedata) } } -static void CLAY_cache_populate(void *vedata, Object *ob) +static void clay_cache_populate(void *vedata, Object *ob) { CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl; CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl; @@ -826,7 +826,7 @@ static void CLAY_cache_populate(void *vedata, Object *ob) } } -static void CLAY_cache_finish(void *vedata) +static void clay_cache_finish(void *vedata) { CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl; @@ -834,7 +834,7 @@ static void CLAY_cache_finish(void *vedata) DRW_uniformbuffer_update(stl->hair_mat_ubo, &stl->storage->hair_mat_storage); } -static void CLAY_draw_scene(void *vedata) +static void clay_draw_scene(void *vedata) { CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl; @@ -866,7 +866,7 @@ static void CLAY_draw_scene(void *vedata) DRW_draw_pass(psl->hair_pass); } -static void CLAY_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +static void clay_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) { BLI_assert(props && props->type == IDP_GROUP && @@ -885,7 +885,7 @@ static void CLAY_layer_collection_settings_create(RenderEngine *UNUSED(engine), BKE_collection_engine_property_add_float(props, "hair_brightness_randomness", 0.0f); } -static void CLAY_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +static void clay_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) { BLI_assert(props && props->type == IDP_GROUP && @@ -894,7 +894,7 @@ static void CLAY_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProp BKE_collection_engine_property_add_int(props, "ssao_samples", 16); } -static void CLAY_engine_free(void) +static void clay_engine_free(void) { DRW_SHADER_FREE_SAFE(e_data.clay_sh); DRW_SHADER_FREE_SAFE(e_data.clay_flat_sh); @@ -902,19 +902,19 @@ static void CLAY_engine_free(void) DRW_TEXTURE_FREE_SAFE(e_data.matcap_array); } -static const DrawEngineDataSize CLAY_data_size = DRW_VIEWPORT_DATA_SIZE(CLAY_Data); +static const DrawEngineDataSize clay_data_size = DRW_VIEWPORT_DATA_SIZE(CLAY_Data); DrawEngineType draw_engine_clay_type = { NULL, NULL, N_("Clay"), - &CLAY_data_size, - &CLAY_engine_init, - &CLAY_engine_free, - &CLAY_cache_init, - &CLAY_cache_populate, - &CLAY_cache_finish, + &clay_data_size, + &clay_engine_init, + &clay_engine_free, + &clay_cache_init, + &clay_cache_populate, + &clay_cache_finish, NULL, - &CLAY_draw_scene, + &clay_draw_scene, NULL, NULL, }; @@ -923,8 +923,8 @@ RenderEngineType DRW_engine_viewport_clay_type = { NULL, NULL, CLAY_ENGINE, N_("Clay"), RE_INTERNAL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - &CLAY_layer_collection_settings_create, - &CLAY_view_layer_settings_create, + &clay_layer_collection_settings_create, + &clay_view_layer_settings_create, &draw_engine_clay_type, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index 8989213baa0..ed1e3c24029 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -44,7 +44,7 @@ extern GlobalsUboStorage ts; /* *********** FUNCTIONS *********** */ -static void EEVEE_engine_init(void *ved) +static void eevee_engine_init(void *ved) { EEVEE_Data *vedata = (EEVEE_Data *)ved; EEVEE_TextureList *txl = vedata->txl; @@ -82,7 +82,7 @@ static void EEVEE_engine_init(void *ved) } } -static void EEVEE_cache_init(void *vedata) +static void eevee_cache_init(void *vedata) { EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl; EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure(); @@ -101,7 +101,7 @@ static void EEVEE_cache_init(void *vedata) EEVEE_volumes_cache_init(sldata, vedata); } -static void EEVEE_cache_populate(void *vedata, Object *ob) +static void eevee_cache_populate(void *vedata, Object *ob) { EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure(); @@ -149,7 +149,7 @@ static void EEVEE_cache_populate(void *vedata, Object *ob) } } -static void EEVEE_cache_finish(void *vedata) +static void eevee_cache_finish(void *vedata) { EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure(); @@ -158,7 +158,7 @@ static void EEVEE_cache_finish(void *vedata) EEVEE_lightprobes_cache_finish(sldata, vedata); } -static void EEVEE_draw_scene(void *vedata) +static void eevee_draw_scene(void *vedata) { EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl; EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl; @@ -277,7 +277,7 @@ static void EEVEE_draw_scene(void *vedata) stl->g_data->view_updated = false; } -static void EEVEE_view_update(void *vedata) +static void eevee_view_update(void *vedata) { EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl; if (stl->g_data) { @@ -285,7 +285,7 @@ static void EEVEE_view_update(void *vedata) } } -static void EEVEE_id_update(void *UNUSED(vedata), ID *id) +static void eevee_id_update(void *UNUSED(vedata), ID *id) { const ID_Type id_type = GS(id->name); if (id_type == ID_OB) { @@ -305,7 +305,7 @@ static void EEVEE_id_update(void *UNUSED(vedata), ID *id) } } -static void EEVEE_engine_free(void) +static void eevee_engine_free(void) { EEVEE_bloom_free(); EEVEE_depth_of_field_free(); @@ -321,7 +321,7 @@ static void EEVEE_engine_free(void) EEVEE_volumes_free(); } -static void EEVEE_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +static void eevee_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) { BLI_assert(props && props->type == IDP_GROUP && @@ -330,7 +330,7 @@ static void EEVEE_layer_collection_settings_create(RenderEngine *UNUSED(engine), UNUSED_VARS_NDEBUG(props); } -static void EEVEE_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +static void eevee_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) { BLI_assert(props && props->type == IDP_GROUP && @@ -399,28 +399,29 @@ static void EEVEE_view_layer_settings_create(RenderEngine *UNUSED(engine), IDPro BKE_collection_engine_property_add_bool(props, "shadow_high_bitdepth", false); } -static const DrawEngineDataSize EEVEE_data_size = DRW_VIEWPORT_DATA_SIZE(EEVEE_Data); +static const DrawEngineDataSize eevee_data_size = DRW_VIEWPORT_DATA_SIZE(EEVEE_Data); DrawEngineType draw_engine_eevee_type = { NULL, NULL, N_("Eevee"), - &EEVEE_data_size, - &EEVEE_engine_init, - &EEVEE_engine_free, - &EEVEE_cache_init, - &EEVEE_cache_populate, - &EEVEE_cache_finish, - &EEVEE_draw_scene, + &eevee_data_size, + &eevee_engine_init, + &eevee_engine_free, + &eevee_cache_init, + &eevee_cache_populate, + &eevee_cache_finish, + &eevee_draw_scene, NULL, //&EEVEE_draw_scene - &EEVEE_view_update, - &EEVEE_id_update, + &eevee_view_update, + &eevee_id_update, }; RenderEngineType DRW_engine_viewport_eevee_type = { NULL, NULL, EEVEE_ENGINE, N_("Eevee"), RE_INTERNAL | RE_USE_SHADING_NODES, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - &EEVEE_layer_collection_settings_create, &EEVEE_view_layer_settings_create, + &eevee_layer_collection_settings_create, + &eevee_view_layer_settings_create, &draw_engine_eevee_type, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c index d2e65cbdbe3..e1b78602507 100644 --- a/source/blender/draw/engines/eevee/eevee_lightprobes.c +++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c @@ -1260,266 +1260,255 @@ static void lightprobe_cell_world_location_get(EEVEE_LightGrid *egrid, float loc add_v3_v3(r_pos, tmp); } -void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) +static void lightprobes_refresh_world(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) { - EEVEE_TextureList *txl = vedata->txl; EEVEE_PassList *psl = vedata->psl; - EEVEE_StorageList *stl = vedata->stl; EEVEE_LightProbesInfo *pinfo = sldata->probes; - Object *ob; - const DRWContextState *draw_ctx = DRW_context_state_get(); - RegionView3D *rv3d = draw_ctx->rv3d; + render_world_to_probe(sldata, psl); + if (e_data.update_world & PROBE_UPDATE_CUBE) { + glossy_filter_probe(sldata, vedata, psl, 0); + } + if (e_data.update_world & PROBE_UPDATE_GRID) { + diffuse_filter_probe(sldata, vedata, psl, 0); + SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); + DRW_framebuffer_texture_detach(sldata->probe_pool); + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); + DRW_draw_pass(psl->probe_grid_fill); + DRW_framebuffer_texture_detach(sldata->irradiance_rt); + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0); + } + e_data.update_world = 0; + if (!e_data.world_ready_to_shade) { + e_data.world_ready_to_shade = true; + pinfo->num_render_cube = 1; + pinfo->num_render_grid = 1; + } + DRW_viewport_request_redraw(); +} - /* Render world in priority */ - if (e_data.update_world) { - render_world_to_probe(sldata, psl); +static void lightprobes_refresh_initialize_grid(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) +{ + EEVEE_LightProbesInfo *pinfo = sldata->probes; + EEVEE_PassList *psl = vedata->psl; + if (pinfo->grid_initialized) { + /* Gris is already initialized, nothing to do. */ + return; + } + DRW_framebuffer_texture_detach(sldata->probe_pool); + /* Flood fill with world irradiance. */ + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); + DRW_draw_pass(psl->probe_grid_fill); + DRW_framebuffer_texture_detach(sldata->irradiance_rt); + SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); + DRW_draw_pass(psl->probe_grid_fill); + DRW_framebuffer_texture_detach(sldata->irradiance_rt); + SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); + /* Reattach to have a valid framebuffer. */ + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0); + pinfo->grid_initialized = true; +} - if (e_data.update_world & PROBE_UPDATE_CUBE) { - glossy_filter_probe(sldata, vedata, psl, 0); +static void lightprobes_refresh_planar(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) +{ + EEVEE_TextureList *txl = vedata->txl; + Object *ob; + EEVEE_LightProbesInfo *pinfo = sldata->probes; + for (int i = 0; (ob = pinfo->probes_planar_ref[i]) && (i < MAX_PLANAR); i++) { + EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); + if (!ped->need_update) { + continue; } + /* Temporary Remove all planar reflections (avoid lag effect). */ + int tmp_num_planar = pinfo->num_planar; + pinfo->num_planar = 0; + render_scene_to_planar(sldata, vedata, i, ped->viewmat, ped->persmat, ped->planer_eq_offset); + /* Restore */ + pinfo->num_planar = tmp_num_planar; + ped->need_update = false; + ped->probe_id = i; + } + /* If there is at least one planar probe */ + if (pinfo->num_planar > 0 && (vedata->stl->effects->enabled_effects & EFFECT_SSR) != 0) { + const int max_lod = 9; + DRW_stats_group_start("Planar Probe Downsample"); + DRW_framebuffer_recursive_downsample(vedata->fbl->downsample_fb, txl->planar_pool, max_lod, &downsample_planar, vedata); + /* For shading, save max level of the planar map */ + pinfo->lod_planar_max = (float)(max_lod); + DRW_stats_group_end(); + } +} - if (e_data.update_world & PROBE_UPDATE_GRID) { - diffuse_filter_probe(sldata, vedata, psl, 0); - - SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); - - DRW_framebuffer_texture_detach(sldata->probe_pool); - - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); - DRW_draw_pass(psl->probe_grid_fill); - DRW_framebuffer_texture_detach(sldata->irradiance_rt); - - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0); +static void lightprobes_refresh_cube(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) +{ + EEVEE_PassList *psl = vedata->psl; + EEVEE_StorageList *stl = vedata->stl; + EEVEE_LightProbesInfo *pinfo = sldata->probes; + Object *ob; + for (int i = 1; (ob = pinfo->probes_cube_ref[i]) && (i < MAX_PROBE); i++) { + EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); + if (!ped->need_update) { + continue; } - - e_data.update_world = 0; - - if (!e_data.world_ready_to_shade) { - e_data.world_ready_to_shade = true; - pinfo->num_render_cube = 1; - pinfo->num_render_grid = 1; + LightProbe *prb = (LightProbe *)ob->data; + render_scene_to_probe(sldata, vedata, ob->obmat[3], prb->clipsta, prb->clipend); + glossy_filter_probe(sldata, vedata, psl, i); + ped->need_update = false; + ped->probe_id = i; + if (!ped->ready_to_shade) { + pinfo->num_render_cube++; + ped->ready_to_shade = true; } - +#if 0 + printf("Update Cubemap %d\n", i); +#endif DRW_viewport_request_redraw(); - } - else if (true) { /* TODO if at least one probe needs refresh */ - - if (draw_ctx->evil_C != NULL) { - /* Only compute probes if not navigating or in playback */ - struct wmWindowManager *wm = CTX_wm_manager(draw_ctx->evil_C); - if (((rv3d->rflag & RV3D_NAVIGATING) != 0) || ED_screen_animation_no_scrub(wm) != NULL) { - goto update_planar; - } - } - - if (!pinfo->grid_initialized) { - DRW_framebuffer_texture_detach(sldata->probe_pool); - - /* Flood fill with world irradiance. */ - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); - DRW_draw_pass(psl->probe_grid_fill); - DRW_framebuffer_texture_detach(sldata->irradiance_rt); + /* Do not let this frame accumulate. */ + stl->effects->taa_current_sample = 1; - SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); - - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); - DRW_draw_pass(psl->probe_grid_fill); - DRW_framebuffer_texture_detach(sldata->irradiance_rt); - - SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); + /* Only do one probe per frame */ + lightprobes_refresh_planar(sldata, vedata); + return; + } +} - /* reattach to have a valid framebuffer. */ - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0); +static void lightprobes_refresh_all_no_world(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) +{ + EEVEE_PassList *psl = vedata->psl; + EEVEE_StorageList *stl = vedata->stl; + EEVEE_LightProbesInfo *pinfo = sldata->probes; + Object *ob; + const DRWContextState *draw_ctx = DRW_context_state_get(); + RegionView3D *rv3d = draw_ctx->rv3d; - pinfo->grid_initialized = true; + if (draw_ctx->evil_C != NULL) { + /* Only compute probes if not navigating or in playback */ + struct wmWindowManager *wm = CTX_wm_manager(draw_ctx->evil_C); + if (((rv3d->rflag & RV3D_NAVIGATING) != 0) || ED_screen_animation_no_scrub(wm) != NULL) { + lightprobes_refresh_planar(sldata, vedata); + return; } - - /* Reflection probes depend on diffuse lighting thus on irradiance grid, - * so update them first. */ - while (pinfo->updated_bounce < pinfo->num_bounce) { - pinfo->num_render_grid = pinfo->num_grid; - - for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) { - EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); - - if (!ped->need_update) { + } + /* Make sure grid is initialized. */ + lightprobes_refresh_initialize_grid(sldata, vedata); + /* Reflection probes depend on diffuse lighting thus on irradiance grid, + * so update them first. */ + while (pinfo->updated_bounce < pinfo->num_bounce) { + pinfo->num_render_grid = pinfo->num_grid; + /* TODO(sergey): This logic can be split into smaller functions. */ + for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) { + EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); + if (!ped->need_update) { + continue; + } + EEVEE_LightGrid *egrid = &pinfo->grid_data[i]; + LightProbe *prb = (LightProbe *)ob->data; + /* Find the next cell corresponding to the current level. */ + bool valid_cell = false; + int cell_id = ped->updated_cells; + float pos[3], grid_loc[3]; + /* Other levels */ + int current_stride = 1 << max_ii(0, ped->max_lvl - ped->updated_lvl); + int prev_stride = current_stride << 1; + bool do_rendering = true; + while (!valid_cell) { + cell_id = ped->updated_cells; + lightprobe_cell_grid_location_get(egrid, cell_id, grid_loc); + if (ped->updated_lvl == 0 && cell_id == 0) { + valid_cell = true; + ped->updated_cells = ped->num_cell; continue; } - EEVEE_LightGrid *egrid = &pinfo->grid_data[i]; - LightProbe *prb = (LightProbe *)ob->data; - - /* Find the next cell corresponding to the current level. */ - bool valid_cell = false; - int cell_id = ped->updated_cells; - float pos[3], grid_loc[3]; - - /* Other levels */ - int current_stride = 1 << max_ii(0, ped->max_lvl - ped->updated_lvl); - int prev_stride = current_stride << 1; - - while (!valid_cell) { - cell_id = ped->updated_cells; - lightprobe_cell_grid_location_get(egrid, cell_id, grid_loc); - - if (ped->updated_lvl == 0 && cell_id == 0) { - valid_cell = true; - ped->updated_cells = ped->num_cell; - continue; - } - else if (((((int)grid_loc[0] % current_stride) == 0) && - (((int)grid_loc[1] % current_stride) == 0) && - (((int)grid_loc[2] % current_stride) == 0)) && - !((((int)grid_loc[0] % prev_stride) == 0) && - (((int)grid_loc[1] % prev_stride) == 0) && - (((int)grid_loc[2] % prev_stride) == 0))) - { - valid_cell = true; - } - - ped->updated_cells++; - - if (ped->updated_cells > ped->num_cell) { - goto skip_rendering; - } + else if (((((int)grid_loc[0] % current_stride) == 0) && + (((int)grid_loc[1] % current_stride) == 0) && + (((int)grid_loc[2] % current_stride) == 0)) && + !((((int)grid_loc[0] % prev_stride) == 0) && + (((int)grid_loc[1] % prev_stride) == 0) && + (((int)grid_loc[2] % prev_stride) == 0))) + { + valid_cell = true; } - + ped->updated_cells++; + if (ped->updated_cells > ped->num_cell) { + do_rendering = false; + break; + } + } + if (do_rendering) { lightprobe_cell_world_location_get(egrid, grid_loc, pos); - SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); - /* Temporary Remove all probes. */ int tmp_num_render_grid = pinfo->num_render_grid; int tmp_num_render_cube = pinfo->num_render_cube; int tmp_num_planar = pinfo->num_planar; pinfo->num_render_cube = 0; pinfo->num_planar = 0; - /* Use light from previous bounce when capturing radiance. */ if (pinfo->updated_bounce == 0) { pinfo->num_render_grid = 0; } - render_scene_to_probe(sldata, vedata, pos, prb->clipsta, prb->clipend); diffuse_filter_probe(sldata, vedata, psl, egrid->offset + cell_id); - /* To see what is going on. */ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); - /* Restore */ pinfo->num_render_grid = tmp_num_render_grid; pinfo->num_render_cube = tmp_num_render_cube; pinfo->num_planar = tmp_num_planar; - -skip_rendering: - - if (ped->updated_cells >= ped->num_cell) { - ped->updated_lvl++; - ped->updated_cells = 0; - - if (ped->updated_lvl > ped->max_lvl) { - ped->need_update = false; - } - - egrid->level_bias = (float)(1 << max_ii(0, ped->max_lvl - ped->updated_lvl + 1)); - DRW_uniformbuffer_update(sldata->grid_ubo, &sldata->probes->grid_data); - } -#if 0 - printf("Updated Grid %d : cell %d / %d, bounce %d / %d\n", - i, ped->updated_cells, ped->num_cell, pinfo->updated_bounce + 1, pinfo->num_bounce); -#endif - /* Only do one probe per frame */ - DRW_viewport_request_redraw(); - /* Do not let this frame accumulate. */ - stl->effects->taa_current_sample = 1; - - goto update_planar; } - - pinfo->updated_bounce++; - pinfo->num_render_grid = pinfo->num_grid; - - if (pinfo->updated_bounce < pinfo->num_bounce) { - /* Retag all grids to update for next bounce */ - for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) { - EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); - ped->need_update = true; - ped->updated_cells = 0; - ped->updated_lvl = 0; + if (ped->updated_cells >= ped->num_cell) { + ped->updated_lvl++; + ped->updated_cells = 0; + if (ped->updated_lvl > ped->max_lvl) { + ped->need_update = false; } - - SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); - - /* Reset the next buffer so we can see the progress. */ - DRW_framebuffer_texture_detach(sldata->probe_pool); - - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); - DRW_draw_pass(psl->probe_grid_fill); - DRW_framebuffer_texture_detach(sldata->irradiance_rt); - - DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0); - } - } - - for (int i = 1; (ob = pinfo->probes_cube_ref[i]) && (i < MAX_PROBE); i++) { - EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); - - if (!ped->need_update) { - continue; - } - LightProbe *prb = (LightProbe *)ob->data; - - render_scene_to_probe(sldata, vedata, ob->obmat[3], prb->clipsta, prb->clipend); - glossy_filter_probe(sldata, vedata, psl, i); - - ped->need_update = false; - ped->probe_id = i; - - if (!ped->ready_to_shade) { - pinfo->num_render_cube++; - ped->ready_to_shade = true; + egrid->level_bias = (float)(1 << max_ii(0, ped->max_lvl - ped->updated_lvl + 1)); + DRW_uniformbuffer_update(sldata->grid_ubo, &sldata->probes->grid_data); } #if 0 - printf("Update Cubemap %d\n", i); + printf("Updated Grid %d : cell %d / %d, bounce %d / %d\n", + i, ped->updated_cells, ped->num_cell, pinfo->updated_bounce + 1, pinfo->num_bounce); #endif + /* Only do one probe per frame */ DRW_viewport_request_redraw(); /* Do not let this frame accumulate. */ stl->effects->taa_current_sample = 1; - - /* Only do one probe per frame */ - goto update_planar; + lightprobes_refresh_planar(sldata, vedata); + return; } - } - -update_planar: - for (int i = 0; (ob = pinfo->probes_planar_ref[i]) && (i < MAX_PLANAR); i++) { - EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); + pinfo->updated_bounce++; + pinfo->num_render_grid = pinfo->num_grid; - if (!ped->need_update) { - continue; + if (pinfo->updated_bounce < pinfo->num_bounce) { + /* Retag all grids to update for next bounce */ + for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) { + EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob); + ped->need_update = true; + ped->updated_cells = 0; + ped->updated_lvl = 0; + } + SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt); + /* Reset the next buffer so we can see the progress. */ + DRW_framebuffer_texture_detach(sldata->probe_pool); + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0); + DRW_draw_pass(psl->probe_grid_fill); + DRW_framebuffer_texture_detach(sldata->irradiance_rt); + DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0); } - - /* Temporary Remove all planar reflections (avoid lag effect). */ - int tmp_num_planar = pinfo->num_planar; - pinfo->num_planar = 0; - - render_scene_to_planar(sldata, vedata, i, ped->viewmat, ped->persmat, ped->planer_eq_offset); - - /* Restore */ - pinfo->num_planar = tmp_num_planar; - - ped->need_update = false; - ped->probe_id = i; } + /* Refresh cube probe when needed. */ + lightprobes_refresh_cube(sldata, vedata); +} - /* If there is at least one planar probe */ - if (pinfo->num_planar > 0 && (vedata->stl->effects->enabled_effects & EFFECT_SSR) != 0) { - const int max_lod = 9; - DRW_stats_group_start("Planar Probe Downsample"); - DRW_framebuffer_recursive_downsample(vedata->fbl->downsample_fb, txl->planar_pool, max_lod, &downsample_planar, vedata); - /* For shading, save max level of the planar map */ - pinfo->lod_planar_max = (float)(max_lod); - DRW_stats_group_end(); +void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) +{ + /* Render world in priority */ + if (e_data.update_world) { + lightprobes_refresh_world(sldata, vedata); + } + else if (true) { /* TODO if at least one probe needs refresh */ + lightprobes_refresh_all_no_world(sldata, vedata); } } diff --git a/source/blender/draw/engines/eevee/shaders/default_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_frag.glsl index 91746a6f082..45c5c88e763 100644 --- a/source/blender/draw/engines/eevee/shaders/default_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/default_frag.glsl @@ -13,7 +13,7 @@ Closure nodetree_exec(void) vec3 out_diff, out_spec, ssr_spec; eevee_closure_default(N, albedo, f0, 0, roughness, 1.0, out_diff, out_spec, ssr_spec); - Closure result = Closure(out_spec + out_diff, 1.0, vec4(ssr_spec, roughness), normal_encode(normalize(viewNormal), viewCameraVec), 0); + Closure result = Closure(out_spec + out_diff * albedo, 1.0, vec4(ssr_spec, roughness), normal_encode(normalize(viewNormal), viewCameraVec), 0); return result; } diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c index 2127dbe1f63..851d0ef9eb7 100644 --- a/source/blender/draw/engines/external/external_engine.c +++ b/source/blender/draw/engines/external/external_engine.c @@ -96,7 +96,7 @@ typedef struct EXTERNAL_PrivateData { /* Functions */ -static void EXTERNAL_engine_init(void *UNUSED(vedata)) +static void external_engine_init(void *UNUSED(vedata)) { /* Depth prepass */ if (!e_data.depth_sh) { @@ -104,7 +104,7 @@ static void EXTERNAL_engine_init(void *UNUSED(vedata)) } } -static void EXTERNAL_cache_init(void *vedata) +static void external_cache_init(void *vedata) { EXTERNAL_PassList *psl = ((EXTERNAL_Data *)vedata)->psl; EXTERNAL_StorageList *stl = ((EXTERNAL_Data *)vedata)->stl; @@ -121,7 +121,7 @@ static void EXTERNAL_cache_init(void *vedata) } } -static void EXTERNAL_cache_populate(void *vedata, Object *ob) +static void external_cache_populate(void *vedata, Object *ob) { EXTERNAL_StorageList *stl = ((EXTERNAL_Data *)vedata)->stl; @@ -135,11 +135,11 @@ static void EXTERNAL_cache_populate(void *vedata, Object *ob) } } -static void EXTERNAL_cache_finish(void *UNUSED(vedata)) +static void external_cache_finish(void *UNUSED(vedata)) { } -static void external_draw_scene(void *vedata) +static void external_draw_scene_do(void *vedata) { const DRWContextState *draw_ctx = DRW_context_state_get(); Scene *scene = draw_ctx->scene; @@ -184,7 +184,7 @@ static void external_draw_scene(void *vedata) } } -static void EXTERNAL_draw_scene(void *vedata) +static void external_draw_scene(void *vedata) { const DRWContextState *draw_ctx = DRW_context_state_get(); EXTERNAL_PassList *psl = ((EXTERNAL_Data *)vedata)->psl; @@ -193,29 +193,29 @@ static void EXTERNAL_draw_scene(void *vedata) * OpenGL render is used for quick preview (thumbnails or sequencer preview) * where using the rendering engine to preview doesn't make so much sense. */ if (draw_ctx->evil_C) { - external_draw_scene(vedata); + external_draw_scene_do(vedata); } DRW_draw_pass(psl->depth_pass); } -static void EXTERNAL_engine_free(void) +static void external_engine_free(void) { /* All shaders are builtin. */ } -static const DrawEngineDataSize EXTERNAL_data_size = DRW_VIEWPORT_DATA_SIZE(EXTERNAL_Data); +static const DrawEngineDataSize external_data_size = DRW_VIEWPORT_DATA_SIZE(EXTERNAL_Data); DrawEngineType draw_engine_external_type = { NULL, NULL, N_("External"), - &EXTERNAL_data_size, - &EXTERNAL_engine_init, - &EXTERNAL_engine_free, - &EXTERNAL_cache_init, - &EXTERNAL_cache_populate, - &EXTERNAL_cache_finish, + &external_data_size, + &external_engine_init, + &external_engine_free, + &external_cache_init, + &external_cache_populate, + &external_cache_finish, NULL, - &EXTERNAL_draw_scene, + &external_draw_scene, NULL, NULL, }; diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c index 58cf3aaf6cc..c7a88f7689e 100644 --- a/source/blender/draw/intern/draw_armature.c +++ b/source/blender/draw/intern/draw_armature.c @@ -98,7 +98,7 @@ static struct { * \{ */ /* Octahedral */ -static void DRW_shgroup_bone_octahedral_solid(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_octahedral_solid(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_octahedral_solid == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_octahedral_get(); @@ -108,7 +108,7 @@ static void DRW_shgroup_bone_octahedral_solid(const float (*bone_mat)[4], const DRW_shgroup_call_dynamic_add(g_data.bone_octahedral_solid, bone_mat, color); } -static void DRW_shgroup_bone_octahedral_wire(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_octahedral_wire(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_octahedral_wire == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_octahedral_wire_outline_get(); @@ -119,7 +119,7 @@ static void DRW_shgroup_bone_octahedral_wire(const float (*bone_mat)[4], const f } /* Box / B-Bone */ -static void DRW_shgroup_bone_box_solid(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_box_solid(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_box_solid == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_box_get(); @@ -129,7 +129,7 @@ static void DRW_shgroup_bone_box_solid(const float (*bone_mat)[4], const float c DRW_shgroup_call_dynamic_add(g_data.bone_box_solid, bone_mat, color); } -static void DRW_shgroup_bone_box_wire(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_box_wire(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_box_wire == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_box_wire_outline_get(); @@ -140,7 +140,7 @@ static void DRW_shgroup_bone_box_wire(const float (*bone_mat)[4], const float co } /* Wire */ -static void DRW_shgroup_bone_wire_wire(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_wire_wire(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_wire_wire == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_wire_wire_outline_get(); @@ -151,7 +151,7 @@ static void DRW_shgroup_bone_wire_wire(const float (*bone_mat)[4], const float c } /* Envelope */ -static void DRW_shgroup_bone_envelope_distance( +static void drw_shgroup_bone_envelope_distance( const float (*bone_mat)[4], const float color[4], const float *radius_head, const float *radius_tail, const float *distance) { @@ -166,7 +166,7 @@ static void DRW_shgroup_bone_envelope_distance( } } -static void DRW_shgroup_bone_envelope_solid( +static void drw_shgroup_bone_envelope_solid( const float (*bone_mat)[4], const float color[4], const float *radius_head, const float *radius_tail) { @@ -178,7 +178,7 @@ static void DRW_shgroup_bone_envelope_solid( DRW_shgroup_call_dynamic_add(g_data.bone_envelope_solid, bone_mat, color, radius_head, radius_tail); } -static void DRW_shgroup_bone_envelope_wire( +static void drw_shgroup_bone_envelope_wire( const float (*bone_mat)[4], const float color[4], const float *radius_head, const float *radius_tail, const float *distance) { @@ -190,7 +190,7 @@ static void DRW_shgroup_bone_envelope_wire( DRW_shgroup_call_dynamic_add(g_data.bone_envelope_wire, bone_mat, color, radius_head, radius_tail, distance); } -static void DRW_shgroup_bone_envelope_head_wire( +static void drw_shgroup_bone_envelope_head_wire( const float (*bone_mat)[4], const float color[4], const float *radius_head, const float *radius_tail, const float *distance) { @@ -204,7 +204,7 @@ static void DRW_shgroup_bone_envelope_head_wire( /* Custom (geometry) */ -static void DRW_shgroup_bone_custom_solid(const float (*bone_mat)[4], const float color[4], Object *custom) +static void drw_shgroup_bone_custom_solid(const float (*bone_mat)[4], const float color[4], Object *custom) { /* grr, not re-using instances! */ struct Gwn_Batch *geom = DRW_cache_object_surface_get(custom); @@ -214,7 +214,7 @@ static void DRW_shgroup_bone_custom_solid(const float (*bone_mat)[4], const floa } } -static void DRW_shgroup_bone_custom_wire(const float (*bone_mat)[4], const float color[4], Object *custom) +static void drw_shgroup_bone_custom_wire(const float (*bone_mat)[4], const float color[4], Object *custom) { /* grr, not re-using instances! */ struct Gwn_Batch *geom = DRW_cache_object_wire_outline_get(custom); @@ -225,7 +225,7 @@ static void DRW_shgroup_bone_custom_wire(const float (*bone_mat)[4], const float } /* Head and tail sphere */ -static void DRW_shgroup_bone_point_solid(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_point_solid(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_point_solid == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_point_get(); @@ -235,7 +235,7 @@ static void DRW_shgroup_bone_point_solid(const float (*bone_mat)[4], const float DRW_shgroup_call_dynamic_add(g_data.bone_point_solid, bone_mat, color); } -static void DRW_shgroup_bone_point_wire(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_point_wire(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_point_wire == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_point_wire_outline_get(); @@ -246,7 +246,7 @@ static void DRW_shgroup_bone_point_wire(const float (*bone_mat)[4], const float } /* Axes */ -static void DRW_shgroup_bone_axes(const float (*bone_mat)[4], const float color[4]) +static void drw_shgroup_bone_axes(const float (*bone_mat)[4], const float color[4]) { if (g_data.bone_axes == NULL) { struct Gwn_Batch *geom = DRW_cache_bone_arrows_get(); @@ -257,7 +257,7 @@ static void DRW_shgroup_bone_axes(const float (*bone_mat)[4], const float color[ } /* Relationship lines */ -static void UNUSED_FUNCTION(DRW_shgroup_bone_relationship_lines)(const float head[3], const float tail[3]) +static void UNUSED_FUNCTION(drw_shgroup_bone_relationship_lines)(const float head[3], const float tail[3]) { DRW_shgroup_call_dynamic_add(g_data.relationship_lines, head); DRW_shgroup_call_dynamic_add(g_data.relationship_lines, tail); @@ -918,7 +918,7 @@ static void draw_axes(EditBone *eBone, bPoseChannel *pchan) const float *col = (g_theme.const_color) ? g_theme.const_color : (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? g_theme.text_hi_color : g_theme.text_color; - DRW_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), col); + drw_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), col); } static void draw_points( @@ -971,14 +971,14 @@ static void draw_points( if (eBone) { if (!((eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent))) { if (is_envelope_draw) { - DRW_shgroup_bone_envelope_solid(eBone->disp_mat, col_solid_root, + drw_shgroup_bone_envelope_solid(eBone->disp_mat, col_solid_root, &eBone->rad_head, &envelope_ignore); - DRW_shgroup_bone_envelope_head_wire(eBone->disp_mat, col_wire_root, + drw_shgroup_bone_envelope_head_wire(eBone->disp_mat, col_wire_root, &eBone->rad_head, &envelope_ignore, &envelope_ignore); } else { - DRW_shgroup_bone_point_solid(eBone->disp_mat, col_solid_root); - DRW_shgroup_bone_point_wire(eBone->disp_mat, col_wire_root); + drw_shgroup_bone_point_solid(eBone->disp_mat, col_solid_root); + drw_shgroup_bone_point_wire(eBone->disp_mat, col_wire_root); } } } @@ -986,14 +986,14 @@ static void draw_points( Bone *bone = pchan->bone; if (!((bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P | BONE_HIDDEN_PG)))) { if (is_envelope_draw) { - DRW_shgroup_bone_envelope_solid(pchan->disp_mat, col_solid_root, + drw_shgroup_bone_envelope_solid(pchan->disp_mat, col_solid_root, &bone->rad_head, &envelope_ignore); - DRW_shgroup_bone_envelope_head_wire(pchan->disp_mat, col_wire_root, + drw_shgroup_bone_envelope_head_wire(pchan->disp_mat, col_wire_root, &bone->rad_head, &envelope_ignore, &envelope_ignore); } else { - DRW_shgroup_bone_point_solid(pchan->disp_mat, col_solid_root); - DRW_shgroup_bone_point_wire(pchan->disp_mat, col_wire_root); + drw_shgroup_bone_point_solid(pchan->disp_mat, col_solid_root); + drw_shgroup_bone_point_wire(pchan->disp_mat, col_wire_root); } } } @@ -1006,14 +1006,14 @@ static void draw_points( if (is_envelope_draw) { const float *rad_tail = eBone ? &eBone->rad_tail : &pchan->bone->rad_tail; - DRW_shgroup_bone_envelope_solid( + drw_shgroup_bone_envelope_solid( BONE_VAR(eBone, pchan, disp_mat), col_solid_tail, &envelope_ignore, rad_tail); - DRW_shgroup_bone_envelope_head_wire( + drw_shgroup_bone_envelope_head_wire( BONE_VAR(eBone, pchan, disp_mat), col_wire_tail, &envelope_ignore, rad_tail, &envelope_ignore); } else { - DRW_shgroup_bone_point_solid(BONE_VAR(eBone, pchan, disp_tail_mat), col_solid_tail); - DRW_shgroup_bone_point_wire(BONE_VAR(eBone, pchan, disp_tail_mat), col_wire_tail); + drw_shgroup_bone_point_solid(BONE_VAR(eBone, pchan, disp_tail_mat), col_solid_tail); + drw_shgroup_bone_point_wire(BONE_VAR(eBone, pchan, disp_tail_mat), col_wire_tail); } if (select_id != -1) { @@ -1042,8 +1042,8 @@ static void draw_bone_custom_shape( DRW_select_load_id(select_id | BONESEL_BONE); } - DRW_shgroup_bone_custom_solid(disp_mat, col_solid, pchan->custom); - DRW_shgroup_bone_custom_wire(disp_mat, col_wire, pchan->custom); + drw_shgroup_bone_custom_solid(disp_mat, col_solid, pchan->custom); + drw_shgroup_bone_custom_wire(disp_mat, col_wire, pchan->custom); if (select_id != -1) { DRW_select_load_id(-1); @@ -1075,15 +1075,15 @@ static void draw_bone_envelope( if ((boneflag & BONE_NO_DEFORM) == 0 && ((boneflag & BONE_SELECTED) || (eBone && (boneflag & (BONE_ROOTSEL | BONE_TIPSEL))))) { - DRW_shgroup_bone_envelope_distance(BONE_VAR(eBone, pchan, disp_mat), col_white, rad_head, rad_tail, distance); + drw_shgroup_bone_envelope_distance(BONE_VAR(eBone, pchan, disp_mat), col_white, rad_head, rad_tail, distance); } if (select_id != -1) { DRW_select_load_id(select_id | BONESEL_BONE); } - DRW_shgroup_bone_envelope_solid(BONE_VAR(eBone, pchan, disp_mat), col_solid, rad_head, rad_tail); - DRW_shgroup_bone_envelope_wire(BONE_VAR(eBone, pchan, disp_mat), col_wire, rad_head, rad_tail, distance); + drw_shgroup_bone_envelope_solid(BONE_VAR(eBone, pchan, disp_mat), col_solid, rad_head, rad_tail); + drw_shgroup_bone_envelope_wire(BONE_VAR(eBone, pchan, disp_mat), col_wire, rad_head, rad_tail, distance); if (select_id != -1) { DRW_select_load_id(-1); @@ -1116,12 +1116,12 @@ static void draw_bone_wire( BLI_assert(bbones_mat != NULL); for (int i = pchan->bone->segments; i--; bbones_mat++) { - DRW_shgroup_bone_wire_wire(bbones_mat->mat, col_wire); + drw_shgroup_bone_wire_wire(bbones_mat->mat, col_wire); } } else if (eBone) { for (int i = 0; i < eBone->segments; i++) { - DRW_shgroup_bone_wire_wire(eBone->disp_bbone_mat[i], col_wire); + drw_shgroup_bone_wire_wire(eBone->disp_bbone_mat[i], col_wire); } } @@ -1151,14 +1151,14 @@ static void draw_bone_box( BLI_assert(bbones_mat != NULL); for (int i = pchan->bone->segments; i--; bbones_mat++) { - DRW_shgroup_bone_box_solid(bbones_mat->mat, col_solid); - DRW_shgroup_bone_box_wire(bbones_mat->mat, col_wire); + drw_shgroup_bone_box_solid(bbones_mat->mat, col_solid); + drw_shgroup_bone_box_wire(bbones_mat->mat, col_wire); } } else if (eBone) { for (int i = 0; i < eBone->segments; i++) { - DRW_shgroup_bone_box_solid(eBone->disp_bbone_mat[i], col_solid); - DRW_shgroup_bone_box_wire(eBone->disp_bbone_mat[i], col_wire); + drw_shgroup_bone_box_solid(eBone->disp_bbone_mat[i], col_solid); + drw_shgroup_bone_box_wire(eBone->disp_bbone_mat[i], col_wire); } } @@ -1183,8 +1183,8 @@ static void draw_bone_octahedral( DRW_select_load_id(select_id | BONESEL_BONE); } - DRW_shgroup_bone_octahedral_solid(BONE_VAR(eBone, pchan, disp_mat), col_solid); - DRW_shgroup_bone_octahedral_wire(BONE_VAR(eBone, pchan, disp_mat), col_wire); + drw_shgroup_bone_octahedral_solid(BONE_VAR(eBone, pchan, disp_mat), col_solid); + drw_shgroup_bone_octahedral_wire(BONE_VAR(eBone, pchan, disp_mat), col_wire); if (select_id != -1) { DRW_select_load_id(-1); @@ -1397,7 +1397,7 @@ static void draw_armature_pose(Object *ob, const float const_color[4]) /** * This function set the object space to use for all subsequent `DRW_shgroup_bone_*` calls. */ -static void DRW_shgroup_armature( +static void drw_shgroup_armature( Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope, DRWShadingGroup *shgrp_relationship_lines) { @@ -1419,7 +1419,7 @@ void DRW_shgroup_armature_object( float *color; DRW_object_wire_theme_get(ob, view_layer, &color); - DRW_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, NULL, shgrp_relationship_lines); + drw_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, NULL, shgrp_relationship_lines); draw_armature_pose(ob, color); } @@ -1427,7 +1427,7 @@ void DRW_shgroup_armature_pose( Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope, DRWShadingGroup *shgrp_relationship_lines) { - DRW_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines); + drw_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines); draw_armature_pose(ob, NULL); } @@ -1435,7 +1435,7 @@ void DRW_shgroup_armature_edit( Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope, DRWShadingGroup *shgrp_relationship_lines) { - DRW_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines); + drw_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines); draw_armature_edit(ob); } diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 806c8cce4d5..57dd2e9cf5d 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -150,7 +150,7 @@ extern char datatoc_gpu_shader_3D_vert_glsl[]; extern char datatoc_gpu_shader_fullscreen_vert_glsl[]; /* Prototypes. */ -static void DRW_engines_enable_external(void); +static void drw_engines_enable_external(void); /* Structures */ typedef enum { @@ -658,7 +658,7 @@ void DRW_shader_free(GPUShader *shader) /** \name Interface (DRW_interface) * \{ */ -static void DRW_interface_create(DRWInterface *interface, GPUShader *shader) +static void drw_interface_create(DRWInterface *interface, GPUShader *shader) { interface->model = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MODEL); interface->modelinverse = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MODEL_INV); @@ -691,7 +691,7 @@ static void DRW_interface_create(DRWInterface *interface, GPUShader *shader) } -static void DRW_interface_uniform(DRWShadingGroup *shgroup, const char *name, +static void drw_interface_uniform(DRWShadingGroup *shgroup, const char *name, DRWUniformType type, const void *value, int length, int arraysize) { int location; @@ -725,7 +725,7 @@ static void DRW_interface_uniform(DRWShadingGroup *shgroup, const char *name, shgroup->interface.uniforms = uni; } -static void DRW_interface_attrib(DRWShadingGroup *shgroup, const char *name, DRWAttribType type, int size, bool dummy) +static void drw_interface_attrib(DRWShadingGroup *shgroup, const char *name, DRWAttribType type, int size, bool dummy) { DRWAttrib *attrib = BLI_mempool_alloc(DST.vmempool->attribs); GLuint program = GPU_shader_get_program(shgroup->shader); @@ -788,7 +788,7 @@ DRWShadingGroup *DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass) pass->shgroups_last = shgroup; shgroup->next = NULL; - DRW_interface_create(&shgroup->interface, shader); + drw_interface_create(&shgroup->interface, shader); shgroup->type = DRW_SHG_NORMAL; shgroup->shader = shader; @@ -900,7 +900,7 @@ DRWShadingGroup *DRW_shgroup_material_empty_tri_batch_create( if (shgroup) { shgroup->type = DRW_SHG_TRIANGLE_BATCH; shgroup->interface.instance_count = size * 3; - DRW_interface_attrib(shgroup, "dummy", DRW_ATTRIB_FLOAT, 1, true); + drw_interface_attrib(shgroup, "dummy", DRW_ATTRIB_FLOAT, 1, true); } return shgroup; @@ -945,7 +945,7 @@ DRWShadingGroup *DRW_shgroup_empty_tri_batch_create(struct GPUShader *shader, DR shgroup->type = DRW_SHG_TRIANGLE_BATCH; shgroup->interface.instance_count = size * 3; - DRW_interface_attrib(shgroup, "dummy", DRW_ATTRIB_FLOAT, 1, true); + drw_interface_attrib(shgroup, "dummy", DRW_ATTRIB_FLOAT, 1, true); return shgroup; } @@ -1143,82 +1143,82 @@ void DRW_shgroup_stencil_mask(DRWShadingGroup *shgroup, unsigned int mask) void DRW_shgroup_attrib_float(DRWShadingGroup *shgroup, const char *name, int size) { - DRW_interface_attrib(shgroup, name, DRW_ATTRIB_FLOAT, size, false); + drw_interface_attrib(shgroup, name, DRW_ATTRIB_FLOAT, size, false); } void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_TEXTURE, tex, 0, 1); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_TEXTURE, tex, 0, 1); } void DRW_shgroup_uniform_block(DRWShadingGroup *shgroup, const char *name, const GPUUniformBuffer *ubo) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_BLOCK, ubo, 0, 1); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_BLOCK, ubo, 0, 1); } void DRW_shgroup_uniform_buffer(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_BUFFER, tex, 0, 1); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_BUFFER, tex, 0, 1); } void DRW_shgroup_uniform_bool(DRWShadingGroup *shgroup, const char *name, const bool *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_BOOL, value, 1, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_BOOL, value, 1, arraysize); } void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 1, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 1, arraysize); } void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 2, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 2, arraysize); } void DRW_shgroup_uniform_vec3(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 3, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 3, arraysize); } void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 4, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 4, arraysize); } void DRW_shgroup_uniform_short_to_int(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_INT, value, 1, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_INT, value, 1, arraysize); } void DRW_shgroup_uniform_short_to_float(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_FLOAT, value, 1, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_FLOAT, value, 1, arraysize); } void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 1, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 1, arraysize); } void DRW_shgroup_uniform_ivec2(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 2, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 2, arraysize); } void DRW_shgroup_uniform_ivec3(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 3, arraysize); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 3, arraysize); } void DRW_shgroup_uniform_mat3(DRWShadingGroup *shgroup, const char *name, const float *value) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_MAT3, value, 9, 1); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_MAT3, value, 9, 1); } void DRW_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float *value) { - DRW_interface_uniform(shgroup, name, DRW_UNIFORM_MAT4, value, 16, 1); + drw_interface_uniform(shgroup, name, DRW_UNIFORM_MAT4, value, 16, 1); } /* Creates a VBO containing OGL primitives for all DRWCallDynamic */ @@ -1462,7 +1462,7 @@ void DRW_pass_sort_shgroup_z(DRWPass *pass) /** \name Draw (DRW_draw) * \{ */ -static void DRW_state_set(DRWState state) +static void drw_state_set(DRWState state) { if (DST.state == state) { return; @@ -1711,7 +1711,7 @@ static void DRW_state_set(DRWState state) DST.state = state; } -static void DRW_stencil_set(unsigned int mask) +static void drw_stencil_set(unsigned int mask) { if (DST.stencil_mask != mask) { /* Stencil Write */ @@ -1954,8 +1954,8 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) release_texture_slots(); release_ubo_slots(); - DRW_state_set((pass_state & shgroup->state_extra_disable) | shgroup->state_extra); - DRW_stencil_set(shgroup->stencil_mask); + drw_state_set((pass_state & shgroup->state_extra_disable) | shgroup->state_extra); + drw_stencil_set(shgroup->stencil_mask); /* Binding Uniform */ /* Don't check anything, Interface should already contain the least uniform as possible */ @@ -2076,12 +2076,12 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) DRW_state_reset(); } -static void DRW_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group) +static void drw_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group) { /* Start fresh */ DST.shader = NULL; - DRW_state_set(pass->state); + drw_state_set(pass->state); DRW_stats_query_start(pass->name); @@ -2111,13 +2111,13 @@ static void DRW_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWSha void DRW_draw_pass(DRWPass *pass) { - DRW_draw_pass_ex(pass, pass->shgroups, pass->shgroups_last); + drw_draw_pass_ex(pass, pass->shgroups, pass->shgroups_last); } /* Draw only a subset of shgroups. Used in special situations as grease pencil strokes */ void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group) { - DRW_draw_pass_ex(pass, start_group, end_group); + drw_draw_pass_ex(pass, start_group, end_group); } void DRW_draw_callbacks_pre_scene(void) @@ -2140,7 +2140,7 @@ void DRW_draw_callbacks_post_scene(void) void DRW_state_reset_ex(DRWState state) { DST.state = ~state; - DRW_state_set(state); + drw_state_set(state); } void DRW_state_reset(void) @@ -2428,7 +2428,7 @@ void DRW_framebuffer_viewport_size(struct GPUFrameBuffer *UNUSED(fb_read), int x /* Use color management profile to draw texture to framebuffer */ void DRW_transform_to_display(GPUTexture *tex) { - DRW_state_set(DRW_STATE_WRITE_COLOR); + drw_state_set(DRW_STATE_WRITE_COLOR); Gwn_VertFormat *vert_format = immVertexFormat(); unsigned int pos = GWN_vertformat_attr_add(vert_format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); @@ -2534,7 +2534,7 @@ const float *DRW_viewport_pixelsize_get(void) return &DST.pixsize; } -static void DRW_viewport_cache_resize(void) +static void drw_viewport_cache_resize(void) { /* Release the memiter before clearing the mempools that references them */ GPU_viewport_cache_release(DST.viewport); @@ -2554,7 +2554,7 @@ static void DRW_viewport_cache_resize(void) * This is because a cache uniform only store reference * to its value. And we don't want to invalidate the cache * if this value change per viewport */ -static void DRW_viewport_var_init(void) +static void drw_viewport_var_init(void) { RegionView3D *rv3d = DST.draw_ctx.rv3d; @@ -2793,7 +2793,7 @@ void DRW_lamp_engine_data_free(LampEngineData *led) /** \name Rendering (DRW_engines) * \{ */ -static void DRW_engines_init(void) +static void drw_engines_init(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2808,7 +2808,7 @@ static void DRW_engines_init(void) } } -static void DRW_engines_cache_init(void) +static void drw_engines_cache_init(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2828,7 +2828,7 @@ static void DRW_engines_cache_init(void) } } -static void DRW_engines_cache_populate(Object *ob) +static void drw_engines_cache_populate(Object *ob) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2840,7 +2840,7 @@ static void DRW_engines_cache_populate(Object *ob) } } -static void DRW_engines_cache_finish(void) +static void drw_engines_cache_finish(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2852,7 +2852,7 @@ static void DRW_engines_cache_finish(void) } } -static void DRW_engines_draw_background(void) +static void drw_engines_draw_background(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2874,7 +2874,7 @@ static void DRW_engines_draw_background(void) DRW_draw_background(); } -static void DRW_engines_draw_scene(void) +static void drw_engines_draw_scene(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2891,7 +2891,7 @@ static void DRW_engines_draw_scene(void) } } -static void DRW_engines_draw_text(void) +static void drw_engines_draw_text(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; @@ -2998,7 +2998,7 @@ static void use_drw_engine(DrawEngineType *engine) /* TODO revisit this when proper layering is implemented */ /* Gather all draw engines needed and store them in DST.enabled_engines * That also define the rendering order of engines */ -static void DRW_engines_enable_from_engine(RenderEngineType *engine_type) +static void drw_engines_enable_from_engine(RenderEngineType *engine_type) { /* TODO layers */ if (engine_type->draw_engine != NULL) { @@ -3006,16 +3006,16 @@ static void DRW_engines_enable_from_engine(RenderEngineType *engine_type) } if ((engine_type->flag & RE_INTERNAL) == 0) { - DRW_engines_enable_external(); + drw_engines_enable_external(); } } -static void DRW_engines_enable_from_object_mode(void) +static void drw_engines_enable_from_object_mode(void) { use_drw_engine(&draw_engine_object_type); } -static void DRW_engines_enable_from_mode(int mode) +static void drw_engines_enable_from_mode(int mode) { switch (mode) { case CTX_MODE_EDIT_MESH: @@ -3069,7 +3069,7 @@ static void DRW_engines_enable_from_mode(int mode) /** * Use for select and depth-drawing. */ -static void DRW_engines_enable_basic(void) +static void drw_engines_enable_basic(void) { use_drw_engine(DRW_engine_viewport_basic_type.draw_engine); } @@ -3077,25 +3077,25 @@ static void DRW_engines_enable_basic(void) /** * Use for external render engines. */ -static void DRW_engines_enable_external(void) +static void drw_engines_enable_external(void) { use_drw_engine(DRW_engine_viewport_external_type.draw_engine); } -static void DRW_engines_enable(const Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type) +static void drw_engines_enable(const Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type) { Object *obact = OBACT(view_layer); const int mode = CTX_data_mode_enum_ex(scene->obedit, obact); - DRW_engines_enable_from_engine(engine_type); + drw_engines_enable_from_engine(engine_type); if (DRW_state_draw_support()) { - DRW_engines_enable_from_object_mode(); - DRW_engines_enable_from_mode(mode); + drw_engines_enable_from_object_mode(); + drw_engines_enable_from_mode(mode); } } -static void DRW_engines_disable(void) +static void drw_engines_disable(void) { BLI_freelistN(&DST.enabled_engines); } @@ -3121,7 +3121,7 @@ static void draw_stat(rcti *rect, int u, int v, const char *txt, const int size) } /* CPU stats */ -static void DRW_debug_cpu_stats(void) +static void drw_debug_cpu_stats(void) { int u, v; double init_tot_time = 0.0, background_tot_time = 0.0, render_tot_time = 0.0, tot_time = 0.0; @@ -3197,7 +3197,7 @@ static void DRW_debug_cpu_stats(void) } /* Display GPU time for each passes */ -static void DRW_debug_gpu_stats(void) +static void drw_debug_gpu_stats(void) { /* local coordinate visible rect inside region, to accomodate overlapping ui */ rcti rect; @@ -3261,7 +3261,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx) ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, NULL, }; - DRW_engines_enable(scene, view_layer, engine_type); + drw_engines_enable(scene, view_layer, engine_type); for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *draw_engine = link->data; @@ -3274,7 +3274,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx) DST.viewport = NULL; - DRW_engines_disable(); + drw_engines_disable(); } /** \} */ @@ -3305,7 +3305,7 @@ void DRW_notify_id_update(const DRWUpdateContext *update_ctx, ID *id) DST.draw_ctx = (DRWContextState){ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, NULL, }; - DRW_engines_enable(scene, view_layer, engine_type); + drw_engines_enable(scene, view_layer, engine_type); for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *draw_engine = link->data; ViewportEngineData *data = DRW_viewport_engine_data_ensure(draw_engine); @@ -3314,7 +3314,7 @@ void DRW_notify_id_update(const DRWUpdateContext *update_ctx, ID *id) } } DST.viewport = NULL; - DRW_engines_disable(); + drw_engines_disable(); } /** \} */ @@ -3368,31 +3368,31 @@ void DRW_draw_render_loop_ex( DST.draw_ctx.evil_C, }; - DRW_viewport_var_init(); + drw_viewport_var_init(); /* Get list of enabled engines */ - DRW_engines_enable(scene, view_layer, engine_type); + drw_engines_enable(scene, view_layer, engine_type); /* Update ubos */ DRW_globals_update(); /* Init engines */ - DRW_engines_init(); + drw_engines_init(); /* TODO : tag to refresh by the deps graph */ /* ideally only refresh when objects are added/removed */ /* or render properties / materials change */ { PROFILE_START(stime); - DRW_engines_cache_init(); + drw_engines_cache_init(); DEG_OBJECT_ITER(graph, ob, DEG_OBJECT_ITER_FLAG_ALL); { - DRW_engines_cache_populate(ob); + drw_engines_cache_populate(ob); } DEG_OBJECT_ITER_END - DRW_engines_cache_finish(); + drw_engines_cache_finish(); PROFILE_END_ACCUM(DST.cache_time, stime); } @@ -3400,7 +3400,7 @@ void DRW_draw_render_loop_ex( /* Start Drawing */ DRW_state_reset(); - DRW_engines_draw_background(); + drw_engines_draw_background(); /* WIP, single image drawn over the camera view (replace) */ bool do_bg_image = false; @@ -3415,7 +3415,7 @@ void DRW_draw_render_loop_ex( } extern void view3d_draw_bgpic_test(Scene *scene, ARegion *ar, View3D *v3d, - const bool do_foreground, const bool do_camera_frame); + const bool do_foreground, const bool do_camera_frame); if (do_bg_image) { view3d_draw_bgpic_test(scene, ar, v3d, false, true); } @@ -3426,7 +3426,7 @@ void DRW_draw_render_loop_ex( ED_region_draw_cb_draw(DST.draw_ctx.evil_C, DST.draw_ctx.ar, REGION_DRAW_PRE_VIEW); } - DRW_engines_draw_scene(); + drw_engines_draw_scene(); DRW_draw_callbacks_post_scene(); if (DST.draw_ctx.evil_C) { @@ -3435,7 +3435,7 @@ void DRW_draw_render_loop_ex( DRW_state_reset(); - DRW_engines_draw_text(); + drw_engines_draw_text(); if (DST.draw_ctx.evil_C) { /* needed so manipulator isn't obscured */ @@ -3453,14 +3453,14 @@ void DRW_draw_render_loop_ex( } if (G.debug_value > 20) { - DRW_debug_cpu_stats(); - DRW_debug_gpu_stats(); + drw_debug_cpu_stats(); + drw_debug_gpu_stats(); } DRW_state_reset(); - DRW_engines_disable(); + drw_engines_disable(); - DRW_viewport_cache_resize(); + drw_viewport_cache_resize(); #ifdef DEBUG /* Avoid accidental reuse. */ @@ -3562,11 +3562,11 @@ void DRW_draw_select_loop( /* Get list of enabled engines */ if (use_obedit) { - DRW_engines_enable_from_mode(obedit_mode); + drw_engines_enable_from_mode(obedit_mode); } else { - DRW_engines_enable_basic(); - DRW_engines_enable_from_object_mode(); + drw_engines_enable_basic(); + drw_engines_enable_from_object_mode(); } /* Setup viewport */ @@ -3577,46 +3577,45 @@ void DRW_draw_select_loop( ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, (bContext *)NULL, }; - DRW_viewport_var_init(); + drw_viewport_var_init(); /* Update ubos */ DRW_globals_update(); /* Init engines */ - DRW_engines_init(); + drw_engines_init(); /* TODO : tag to refresh by the deps graph */ /* ideally only refresh when objects are added/removed */ /* or render properties / materials change */ if (cache_is_dirty) { - - DRW_engines_cache_init(); + drw_engines_cache_init(); if (use_obedit) { - DRW_engines_cache_populate(scene->obedit); + drw_engines_cache_populate(scene->obedit); } else { DEG_OBJECT_ITER(graph, ob, DEG_OBJECT_ITER_FLAG_DUPLI) { if ((ob->base_flag & BASE_SELECTABLED) != 0) { DRW_select_load_id(ob->select_color); - DRW_engines_cache_populate(ob); + drw_engines_cache_populate(ob); } } DEG_OBJECT_ITER_END } - DRW_engines_cache_finish(); + drw_engines_cache_finish(); } /* Start Drawing */ DRW_state_reset(); DRW_draw_callbacks_pre_scene(); - DRW_engines_draw_scene(); + drw_engines_draw_scene(); DRW_draw_callbacks_post_scene(); DRW_state_reset(); - DRW_engines_disable(); + drw_engines_disable(); #ifdef DEBUG /* Avoid accidental reuse. */ @@ -3662,8 +3661,8 @@ void DRW_draw_depth_loop( /* Get list of enabled engines */ { - DRW_engines_enable_basic(); - DRW_engines_enable_from_object_mode(); + drw_engines_enable_basic(); + drw_engines_enable_from_object_mode(); } /* Setup viewport */ @@ -3674,38 +3673,37 @@ void DRW_draw_depth_loop( ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, (bContext *)NULL, }; - DRW_viewport_var_init(); + drw_viewport_var_init(); /* Update ubos */ DRW_globals_update(); /* Init engines */ - DRW_engines_init(); + drw_engines_init(); /* TODO : tag to refresh by the deps graph */ /* ideally only refresh when objects are added/removed */ /* or render properties / materials change */ if (cache_is_dirty) { - - DRW_engines_cache_init(); + drw_engines_cache_init(); DEG_OBJECT_ITER(graph, ob, DEG_OBJECT_ITER_FLAG_ALL) { - DRW_engines_cache_populate(ob); + drw_engines_cache_populate(ob); } DEG_OBJECT_ITER_END - DRW_engines_cache_finish(); + drw_engines_cache_finish(); } /* Start Drawing */ DRW_state_reset(); DRW_draw_callbacks_pre_scene(); - DRW_engines_draw_scene(); + drw_engines_draw_scene(); DRW_draw_callbacks_post_scene(); DRW_state_reset(); - DRW_engines_disable(); + drw_engines_disable(); #ifdef DEBUG /* Avoid accidental reuse. */ diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 63026cdcc46..30aad46843d 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -300,9 +300,7 @@ void applyProject(TransInfo *t) mul_m4_v3(ob->obmat, iloc); } else if (t->flag & T_OBJECT) { - /* TODO(sergey): Ideally force update is not needed here. */ - td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; - BKE_object_handle_update(G.main->eval_ctx, t->scene, td->ob); + BKE_object_eval_transform_all(G.main->eval_ctx, t->scene, td->ob); copy_v3_v3(iloc, td->ob->obmat[3]); } @@ -391,8 +389,7 @@ void applyGridAbsolute(TransInfo *t) mul_m4_v3(obmat, iloc); } else if (t->flag & T_OBJECT) { - td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; - BKE_object_handle_update(G.main->eval_ctx, t->scene, td->ob); + BKE_object_eval_transform_all(G.main->eval_ctx, t->scene, td->ob); copy_v3_v3(iloc, td->ob->obmat[3]); } |