diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-05-05 17:27:31 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-05-05 19:08:24 +0300 |
commit | 8d9c48415257eca370dad5c163f0fec06e31dd6b (patch) | |
tree | 1ddaf42a0c8d82bd99bbc8897592efd173b5cfc8 /source/blender/draw | |
parent | 741d848cf8ee2d6f682150fc965036f6185655a3 (diff) |
Implement overridable scene render settings
This add a new set of (possible) render settings that can be defined at
the scene level and overridable at the scene layer level.
Once we get workspaces we can either add workspace inbetween scene and
scene layer evaluation. Or to replace layer settings, to avoid extra
confusion to users.
An example of this setting is "samples", as implemented now for the clay
engine.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/basic/basic_engine.c | 2 | ||||
-rw-r--r-- | source/blender/draw/engines/clay/clay_engine.c | 25 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 17 | ||||
-rw-r--r-- | source/blender/draw/engines/external/external_engine.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/edit_mesh_mode.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/paint_vertex_mode.c | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/paint_weight_mode.c | 2 |
9 files changed, 41 insertions, 15 deletions
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c index 169c67f9702..16d9ca3ef0d 100644 --- a/source/blender/draw/engines/basic/basic_engine.c +++ b/source/blender/draw/engines/basic/basic_engine.c @@ -248,7 +248,7 @@ DrawEngineType draw_engine_basic_type = { RenderEngineType DRW_engine_viewport_basic_type = { NULL, NULL, BASIC_ENGINE, N_("Basic"), RE_INTERNAL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &draw_engine_basic_type, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c index 8ac8ed50cdc..f7ca64e6288 100644 --- a/source/blender/draw/engines/clay/clay_engine.c +++ b/source/blender/draw/engines/clay/clay_engine.c @@ -344,7 +344,11 @@ static void CLAY_engine_init(void *vedata) /* SSAO setup */ { - int ssao_samples = 32; /* XXX get from render settings */ + const DRWContextState *draw_ctx = DRW_context_state_get(); + SceneLayer *scene_layer = draw_ctx->sl; + IDProperty *props = BKE_scene_layer_engine_evaluated_get(scene_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_CLAY); + int ssao_samples = BKE_collection_engine_property_value_get_int(props, "ssao_samples"); + float invproj[4][4]; float dfdyfacs[2]; const bool is_persp = DRW_viewport_is_persp_get(); @@ -505,7 +509,7 @@ static int mat_in_ubo(CLAY_Storage *storage, float matcap_rot, float matcap_hue, static DRWShadingGroup *CLAY_object_shgrp_get(CLAY_Data *vedata, Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl) { DRWShadingGroup **shgrps = stl->storage->shgrps; - IDProperty *props = BKE_object_collection_engine_get(ob, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_CLAY); + IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_CLAY); /* Default Settings */ float matcap_rot = BKE_collection_engine_property_value_get_float(props, "matcap_rotation"); @@ -574,7 +578,7 @@ static void CLAY_cache_populate(void *vedata, Object *ob) struct Batch *geom = DRW_cache_object_surface_get(ob); if (geom) { - IDProperty *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, ""); + IDProperty *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, ""); bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling"); /* Depth Prepass */ @@ -614,7 +618,7 @@ static void CLAY_draw_scene(void *vedata) DRW_draw_pass(psl->clay_pass); } -static void CLAY_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 && @@ -632,6 +636,15 @@ static void CLAY_collection_settings_create(RenderEngine *UNUSED(engine), IDProp BKE_collection_engine_property_add_float(props, "ssao_factor_edge", 1.0f); } +static void CLAY_scene_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +{ + BLI_assert(props && + props->type == IDP_GROUP && + props->subtype == IDP_GROUP_SUB_ENGINE_RENDER); + + BKE_collection_engine_property_add_int(props, "ssao_samples", 32); +} + static void CLAY_engine_free(void) { DRW_SHADER_FREE_SAFE(e_data.clay_sh); @@ -658,7 +671,9 @@ DrawEngineType draw_engine_clay_type = { RenderEngineType DRW_engine_viewport_clay_type = { NULL, NULL, CLAY_ENGINE, N_("Clay"), RE_INTERNAL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, &CLAY_collection_settings_create, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + &CLAY_layer_collection_settings_create, + &CLAY_scene_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 f5c07d55c20..ad4e1897b00 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -555,7 +555,7 @@ static void EEVEE_cache_populate(void *vedata, Object *ob) struct Batch *geom = DRW_cache_object_surface_get(ob); if (geom) { - IDProperty *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, ""); + IDProperty *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, ""); const bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling"); /* Depth Prepass */ @@ -717,12 +717,22 @@ static void EEVEE_engine_free(void) DRW_TEXTURE_FREE_SAFE(e_data.jitter); } -static void EEVEE_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 && props->subtype == IDP_GROUP_SUB_ENGINE_RENDER); // BKE_collection_engine_property_add_int(props, "high_quality_sphere_lamps", false); + UNUSED_VARS_NDEBUG(props); +} + + +static void EEVEE_scene_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) +{ + BLI_assert(props && + props->type == IDP_GROUP && + props->subtype == IDP_GROUP_SUB_ENGINE_RENDER); + UNUSED_VARS_NDEBUG(props); } static const DrawEngineDataSize EEVEE_data_size = DRW_VIEWPORT_DATA_SIZE(EEVEE_Data); @@ -743,7 +753,8 @@ DrawEngineType draw_engine_eevee_type = { 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_collection_settings_create, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + &EEVEE_layer_collection_settings_create, &EEVEE_scene_layer_settings_create, &draw_engine_eevee_type, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c index 6a530cccb6e..3b7595d18d1 100644 --- a/source/blender/draw/engines/external/external_engine.c +++ b/source/blender/draw/engines/external/external_engine.c @@ -224,7 +224,7 @@ DrawEngineType draw_engine_external_type = { RenderEngineType DRW_engine_viewport_external_type = { NULL, NULL, EXTERNAL_ENGINE, N_("External"), RE_INTERNAL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &draw_engine_external_type, {NULL, NULL, NULL} }; diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 3aa3eb20b90..04bf7eea0bd 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1607,7 +1607,7 @@ bool DRW_is_object_renderable(Object *ob) if (ob->type == OB_MESH) { if (ob == obedit) { - IDProperty *props = BKE_object_collection_engine_get(ob, COLLECTION_MODE_EDIT, ""); + IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, ""); bool do_occlude_wire = BKE_collection_engine_property_value_get_bool(props, "show_occlude_wire"); if (do_occlude_wire) diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c index 4b5c9009b72..120d977c222 100644 --- a/source/blender/draw/modes/edit_mesh_mode.c +++ b/source/blender/draw/modes/edit_mesh_mode.c @@ -400,7 +400,7 @@ static void EDIT_MESH_cache_populate(void *vedata, Object *ob) if (ob->type == OB_MESH) { if (ob == obedit) { - IDProperty *ces_mode_ed = BKE_object_collection_engine_get(ob, COLLECTION_MODE_EDIT, ""); + IDProperty *ces_mode_ed = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, ""); bool do_occlude_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "show_occlude_wire"); /* Updating uniform */ backwire_opacity = BKE_collection_engine_property_value_get_float(ces_mode_ed, "backwire_opacity"); diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index c4add618e10..72221d0820f 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -1182,7 +1182,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob) SceneLayer *sl = draw_ctx->sl; int theme_id = TH_UNDEFINED; - //CollectionEngineSettings *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, ""); + //CollectionEngineSettings *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, ""); //bool do_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_wire"); bool do_outlines = ((ob->base_flag & BASE_SELECTED) != 0); diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c index ff2f475713a..6098b37b3db 100644 --- a/source/blender/draw/modes/paint_vertex_mode.c +++ b/source/blender/draw/modes/paint_vertex_mode.c @@ -144,7 +144,7 @@ static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob) SceneLayer *sl = draw_ctx->sl; if (ob->type == OB_MESH && ob == sl->basact->object) { - IDProperty *ces_mode_pw = BKE_object_collection_engine_get(ob, COLLECTION_MODE_PAINT_VERTEX, ""); + IDProperty *ces_mode_pw = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_PAINT_VERTEX, ""); bool use_wire = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_wire"); char flag = ((Mesh *)ob->data)->editflag; struct Batch *geom; diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c index eda65a5d5a5..10e798f1fc3 100644 --- a/source/blender/draw/modes/paint_weight_mode.c +++ b/source/blender/draw/modes/paint_weight_mode.c @@ -168,7 +168,7 @@ static void PAINT_WEIGHT_cache_populate(void *vedata, Object *ob) SceneLayer *sl = draw_ctx->sl; if (ob->type == OB_MESH && ob == sl->basact->object) { - IDProperty *ces_mode_pw = BKE_object_collection_engine_get(ob, COLLECTION_MODE_PAINT_WEIGHT, ""); + IDProperty *ces_mode_pw = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_PAINT_WEIGHT, ""); bool use_wire = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_wire"); char flag = ((Mesh *)ob->data)->editflag; struct Batch *geom; |