[Bf-blender-cvs] [bbbb8405b6] clay-engine: Removed Batch storage Also lots of renaming Small visual tweaks Material Settings Struct is now shared by Scene and material
Clément Foucault
noreply at git.blender.org
Mon Jan 23 09:55:53 CET 2017
Commit: bbbb8405b6547cdff9f248da86b2205c7963c3dd
Author: Clément Foucault
Date: Fri Jan 20 01:11:42 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBbbbb8405b6547cdff9f248da86b2205c7963c3dd
Removed Batch storage
Also lots of renaming
Small visual tweaks
Material Settings Struct is now shared by Scene and material
===================================================================
M release/scripts/startup/bl_ui/properties_render.py
M source/blender/blenkernel/intern/scene.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/draw/engines/clay/clay.c
M source/blender/draw/engines/clay/clay.h
M source/blender/draw/engines/clay/shaders/clay_frag.glsl
M source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
M source/blender/draw/intern/draw_mode_pass.c
M source/blender/draw/intern/draw_mode_pass.h
M source/blender/makesdna/DNA_material_types.h
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_material.c
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 8ddc99af70..0d473d79ed 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -591,15 +591,16 @@ class RENDER_PT_clay(RenderButtonsPanel, Panel):
def draw(self, context):
layout = self.layout;
settings = context.scene.clay_settings
- 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")
+ 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")
layout.prop(settings, "ssao_samples")
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 2d9b4fcd2b..efaea4f9c3 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -558,6 +558,10 @@ void BKE_scene_free(Scene *sce)
BKE_collection_master_free(sce);
MEM_freeN(sce->collection);
sce->collection = NULL;
+
+ /* Runtime Engine Data */
+ if (sce->claydata.defsettings.runtime)
+ MEM_freeN(sce->claydata.defsettings.runtime);
}
void BKE_scene_init(Scene *sce)
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 0f79a42111..e98e72295c 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6197,6 +6197,8 @@ 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;
}
/* ************ READ WM ***************** */
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 8ae921ab69..64340ebcdb 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -30,6 +30,7 @@
#include "DNA_object_types.h"
#include "DNA_layer_types.h"
+#include "DNA_material_types.h"
#include "DNA_scene_types.h"
#include "DNA_genfile.h"
@@ -165,14 +166,14 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
EngineDataClay *settings = &scene->claydata;
- settings->matcap_rot = 0.0f;
- settings->matcap_hue = 0.5f;
- settings->matcap_sat = 0.5f;
- settings->matcap_val = 0.5f;
- settings->ssao_distance = 0.2;
- settings->ssao_attenuation = 1.0f;
- settings->ssao_factor_cavity = 1.0f;
- settings->ssao_factor_edge = 1.0f;
+ 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;
}
}
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index 32d18e8da1..48fbb435e3 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -43,13 +43,6 @@ extern char datatoc_ssao_groundtruth_glsl[];
/* Storage */
-typedef struct CLAY_BatchStorage {
- float matcap_rot[2];
- int matcap_id;
- float matcap_hsv[3];
- float ssao_params_var[4];
-} CLAY_BatchStorage;
-
static struct CLAY_data {
/* Depth Pre Pass */
struct GPUShader *depth_sh;
@@ -61,7 +54,6 @@ static struct CLAY_data {
float matcap_colors[24][3];
/* Ssao */
- float dfdyfac[2];
float winmat[4][4];
float viewvecs[3][4];
float ssao_params[4];
@@ -111,7 +103,7 @@ typedef struct CLAY_PassList{
struct DRWPass *mode_ob_center_pass;
} CLAY_PassList;
-// #define GTAO
+//#define GTAO
/* Functions */
@@ -225,7 +217,7 @@ 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_engine_init(void)
+static void CLAY_engine_init(void)
{
/* Create Texture Array */
if (!data.matcap_array) {
@@ -320,12 +312,12 @@ static void clay_engine_init(void)
}
}
-static DRWBatch *clay_batch_create(DRWPass *pass, CLAY_BatchStorage *storage)
+static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *matcap_id, float *matcap_rot, float *matcap_hsv, float *ssao_params_var)
{
const int depthloc = 0, matcaploc = 1, jitterloc = 2, sampleloc = 3;
- const bool use_rot = (storage->matcap_rot[1] != 0.0f);
- const bool use_ao = (storage->ssao_params_var[1] != 0.0f || storage->ssao_params_var[2] != 0.0f);
- const bool use_hsv = (storage->matcap_hsv[0] != 0.5f || storage->matcap_hsv[1] != 0.0f || storage->matcap_hsv[2] != 0.0f);
+ const bool use_rot = (matcap_rot[1] != 0.0f);
+ const bool use_ao = (ssao_params_var[1] != 0.0f || ssao_params_var[2] != 0.0f);
+ const bool use_hsv = (matcap_hsv[0] != 0.5f || matcap_hsv[1] != 0.5f || matcap_hsv[2] != 0.5f);
struct GPUShader *sh;
if (use_rot && use_ao && use_hsv) {
@@ -353,77 +345,94 @@ static DRWBatch *clay_batch_create(DRWPass *pass, CLAY_BatchStorage *storage)
sh = data.clay_sh[WITH_NONE];
}
- DRWBatch *batch = DRW_batch_create(sh, pass, storage);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, pass);
- DRW_batch_uniform_ivec2(batch, "screenres", DRW_viewport_size_get(), 1);
- DRW_batch_uniform_buffer(batch, "depthtex", SCENE_DEPTH, depthloc);
- DRW_batch_uniform_texture(batch, "matcaps", data.matcap_array, matcaploc);
- DRW_batch_uniform_int(batch, "matcap_index", &storage->matcap_id, 1);
- DRW_batch_uniform_mat4(batch, "WinMatrix", (float *)data.winmat);
- DRW_batch_uniform_vec4(batch, "viewvecs", (float *)data.viewvecs, 3);
- DRW_batch_uniform_vec4(batch, "ssao_params", data.ssao_params, 1);
+ DRW_shgroup_uniform_ivec2(grp, "screenres", DRW_viewport_size_get(), 1);
+ DRW_shgroup_uniform_buffer(grp, "depthtex", SCENE_DEPTH, depthloc);
+ DRW_shgroup_uniform_texture(grp, "matcaps", data.matcap_array, matcaploc);
+ DRW_shgroup_uniform_int(grp, "matcap_index", matcap_id, 1);
+ DRW_shgroup_uniform_mat4(grp, "WinMatrix", (float *)data.winmat);
+ DRW_shgroup_uniform_vec4(grp, "viewvecs", (float *)data.viewvecs, 3);
+ DRW_shgroup_uniform_vec4(grp, "ssao_params", data.ssao_params, 1);
if (use_rot) {
- DRW_batch_uniform_vec2(batch, "matcap_rotation", (float *)storage->matcap_rot, 1);
+ DRW_shgroup_uniform_vec2(grp, "matcap_rotation", matcap_rot, 1);
}
if (use_hsv) {
- DRW_batch_uniform_vec3(batch, "matcap_hsv", (float *)storage->matcap_hsv, 1);
+ DRW_shgroup_uniform_vec3(grp, "matcap_hsv", matcap_hsv, 1);
}
if (use_ao) {
- DRW_batch_uniform_vec3(batch, "matcaps_color", (float *)data.matcap_colors, 24);
- DRW_batch_uniform_vec4(batch, "ssao_params_var", storage->ssao_params_var, 1);
- DRW_batch_uniform_texture(batch, "ssao_jitter", data.jitter_tx, jitterloc);
- DRW_batch_uniform_texture(batch, "ssao_samples", data.sampling_tx, sampleloc);
+ DRW_shgroup_uniform_vec3(grp, "matcaps_color", (float *)data.matcap_colors, 24);
+ DRW_shgroup_uniform_vec4(grp, "ssao_params_var", ssao_params_var, 1);
+#ifndef GTAO
+ DRW_shgroup_uniform_texture(grp, "ssao_jitter", data.jitter_tx, jitterloc);
+ DRW_shgroup_uniform_texture(grp, "ssao_samples", data.sampling_tx, sampleloc);
+#endif
}
- return batch;
+ return grp;
+}
+
+static void CLAY_update_materials_runtime(MaterialSettingsClay *settings)
+{
+ MaterialDataClayRuntime *runtime_data;
+
+ if (!settings->runtime) {
+ settings->runtime = MEM_mallocN(sizeof(MaterialDataClayRuntime), "MaterialDataClayRuntime");
+ }
+
+ runtime_data = settings->runtime;
+
+ /* 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_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_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;
+
+ if (settings->matcap_icon < ICON_MATCAP_01 ||
+ settings->matcap_icon > ICON_MATCAP_24)
+ {
+ settings->matcap_icon = ICON_MATCAP_01;
+ }
+
+ runtime_data->matcap_id = matcap_to_index(settings->matcap_icon);
}
-static void clay_populate_passes(CLAY_PassList *passes, const struct bContext *C)
+static void CLAY_create_cache(CLAY_PassList *passes, const struct bContext *C)
{
SceneLayer *sl = CTX_data_scene_layer(C);
- DRWBatch *defaultbatch, *depthbatch;
+ DRWShadingGroup *defaultbatch, *depthbatch;
Object *ob;
/* Depth Pass */
{
passes->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
- depthbatch = DRW_batch_create(data.depth_sh, passes->depth_pass, NULL);
+ depthbatch = DRW_shgroup_create(data.depth_sh, passes->depth_pass);
}
/* Clay Pass */
{
- passes->clay_pass = DRW_pass_create("Clay Pass", DRW_STATE_WRITE_COLOR);
-
+ MaterialDataClayR
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list