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:
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_shader.c')
-rw-r--r--source/blender/draw/engines/workbench/workbench_shader.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_shader.c b/source/blender/draw/engines/workbench/workbench_shader.c
index af3b5d31b2b..1c612404c95 100644
--- a/source/blender/draw/engines/workbench/workbench_shader.c
+++ b/source/blender/draw/engines/workbench/workbench_shader.c
@@ -111,7 +111,7 @@ static struct {
struct GPUShader *aa_accum_sh;
struct GPUShader *smaa_sh[3];
- struct GPUShader *volume_sh[2][2][2][2];
+ struct GPUShader *volume_sh[2][2][3][2];
struct DRWShaderLibrary *lib;
} e_data = {{{{NULL}}}};
@@ -384,7 +384,7 @@ void workbench_shader_depth_of_field_get(GPUShader **prepare_sh,
datatoc_workbench_effect_dof_frag_glsl, e_data.lib, "#define PREPARE\n");
e_data.dof_downsample_sh = DRW_shader_create_fullscreen_with_shaderlib(
datatoc_workbench_effect_dof_frag_glsl, e_data.lib, "#define DOWNSAMPLE\n");
-#if 0 /* TODO(fclem) finish COC min_max optimization */
+#if 0 /* TODO(fclem): finish COC min_max optimization */
e_data.dof_flatten_v_sh = DRW_shader_create_fullscreen_with_shaderlib(
datatoc_workbench_effect_dof_frag_glsl, e_data.lib, "#define FLATTEN_VERTICAL\n");
e_data.dof_flatten_h_sh = DRW_shader_create_fullscreen_with_shaderlib(
@@ -463,9 +463,12 @@ GPUShader *workbench_shader_antialiasing_get(int stage)
return e_data.smaa_sh[stage];
}
-GPUShader *workbench_shader_volume_get(bool slice, bool coba, bool cubic, bool smoke)
+GPUShader *workbench_shader_volume_get(bool slice,
+ bool coba,
+ eWORKBENCH_VolumeInterpType interp_type,
+ bool smoke)
{
- GPUShader **shader = &e_data.volume_sh[slice][coba][cubic][smoke];
+ GPUShader **shader = &e_data.volume_sh[slice][coba][interp_type][smoke];
if (*shader == NULL) {
DynStr *ds = BLI_dynstr_new();
@@ -476,8 +479,16 @@ GPUShader *workbench_shader_volume_get(bool slice, bool coba, bool cubic, bool s
if (coba) {
BLI_dynstr_append(ds, "#define USE_COBA\n");
}
- if (cubic) {
- BLI_dynstr_append(ds, "#define USE_TRICUBIC\n");
+ switch (interp_type) {
+ case WORKBENCH_VOLUME_INTERP_LINEAR:
+ BLI_dynstr_append(ds, "#define USE_TRILINEAR\n");
+ break;
+ case WORKBENCH_VOLUME_INTERP_CUBIC:
+ BLI_dynstr_append(ds, "#define USE_TRICUBIC\n");
+ break;
+ case WORKBENCH_VOLUME_INTERP_CLOSEST:
+ BLI_dynstr_append(ds, "#define USE_CLOSEST\n");
+ break;
}
if (smoke) {
BLI_dynstr_append(ds, "#define VOLUME_SMOKE\n");