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:
authorClément Foucault <foucault.clem@gmail.com>2017-01-29 02:55:46 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-01-29 02:55:46 +0300
commit744f26b6129fc3723f9934d358060a3cb931474c (patch)
tree9e3f58255dcd9dbdbfd056f6436ddc9108530cb2
parent5bf60530e5f1843b613439ea05790412d7f74d41 (diff)
Change in DNA/RNA. Still missing freeing and read/write.
-rw-r--r--release/scripts/startup/bl_ui/properties_material.py20
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py21
-rw-r--r--source/blender/blenkernel/intern/material.c24
-rw-r--r--source/blender/blenkernel/intern/scene.c5
-rw-r--r--source/blender/blenloader/intern/readfile.c11
-rw-r--r--source/blender/blenloader/intern/versioning_280.c32
-rw-r--r--source/blender/blenloader/intern/writefile.c7
-rw-r--r--source/blender/draw/DRW_engine.h6
-rw-r--r--source/blender/draw/engines/clay/clay.c123
-rw-r--r--source/blender/draw/engines/clay/clay.h3
-rw-r--r--source/blender/draw/intern/DRW_render.h6
-rw-r--r--source/blender/draw/intern/draw_cache.c33
-rw-r--r--source/blender/draw/intern/draw_cache.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c46
-rw-r--r--source/blender/makesdna/DNA_material_types.h29
-rw-r--r--source/blender/makesdna/DNA_scene_types.h88
-rw-r--r--source/blender/makesrna/RNA_access.h2
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt1
-rw-r--r--source/blender/makesrna/intern/rna_material.c22
-rw-r--r--source/blender/makesrna/intern/rna_scene.c109
20 files changed, 339 insertions, 251 deletions
diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py
index 04662095a02..e8ba7cc8033 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -1060,16 +1060,16 @@ class MATERIAL_PT_clay_settings(MaterialButtonsPanel, Panel):
def draw(self, context):
layout = self.layout;
settings = context.material.clay_settings
- layout.template_icon_view(settings, "matcap_icon")
- layout.prop(settings, "type")
- layout.prop(settings, "matcap_rotation")
- layout.prop(settings, "matcap_hue")
- layout.prop(settings, "matcap_saturation")
- layout.prop(settings, "matcap_value")
- layout.prop(settings, "ssao_factor_cavity")
- layout.prop(settings, "ssao_factor_edge")
- layout.prop(settings, "ssao_distance")
- layout.prop(settings, "ssao_attenuation")
+ # layout.template_icon_view(settings, "matcap_icon")
+ # layout.prop(settings, "type")
+ # layout.prop(settings, "matcap_rotation")
+ # layout.prop(settings, "matcap_hue")
+ # layout.prop(settings, "matcap_saturation")
+ # layout.prop(settings, "matcap_value")
+ # layout.prop(settings, "ssao_factor_cavity")
+ # layout.prop(settings, "ssao_factor_edge")
+ # layout.prop(settings, "ssao_distance")
+ # layout.prop(settings, "ssao_attenuation")
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 0d473d79edd..593072992fc 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -590,17 +590,16 @@ class RENDER_PT_clay(RenderButtonsPanel, Panel):
def draw(self, context):
layout = self.layout;
- settings = context.scene.clay_settings
- matsettings = context.scene.clay_settings.mat_settings
- layout.template_icon_view(matsettings, "matcap_icon")
- layout.prop(matsettings, "matcap_rotation")
- layout.prop(matsettings, "matcap_hue")
- layout.prop(matsettings, "matcap_saturation")
- layout.prop(matsettings, "matcap_value")
- layout.prop(matsettings, "ssao_factor_cavity")
- layout.prop(matsettings, "ssao_factor_edge")
- layout.prop(matsettings, "ssao_distance")
- layout.prop(matsettings, "ssao_attenuation")
+ settings = context.scene.render_engine
+ layout.template_icon_view(settings, "matcap_icon")
+ layout.prop(settings, "matcap_rotation")
+ layout.prop(settings, "matcap_hue")
+ layout.prop(settings, "matcap_saturation")
+ layout.prop(settings, "matcap_value")
+ layout.prop(settings, "ssao_factor_cavity")
+ layout.prop(settings, "ssao_factor_edge")
+ layout.prop(settings, "ssao_distance")
+ layout.prop(settings, "ssao_attenuation")
layout.prop(settings, "ssao_samples")
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index ad53d03f43a..3fb7ee89aea 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -112,10 +112,7 @@ void BKE_material_free(Material *ma)
BKE_icon_id_delete((ID *)ma);
BKE_previewimg_free(&ma->preview);
- if (ma->clay.runtime) {
- MEM_freeN(ma->clay.runtime);
- ma->clay.runtime = NULL;
- }
+ /* TODO Free Engine Settings */
}
void BKE_material_init(Material *ma)
@@ -211,17 +208,6 @@ void BKE_material_init(Material *ma)
ma->mode2 = MA_CASTSHADOW;
ma->shade_flag = MA_APPROX_OCCLUSION;
ma->preview = NULL;
-
- /* New engines */
- ma->clay.matcap_rot = 0.0f;
- ma->clay.matcap_hue = 0.5f;
- ma->clay.matcap_sat = 0.5f;
- ma->clay.matcap_val = 0.5f;
- ma->clay.ssao_distance = 0.2;
- ma->clay.ssao_attenuation = 1.0f;
- ma->clay.ssao_factor_cavity = 1.0f;
- ma->clay.ssao_factor_edge = 1.0f;
- ma->clay.runtime = NULL;
}
Material *BKE_material_add(Main *bmain, const char *name)
@@ -263,7 +249,8 @@ Material *BKE_material_copy(Main *bmain, Material *ma)
BKE_previewimg_id_copy(&man->id, &ma->id);
BLI_listbase_clear(&man->gpumaterial);
- man->clay.runtime = NULL;
+
+ /* TODO Duplicate Engine Settings and set runtime to NULL */
BKE_id_copy_ensure_local(bmain, &ma->id, &man->id);
@@ -296,7 +283,8 @@ Material *localize_material(Material *ma)
man->nodetree = ntreeLocalize(ma->nodetree);
BLI_listbase_clear(&man->gpumaterial);
- man->clay.runtime = NULL;
+
+ /* TODO Duplicate Engine Settings and set runtime to NULL */
return man;
}
@@ -1716,7 +1704,7 @@ void copy_matcopybuf(Material *ma)
matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, G.main, false);
matcopybuf.preview = NULL;
BLI_listbase_clear(&matcopybuf.gpumaterial);
- matcopybuf.clay.runtime = NULL;
+ /* TODO Duplicate Engine Settings and set runtime to NULL */
matcopied = 1;
}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 2d92e03f766..b4aa47bf9dc 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -569,10 +569,7 @@ void BKE_scene_free(Scene *sce)
sce->collection = NULL;
/* Runtime Engine Data */
- if (sce->claydata.defsettings.runtime) {
- MEM_freeN(sce->claydata.defsettings.runtime);
- sce->claydata.defsettings.runtime = NULL;
- }
+ BLI_freelistN(&sce->engines_settings);
}
void BKE_scene_init(Scene *sce)
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index be5f16bef4a..a8dc9d0ed83 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3988,8 +3988,6 @@ static void direct_link_material(FileData *fd, Material *ma)
ma->preview = direct_link_preview_image(fd, ma->preview);
BLI_listbase_clear(&ma->gpumaterial);
-
- ma->clay.runtime = NULL;
}
/* ************ READ PARTICLE SETTINGS ***************** */
@@ -5949,6 +5947,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
RigidBodyWorld *rbw;
SceneLayer *sl;
SceneRenderLayer *srl;
+ RenderEngineSettings *res;
sce->theDag = NULL;
sce->depsgraph = NULL;
@@ -6211,8 +6210,12 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sl->basact = newdataadr(fd, sl->basact);
direct_link_layer_collections(fd, &sl->layer_collections);
}
-
- sce->claydata.defsettings.runtime = NULL;
+#if 0
+ link_list(fd, &sce->engines_settings);
+ for (res = sce->engines_settings.first; res; res = res->next) {
+ res->runtime = NULL;
+ }
+#endif
}
/* ************ READ WM ***************** */
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 954d5aeb105..92592e9fc62 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -178,37 +178,5 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
BLI_strncpy(scene->collection->name, "Master Collection", sizeof(scene->collection->name));
}
}
-
- /* Clay engine defaults */
- if (!DNA_struct_elem_find(fd->filesdna, "Scene", "EngineDataClay", "claydata")) {
- for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
- EngineDataClay *settings = &scene->claydata;
-
- settings->defsettings.matcap_rot = 0.0f;
- settings->defsettings.matcap_hue = 0.5f;
- settings->defsettings.matcap_sat = 0.5f;
- settings->defsettings.matcap_val = 0.5f;
- settings->defsettings.ssao_distance = 0.2;
- settings->defsettings.ssao_attenuation = 1.0f;
- settings->defsettings.ssao_factor_cavity = 1.0f;
- settings->defsettings.ssao_factor_edge = 1.0f;
- settings->ssao_samples = 32;
- }
- }
-
- if (!DNA_struct_elem_find(fd->filesdna, "Material", "MaterialSettingsClay", "clay")) {
- for (Material *mat = main->mat.first; mat; mat = mat->id.next) {
- MaterialSettingsClay *clay = &mat->clay;
-
- clay->matcap_rot = 0.0f;
- clay->matcap_hue = 0.5f;
- clay->matcap_sat = 0.5f;
- clay->matcap_val = 0.5f;
- clay->ssao_distance = 0.2;
- clay->ssao_attenuation = 1.0f;
- clay->ssao_factor_cavity = 1.0f;
- clay->ssao_factor_edge = 1.0f;
- }
- }
}
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 1621bb78432..4032dbe9d28 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2666,6 +2666,7 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
FreestyleModuleConfig *fmc;
FreestyleLineSet *fls;
SceneLayer *sl;
+ RenderEngineSettings *res;
sce = scebase->first;
while (sce) {
@@ -2878,7 +2879,11 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
writelist(wd, DATA, ObjectBase, &sl->object_bases);
write_layer_collections(wd, &sl->layer_collections);
}
-
+#if 0
+ for (res = sce->engines_settings.first; res; res = res->next) {
+ /* How to write if struct type is not known? */
+ }
+#endif
sce = sce->id.next;
}
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index d58e2406faa..4f86e3fcd91 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -29,6 +29,8 @@
//#define WITH_VIEWPORT_CACHE_TEST
struct DRWPass;
+struct Material;
+struct Scene;
void DRW_engines_init(void);
void DRW_engines_free(void);
@@ -36,4 +38,8 @@ void DRW_engines_free(void);
/* This is here because GPUViewport needs it */
void DRW_pass_free(struct DRWPass *pass);
+/* Settings */
+void *DRW_material_settings_get(struct Material *ma, const char *engine_name);
+void *DRW_render_settings_get(struct Scene *scene, const char *engine_name);
+
#endif /* __DRW_ENGINE_H__ */ \ No newline at end of file
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index cf5720b911e..6e155776bb7 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -235,6 +235,43 @@ static struct GPUTexture *create_jitter_texture(void)
return DRW_texture_create_2D(64, 64, DRW_TEX_RG_16, DRW_TEX_FILTER | DRW_TEX_WRAP, &jitter[0][0]);
}
+static void clay_material_settings_init(MaterialEngineSettingsClay *ma)
+{
+ ma->matcap_icon = 0;
+ ma->matcap_rot = 0.0f;
+ ma->matcap_hue = 0.5f;
+ ma->matcap_sat = 0.5f;
+ ma->matcap_val = 0.5f;
+ ma->ssao_distance = 0.2;
+ ma->ssao_attenuation = 1.0f;
+ ma->ssao_factor_cavity = 1.0f;
+ ma->ssao_factor_edge = 1.0f;
+}
+
+RenderEngineSettings *CLAY_render_settings_create(void)
+{
+ RenderEngineSettingsClay *settings = MEM_callocN(sizeof(RenderEngineSettingsClay), "RenderEngineSettingsClay");
+
+ BLI_strncpy(settings->res.name, RE_engine_id_BLENDER_CLAY, 64);
+
+ clay_material_settings_init((MaterialEngineSettingsClay *)settings);
+
+ settings->ssao_samples = 32;
+
+ return (RenderEngineSettings *)settings;
+}
+
+MaterialEngineSettings *CLAY_material_settings_create(void)
+{
+ MaterialEngineSettingsClay *settings = MEM_callocN(sizeof(MaterialEngineSettingsClay), "MaterialEngineSettingsClay");
+
+ BLI_strncpy(settings->mes.name, RE_engine_id_BLENDER_CLAY, 64);
+
+ clay_material_settings_init(settings);
+
+ return (MaterialEngineSettings *)settings;
+}
+
static void CLAY_engine_init(void)
{
/* Create Texture Array */
@@ -329,7 +366,7 @@ static void CLAY_ssao_setup(void)
};
int i;
float *size = DRW_viewport_size_get();
- EngineDataClay *settings = DRW_render_settings();
+ RenderEngineSettingsClay *settings = DRW_render_settings_get(NULL, RE_engine_id_BLENDER_CLAY);
DRW_get_dfdy_factors(dfdyfacs);
@@ -367,11 +404,11 @@ static void CLAY_ssao_setup(void)
}
}
-static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *material_id)
+static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *UNUSED(material_id))
{
const int depthloc = 0, matcaploc = 1, jitterloc = 2, sampleloc = 3;
- CLAY_UBO_Material *mat = &data.mat_storage.materials[0];
+ //CLAY_UBO_Material *mat = &data.mat_storage.materials[0];
DRWShadingGroup *grp = DRW_shgroup_create(data.clay_sh, pass);
DRW_shgroup_uniform_vec2(grp, "screenres", DRW_viewport_size_get(), 1);
@@ -392,32 +429,33 @@ static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *material_id)
return grp;
}
-static void CLAY_update_material_runtime(MaterialSettingsClay *settings)
+static void CLAY_update_material_runtime(MaterialEngineSettingsClay *settings)
{
- MaterialDataClayRuntime *runtime_data;
+ MaterialRuntimeClay *runtime;
- if (!settings->runtime) {
- settings->runtime = MEM_mallocN(sizeof(MaterialDataClayRuntime), "MaterialDataClayRuntime");
- settings->runtime->flag = CLAY_OUTDATED;
+ if (!settings->mes.runtime) {
+ runtime = MEM_mallocN(sizeof(MaterialRuntimeClay), "MaterialRuntimeClay");
+ runtime->flag = CLAY_OUTDATED;
+ settings->mes.runtime = runtime;
data.ubo_flag |= CLAY_UBO_CLEAR;
}
- runtime_data = settings->runtime;
+ runtime = settings->mes.runtime;
- if (runtime_data->flag & CLAY_OUTDATED) {
+ if (runtime->flag & CLAY_OUTDATED) {
/* Update default material */
- runtime_data->matcap_rot[0] = cosf(settings->matcap_rot * 3.14159f * 2.0f);
- runtime_data->matcap_rot[1] = sinf(settings->matcap_rot * 3.14159f * 2.0f);
+ runtime->matcap_rot[0] = cosf(settings->matcap_rot * 3.14159f * 2.0f);
+ runtime->matcap_rot[1] = sinf(settings->matcap_rot * 3.14159f * 2.0f);
- runtime_data->matcap_hsv[0] = settings->matcap_hue + 0.5f;
- runtime_data->matcap_hsv[1] = settings->matcap_sat * 2.0f;
- runtime_data->matcap_hsv[2] = settings->matcap_val * 2.0f;
+ runtime->matcap_hsv[0] = settings->matcap_hue + 0.5f;
+ runtime->matcap_hsv[1] = settings->matcap_sat * 2.0f;
+ runtime->matcap_hsv[2] = settings->matcap_val * 2.0f;
- runtime_data->ssao_params_var[0] = settings->ssao_distance;
- runtime_data->ssao_params_var[1] = settings->ssao_factor_cavity;
- runtime_data->ssao_params_var[2] = settings->ssao_factor_edge;
- runtime_data->ssao_params_var[3] = settings->ssao_attenuation;
+ runtime->ssao_params_var[0] = settings->ssao_distance;
+ runtime->ssao_params_var[1] = settings->ssao_factor_cavity;
+ runtime->ssao_params_var[2] = settings->ssao_factor_edge;
+ runtime->ssao_params_var[3] = settings->ssao_attenuation;
if (settings->matcap_icon < ICON_MATCAP_01 ||
settings->matcap_icon > ICON_MATCAP_24)
@@ -425,29 +463,29 @@ static void CLAY_update_material_runtime(MaterialSettingsClay *settings)
settings->matcap_icon = ICON_MATCAP_01;
}
- runtime_data->matcap_id = matcap_to_index(settings->matcap_icon);
+ runtime->matcap_id = matcap_to_index(settings->matcap_icon);
- if ((runtime_data->type != settings->type)) {
+ if ((runtime->type != settings->type)) {
data.ubo_flag |= CLAY_UBO_CLEAR;
}
- runtime_data->type = settings->type;
+ runtime->type = settings->type;
data.ubo_flag |= CLAY_UBO_REFRESH;
- runtime_data->flag &= ~CLAY_OUTDATED;
+ runtime->flag &= ~CLAY_OUTDATED;
}
}
-static void update_ubo_storage(MaterialDataClayRuntime *runtime_data, unsigned int current_id)
+static void update_ubo_storage(MaterialRuntimeClay *runtime, unsigned int current_id)
{
CLAY_UBO_Material *ubo = &data.mat_storage.materials[current_id];
- ubo->matcap_id = runtime_data->matcap_id;
- copy_v3_v3(ubo->matcap_hsv, runtime_data->matcap_hsv);
- copy_v2_v2(ubo->matcap_rot, runtime_data->matcap_rot);
- copy_v4_v4(ubo->ssao_params_var, runtime_data->ssao_params_var);
+ ubo->matcap_id = runtime->matcap_id;
+ copy_v3_v3(ubo->matcap_hsv, runtime->matcap_hsv);
+ copy_v2_v2(ubo->matcap_rot, runtime->matcap_rot);
+ copy_v4_v4(ubo->ssao_params_var, runtime->ssao_params_var);
- runtime_data->material_id = current_id;
+ runtime->material_id = current_id;
}
static void CLAY_update_material_ubo(const struct bContext *C)
@@ -456,31 +494,34 @@ static void CLAY_update_material_ubo(const struct bContext *C)
/* Update Default materials */
for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
- EngineDataClay *ed = &sce->claydata;
- CLAY_update_material_runtime((MaterialSettingsClay *)&ed->defsettings);
+ /* Using render settings as material settings */
+ MaterialEngineSettingsClay *res = DRW_render_settings_get(sce, RE_engine_id_BLENDER_CLAY);
+ CLAY_update_material_runtime(res);
}
/* Update Scene Materials */
for (Material *mat = bmain->mat.first; mat; mat = mat->id.next) {
- CLAY_update_material_runtime(&mat->clay);
+ MaterialEngineSettingsClay *mesc = DRW_material_settings_get(mat, RE_engine_id_BLENDER_CLAY);
+ CLAY_update_material_runtime(mesc);
}
if (data.ubo_flag & CLAY_UBO_REFRESH) {
- MaterialDataClayRuntime *runtime_data;
+ MaterialRuntimeClay *runtime;
int current_id = 0;
/* Default materials */
for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
- EngineDataClay *ed = &sce->claydata;
- runtime_data = ed->defsettings.runtime;
- update_ubo_storage(runtime_data, current_id);
+ RenderEngineSettingsClay *ed = DRW_render_settings_get(sce, RE_engine_id_BLENDER_CLAY);
+ runtime = ed->res.runtime;
+ update_ubo_storage(runtime, current_id);
current_id++;
}
/* TODO only add materials linked to geometry */
for (Material *mat = bmain->mat.first; mat; mat = mat->id.next) {
- runtime_data = mat->clay.runtime;
- update_ubo_storage(runtime_data, current_id);
+ MaterialEngineSettingsClay *mesc = DRW_material_settings_get(mat, RE_engine_id_BLENDER_CLAY);
+ runtime = mesc->mes.runtime;
+ update_ubo_storage(runtime, current_id);
current_id++;
}
@@ -505,12 +546,12 @@ static void CLAY_create_cache(CLAY_PassList *passes, const struct bContext *C)
/* Clay Pass */
{
- MaterialDataClayRuntime *runtime;
- EngineDataClay *settings = DRW_render_settings();
+ MaterialRuntimeClay *runtime;
+ RenderEngineSettingsClay *settings = DRW_render_settings_get(NULL, RE_engine_id_BLENDER_CLAY);
passes->clay_pass = DRW_pass_create("Clay Pass", DRW_STATE_WRITE_COLOR);
- runtime = settings->defsettings.runtime;
+ runtime = settings->res.runtime;
default_shgrp = CLAY_shgroup_create(passes->clay_pass, &runtime->material_id);
DRW_shgroup_uniform_block(default_shgrp, "material_block", data.mat_ubo, 0);
diff --git a/source/blender/draw/engines/clay/clay.h b/source/blender/draw/engines/clay/clay.h
index 16b53d727c3..404924be2a1 100644
--- a/source/blender/draw/engines/clay/clay.h
+++ b/source/blender/draw/engines/clay/clay.h
@@ -28,6 +28,9 @@
extern RenderEngineType viewport_clay_type;
+struct RenderEngineSettings *CLAY_render_settings_create(void);
+struct MaterialEngineSettings *CLAY_material_settings_create(void);
+
void clay_engine_free(void);
#endif /* __ENGINE_CLAY_H__ */ \ No newline at end of file
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 75f5a124a1c..16b3000a46f 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -199,8 +199,10 @@ bool DRW_viewport_is_persp_get(void);
bool DRW_viewport_cache_is_dirty(void);
/* Settings */
-void *DRW_material_settings(Material *ma);
-void *DRW_render_settings(void);
+#ifndef __DRW_ENGINE_H__
+void *DRW_material_settings_get(Material *ma, const char *engine_name);
+void *DRW_render_settings_get(Scene *scene, const char *engine_name);
+#endif /* __DRW_ENGINE_H__ */
/* Draw commands */
void DRW_draw_background(void);
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 75e712d2b37..a5a465a145e 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -29,6 +29,7 @@
#include "DNA_object_types.h"
#include "BLI_utildefines.h"
+#include "BLI_math.h"
#include "BKE_mesh_render.h"
@@ -40,7 +41,7 @@ static struct DRWShapeCache{
Batch *drw_single_vertice;
Batch *drw_fullscreen_quad;
Batch *drw_plain_axes;
- // Batch drw_single_arrow;
+ Batch *drw_circle_ball;
// Batch drw_cube;
// Batch drw_circle;
// Batch drw_sphere;
@@ -80,6 +81,36 @@ Batch *DRW_cache_fullscreen_quad_get(void)
return SHC.drw_fullscreen_quad;
}
+/* Common */
+#define CIRCLE_RESOL 32
+
+Batch *DRW_cache_circle_ball_get(void)
+{
+ if (!SHC.drw_circle_ball) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static VertexFormat format = { 0 };
+ static unsigned pos_id;
+ if (format.attrib_ct == 0) {
+ pos_id = add_attrib(&format, "pos", GL_FLOAT, 3, KEEP_FLOAT);
+ }
+
+ VertexBuffer *vbo = VertexBuffer_create_with_format(&format);
+ VertexBuffer_allocate_data(vbo, CIRCLE_RESOL);
+
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = 0.0f;
+ setAttrib(vbo, pos_id, 0, v);
+ }
+
+ SHC.drw_circle_ball = Batch_create(GL_LINE_LOOP, vbo, NULL);
+ }
+ return SHC.drw_circle_ball;
+}
+
/* Empties */
Batch *DRW_cache_plain_axes_get(void)
{
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index df8f6ec23ef..13b33931b76 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -31,9 +31,9 @@ struct Object;
/* Common Shapes */
struct Batch *DRW_cache_fullscreen_quad_get(void);
+struct Batch *DRW_cache_circle_ball_get(void);
struct Batch *DRW_cache_single_vert_get(void);
struct Batch *DRW_cache_plain_axes_get(void);
-
/* Meshes */
struct Batch *DRW_cache_wire_outline_get(struct Object *ob);
struct Batch *DRW_cache_surface_get(struct Object *ob);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 0bb651897b4..26ae4ee6eef 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -847,28 +847,48 @@ void DRW_state_reset(void)
set_state(state);
}
-/* ****************************************** Materials ******************************************/
+/* ****************************************** Settings ******************************************/
-void *DRW_material_settings(Material *ma)
+void *DRW_material_settings_get(Material *ma, const char *engine_name)
{
- Scene *scene = CTX_data_scene(DST.context);
+ MaterialEngineSettings *ms = NULL;
- if (STREQ(scene->r.engine, RE_engine_id_BLENDER_CLAY))
- return &ma->clay;
+ ms = BLI_findstring(&ma->engines_settings, engine_name, offsetof(MaterialEngineSettings, name));
- BLI_assert(false);
- return NULL;
+ /* If the settings does not exists yet, create it */
+ if (ms == NULL) {
+ /* TODO make render_settings_create a polymorphic function */
+ if (STREQ(engine_name, RE_engine_id_BLENDER_CLAY)) {
+ ms = CLAY_material_settings_create();
+ }
+
+ BLI_addtail(&ma->engines_settings, ms);
+ }
+
+ return ms;
}
-void *DRW_render_settings(void)
+/* If scene is NULL, use context scene */
+void *DRW_render_settings_get(Scene *scene, const char *engine_name)
{
- Scene *scene = CTX_data_scene(DST.context);
+ RenderEngineSettings *rs = NULL;
- if (STREQ(scene->r.engine, RE_engine_id_BLENDER_CLAY))
- return &scene->claydata;
+ if (scene == NULL)
+ scene = CTX_data_scene(DST.context);
- BLI_assert(false);
- return NULL;
+ rs = BLI_findstring(&scene->engines_settings, engine_name, offsetof(RenderEngineSettings, name));
+
+ /* If the settings does not exists yet, create it */
+ if (rs == NULL) {
+ /* TODO make render_settings_create a polymorphic function */
+ if (STREQ(engine_name, RE_engine_id_BLENDER_CLAY)) {
+ rs = CLAY_render_settings_create();
+ }
+
+ BLI_addtail(&scene->engines_settings, rs);
+ }
+
+ return rs;
}
/* ****************************************** Framebuffers ******************************************/
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 97e7c664ae7..7afeb26736c 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -90,8 +90,17 @@ typedef struct TexPaintSlot {
int pad;
} TexPaintSlot;
-/* Runtime Render Data Not saved in file */
-typedef struct MaterialDataClayRuntime {
+/* Material Engine Settings */
+typedef struct MaterialEngineSettings {
+ struct MaterialEngineSettings *next, *prev;
+ char name[64]; /* engine name - MAX_NAME */
+ void *runtime; /* To be free on file read */
+} MaterialEngineSettings;
+
+/* Clay engine */
+
+/* Runtime Data Not saved in file */
+typedef struct MaterialRuntimeClay {
short type;
short flag;
int material_id; /* Index in materials UBO */
@@ -99,14 +108,13 @@ typedef struct MaterialDataClayRuntime {
float matcap_rot[2];
float matcap_hsv[3];
float ssao_params_var[4];
-} MaterialDataClayRuntime;
+} MaterialRuntimeClay;
-/* MaterialDataClayRuntime.flag */
+/* MaterialRuntimeClay.flag */
#define CLAY_OUTDATED 1
-/* Duplicated in DNA_scene_types.h under SceneSettingsClay */
-typedef struct MaterialSettingsClay {
- struct MaterialDataClayRuntime *runtime;
+typedef struct MaterialEngineSettingsClay {
+ struct MaterialEngineSettings mes; /* keep first */
short type;
short matcap_icon; /* Icon ID */
@@ -122,9 +130,9 @@ typedef struct MaterialSettingsClay {
float ssao_factor_edge;
float pad;
-} MaterialSettingsClay;
+} MaterialEngineSettingsClay;
-/* MaterialSettingsClay.type */
+/* MaterialEngineSettingsClay.type */
#define CLAY_MATCAP_NONE 0
#define CLAY_MATCAP_SIMPLE 1
#define CLAY_MATCAP_COMPLETE 2
@@ -243,8 +251,7 @@ typedef struct Material {
struct TexPaintSlot *texpaintslot; /* cached slot for painting. Make sure to recalculate before use
* with refresh_texpaint_image_cache */
/* Engine Settings */
- struct MaterialSettingsClay clay;
- float pad6[2];
+ ListBase engines_settings; /* MaterialEngineSettings */
ListBase gpumaterial; /* runtime */
} Material;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 3759aa3d48b..b89c6709f0b 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -68,7 +68,6 @@ struct bGPDbrush;
struct MovieClip;
struct ColorSpace;
struct SceneCollection;
-struct MaterialSettingsClay;
/* ************************************************************* */
/* Scene Data */
@@ -547,6 +546,50 @@ typedef enum BakePassFilter {
#define R_BAKE_PASS_FILTER_ALL (~0)
/* *************************************************************** */
+/* Engine Settings */
+
+typedef struct RenderEngineSettings {
+ struct RenderEngineSettings *next, *prev;
+ char name[64]; /* engine name - MAX_NAME */
+ void *runtime; /* Here to be free on file read */
+} RenderEngineSettings;
+
+/* Render Data */
+typedef struct RenderEngineSettingsClay {
+ struct RenderEngineSettings res; /* keep first */
+
+ /* Use same layout as MaterialEngineSettingsClay so this struct
+ * can be used as Material Settings. */
+ short type;
+ short matcap_icon; /* Icon ID */
+
+ float matcap_rot;
+ float matcap_hue;
+ float matcap_sat;
+ float matcap_val;
+
+ float ssao_distance;
+ float ssao_attenuation;
+ float ssao_factor_cavity;
+ float ssao_factor_edge;
+
+ float pad;
+ /* end of MaterialEngineSettingsClay */
+
+ /* Global Settings */
+ short options;
+ short pad1;
+ int ssao_samples;
+ int pad2[2];
+} RenderEngineSettingsClay;
+
+/* RenderEngineSettingsClay.options */
+typedef enum ClayFlagSettings {
+ CLAY_USE_AO = (1 << 0),
+ CLAY_USE_HSV = (1 << 1),
+} ClayFlagSettings;
+
+/* *************************************************************** */
/* Render Data */
typedef struct RenderData {
@@ -794,44 +837,6 @@ typedef struct RenderProfile {
} RenderProfile;
/* *************************************************************** */
-/* Clay Engine */
-
-/* Duplicated in DNA_material_types.h under MaterialSettingsClay */
-typedef struct SceneSettingsClay {
- struct MaterialDataClayRuntime *runtime;
-
- short type;
- short matcap_icon; /* Icon ID */
-
- float matcap_rot;
- float matcap_hue;
- float matcap_sat;
- float matcap_val;
-
- float ssao_distance;
- float ssao_attenuation;
- float ssao_factor_cavity;
- float ssao_factor_edge;
-
- float pad;
-} SceneSettingsClay;
-
-/* Render Data */
-typedef struct EngineDataClay {
- /* Default Matcap settings */
- struct SceneSettingsClay defsettings;
- short options;
- short pad;
- /* Global Settings */
- int ssao_samples;
- int pad2[2];
-} EngineDataClay;
-
-/* EngineDataClay.options */
-#define CLAY_USE_AO 1
-#define CLAY_USE_HSV 2
-
-/* *************************************************************** */
/* Game Engine - Dome */
typedef struct GameDome {
@@ -1754,9 +1759,8 @@ typedef struct Scene {
int active_layer;
int pad4;
- /* Engine Settings */
- struct EngineDataClay claydata;
- short pad10[4];
+ ListBase engines_settings; /* RenderEngineSettings */
+ int pad5[2];
} Scene;
/* **************** RENDERDATA ********************* */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 448e5901ec8..b81806942f7 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -498,6 +498,8 @@ extern StructRNA RNA_RenderLayer;
extern StructRNA RNA_RenderPass;
extern StructRNA RNA_RenderResult;
extern StructRNA RNA_RenderSettings;
+extern StructRNA RNA_RenderEngineSettings;
+extern StructRNA RNA_RenderEngineSettingsClay;
extern StructRNA RNA_RigidBodyWorld;
extern StructRNA RNA_RigidBodyObject;
extern StructRNA RNA_RigidBodyJointConstraint;
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 0f3ea27a7f9..608d4781e60 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -341,6 +341,7 @@ blender_include_dirs(
../../bmesh
../../blentranslation
../../depsgraph
+ ../../draw
../../gpu
../../imbuf
../../ikplugin
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 950983dda31..e477cca0e5c 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -123,17 +123,6 @@ static void rna_Material_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
}
-static void rna_Material_update_engine_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
-{
- Material *ma = ptr->id.data;
-
- if (ma->clay.runtime) {
- ma->clay.runtime->flag |= CLAY_OUTDATED;
- }
-
- WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
-}
-
static PointerRNA rna_Material_mirror_get(PointerRNA *ptr)
{
return rna_pointer_inherit_refine(ptr, &RNA_MaterialRaytraceMirror, ptr->id.data);
@@ -875,8 +864,8 @@ static void rna_def_material_settings_clay(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}
};
- srna = RNA_def_struct(brna, "ClayMaterialSettings", NULL);
- RNA_def_struct_sdna(srna, "MaterialSettingsClay");
+ srna = RNA_def_struct(brna, "MaterialSettingsClay", NULL);
+ RNA_def_struct_sdna(srna, "MaterialEngineSettingsClay");
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Clay Settings", "Clay Engine settings for a Material data-block");
@@ -2199,13 +2188,14 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "MaterialGameSettings");
RNA_def_property_ui_text(prop, "Game Settings", "Game material settings");
- /* Clay settings */
+ /* Engine settings */
+#if 0 /* TODO */
prop = RNA_def_property(srna, "clay_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "clay");
RNA_def_property_struct_type(prop, "ClayMaterialSettings");
RNA_def_property_ui_text(prop, "Clay Settings", "Clay material settings");
-
+#endif
/* nodetree */
prop = RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
@@ -2255,7 +2245,7 @@ void RNA_def_material(BlenderRNA *brna)
rna_def_material_strand(brna);
rna_def_material_physics(brna);
rna_def_material_gamesettings(brna);
- rna_def_material_settings_clay(brna);
+ // rna_def_material_settings_clay(brna);
RNA_api_material(srna);
}
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 3b599dedfca..660942fbfda 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -52,6 +52,8 @@
#include "GPU_extensions.h"
+#include "DRW_engine.h"
+
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -947,6 +949,34 @@ static void rna_Scene_all_keyingsets_next(CollectionPropertyIterator *iter)
iter->valid = (internal->link != NULL);
}
+static StructRNA *rna_Scene_render_engine_typef(PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->data;
+
+ if (STREQ(scene->r.engine, RE_engine_id_BLENDER_CLAY)) {
+ return &RNA_RenderEngineSettingsClay;
+ }
+
+ return &RNA_RenderEngineSettings;
+}
+
+static PointerRNA rna_Scene_render_engine_get(PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->data;
+ RenderEngineSettings *res = DRW_render_settings_get(scene, scene->r.engine);
+
+ if (STREQ(scene->r.engine, RE_engine_id_BLENDER_CLAY)) {
+ return rna_pointer_inherit_refine(ptr, &RNA_RenderEngineSettingsClay, res);
+ }
+
+ return rna_pointer_inherit_refine(ptr, &RNA_RenderEngineSettings, res);
+}
+
+static char *rna_RenderEngineSettings_path(PointerRNA *UNUSED(ptr))
+{
+ return BLI_sprintfN("render_engine");
+}
+
static int rna_RenderSettings_stereoViews_skip(CollectionPropertyIterator *iter, void *UNUSED(data))
{
ListBaseIterator *internal = &iter->internal.listbase;
@@ -1872,15 +1902,15 @@ static void rna_GameSettings_exit_key_set(PointerRNA *ptr, int value)
gm->exitkey = value;
}
-static void rna_ClaySettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_RenderEngineSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
Scene *sce = ptr->id.data;
- EngineDataClay *ed = &sce->claydata;
- SceneSettingsClay *ms = &ed->defsettings;
- MaterialDataClayRuntime *mdr = ms->runtime;
+ RenderEngineSettings *ed = DRW_render_settings_get(sce, sce->r.engine);
- if (mdr)
- mdr->flag |= CLAY_OUTDATED;
+ if (ed->runtime) {
+ MEM_freeN(ed->runtime);
+ ed->runtime = NULL;
+ }
WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, NULL);
}
@@ -6545,11 +6575,10 @@ static void rna_def_scene_quicktime_settings(BlenderRNA *brna)
}
#endif
-static void rna_def_material_settings_clay(BlenderRNA *brna)
+static void rna_def_render_engine_settings_clay(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
-
static EnumPropertyItem clay_matcap_items[] = {
{ICON_MATCAP_01, "01", ICON_MATCAP_01, "", ""},
{ICON_MATCAP_02, "02", ICON_MATCAP_02, "", ""},
@@ -6578,85 +6607,77 @@ static void rna_def_material_settings_clay(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}
};
- srna = RNA_def_struct(brna, "ClayRenderMaterialSettings", NULL);
- RNA_def_struct_sdna(srna, "SceneSettingsClay");
- RNA_def_struct_nested(brna, srna, "ClayRenderSettings");
+ srna = RNA_def_struct(brna, "RenderEngineSettingsClay", NULL);
+ RNA_def_struct_nested(brna, srna, "Scene");
RNA_def_struct_ui_text(srna, "Material Clay Settings", "Clay Engine settings for a Material data-block");
prop = RNA_def_property(srna, "matcap_icon", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, clay_matcap_items);
RNA_def_property_ui_text(prop, "Matcap", "Image to use for Material Capture by this material");
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "matcap_rotation", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "matcap_rot");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Matcap Rotation", "Orientation of the matcap on the model");
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "matcap_hue", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Matcap Hue shift", "Hue correction of the matcap");
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "matcap_saturation", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "matcap_sat");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Matcap Saturation", "Saturation correction of the matcap");
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "matcap_value", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "matcap_val");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Matcap Value", "Value correction of the matcap");
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "ssao_factor_cavity", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Cavity Strength", "Strength of the Cavity effect");
RNA_def_property_range(prop, 0.0f, 250.0f);
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "ssao_factor_edge", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Edge Strength", "Strength of the Edge effect");
RNA_def_property_range(prop, 0.0f, 250.0f);
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "ssao_distance", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Distance", "Distance of object that contribute to the Cavity/Edge effect");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 3);
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
prop = RNA_def_property(srna, "ssao_attenuation", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Attenuation", "Attenuation constant");
RNA_def_property_range(prop, 1.0f, 100000.0f);
RNA_def_property_ui_range(prop, 1.0f, 100.0f, 1, 3);
- RNA_def_property_update(prop, 0, "rna_ClaySettings_update");
-}
-
-static void rna_def_clay_data(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- srna = RNA_def_struct(brna, "ClayRenderSettings", NULL);
- RNA_def_struct_sdna(srna, "EngineDataClay");
- RNA_def_struct_nested(brna, srna, "Scene");
- RNA_def_struct_ui_text(srna, "Render Clay Settings", "Clay Engine settings for a Scene data-block");
+ RNA_def_property_update(prop, 0, "rna_RenderEngineSettings_update");
/* Clay settings */
- prop = RNA_def_property(srna, "mat_settings", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_NEVER_NULL);
- RNA_def_property_pointer_sdna(prop, NULL, "defsettings");
- RNA_def_property_struct_type(prop, "ClayRenderMaterialSettings");
- RNA_def_property_ui_text(prop, "Clay Settings", "Clay default material settings");
-
prop = RNA_def_property(srna, "ssao_samples", PROP_INT, PROP_NONE);
RNA_def_property_ui_text(prop, "Samples", "Number of samples");
RNA_def_property_range(prop, 1, 500);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+}
+
+static void rna_def_scene_render_engine(BlenderRNA *brna)
+{
+ StructRNA *srna;
+
+ srna = RNA_def_struct(brna, "RenderEngineSettings", NULL);
+ RNA_def_struct_nested(brna, srna, "Scene");
+ RNA_def_struct_path_func(srna, "rna_RenderEngineSettings_path");
+ RNA_def_struct_ui_text(srna, "Render Engine Data", "");
- rna_def_material_settings_clay(brna);
+ rna_def_render_engine_settings_clay(brna);
}
static void rna_def_scene_render_data(BlenderRNA *brna)
@@ -8155,12 +8176,12 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "RenderSettings");
RNA_def_property_ui_text(prop, "Render Data", "");
- /* Engines Data */
- prop = RNA_def_property(srna, "clay_settings", PROP_POINTER, PROP_NONE);
+ /* Render Engine Data */
+ prop = RNA_def_property(srna, "render_engine", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
- RNA_def_property_pointer_sdna(prop, NULL, "claydata");
- RNA_def_property_struct_type(prop, "ClayRenderSettings");
- RNA_def_property_ui_text(prop, "Clay Settings", "Clay Engine settings");
+ RNA_def_property_pointer_funcs(prop, "rna_Scene_render_engine_get", NULL, "rna_Scene_render_engine_typef", NULL);
+ RNA_def_property_struct_type(prop, "RenderEngineSettings");
+ RNA_def_property_ui_text(prop, "Render Engine Data", "");
/* Safe Areas */
prop = RNA_def_property(srna, "safe_areas", PROP_POINTER, PROP_NONE);
@@ -8312,8 +8333,8 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_define_animate_sdna(true);
/* *** Animated *** */
rna_def_scene_render_data(brna);
+ rna_def_scene_render_engine(brna);
rna_def_scene_render_layer(brna);
- rna_def_clay_data(brna);
rna_def_gpu_fx(brna);
rna_def_scene_render_view(brna);