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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2017-05-05 17:27:31 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-05-05 19:08:24 +0300
commit8d9c48415257eca370dad5c163f0fec06e31dd6b (patch)
tree1ddaf42a0c8d82bd99bbc8897592efd173b5cfc8 /source/blender/draw
parent741d848cf8ee2d6f682150fc965036f6185655a3 (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.c2
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c25
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c17
-rw-r--r--source/blender/draw/engines/external/external_engine.c2
-rw-r--r--source/blender/draw/intern/draw_manager.c2
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c2
-rw-r--r--source/blender/draw/modes/object_mode.c2
-rw-r--r--source/blender/draw/modes/paint_vertex_mode.c2
-rw-r--r--source/blender/draw/modes/paint_weight_mode.c2
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;