[Bf-blender-cvs] [7ad71174fe9] tmp_hair_curves: Remove the parent interpolation hair shader and use the transform-feedback shader instead.
Lukas Tönne
noreply at git.blender.org
Mon Jul 2 08:44:02 CEST 2018
Commit: 7ad71174fe9a55227cbcdfdbd793248a416d59c5
Author: Lukas Tönne
Date: Sat Jun 30 15:07:03 2018 +0100
Branches: tmp_hair_curves
https://developer.blender.org/rB7ad71174fe9a55227cbcdfdbd793248a416d59c5
Remove the parent interpolation hair shader and use the transform-feedback shader instead.
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/eevee/eevee_materials.c
M source/blender/draw/engines/eevee/eevee_private.h
M source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
M source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
M source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
M source/blender/draw/engines/workbench/workbench_deferred.c
M source/blender/draw/engines/workbench/workbench_forward.c
M source/blender/draw/engines/workbench/workbench_materials.c
M source/blender/draw/engines/workbench/workbench_private.h
M source/blender/draw/intern/draw_cache.c
M source/blender/draw/intern/draw_cache.h
M source/blender/draw/intern/draw_cache_impl.h
M source/blender/draw/intern/draw_cache_impl_hair.c
M source/blender/draw/intern/draw_cache_impl_particles.c
M source/blender/draw/intern/draw_common.h
M source/blender/draw/intern/draw_hair.c
D source/blender/draw/intern/draw_hair_fibers.c
M source/blender/draw/intern/draw_hair_private.h
M source/blender/draw/modes/object_mode.c
D source/blender/draw/modes/shaders/common_hair_fibers_lib.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 8d013efc5cc..65ad5aea836 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -66,7 +66,6 @@ set(SRC
intern/draw_common.c
intern/draw_debug.c
intern/draw_hair.c
- intern/draw_hair_fibers.c
intern/draw_instance_data.c
intern/draw_manager.c
intern/draw_manager_data.c
@@ -228,7 +227,6 @@ data_to_c_simple(engines/workbench/shaders/workbench_world_light_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_hair_lib.glsl SRC)
-data_to_c_simple(modes/shaders/common_hair_fibers_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_hair_refine_vert.glsl SRC)
data_to_c_simple(modes/shaders/common_view_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_fxaa_lib.glsl SRC)
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index ebb763e6ce1..da57225156b 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -43,7 +43,6 @@
#include "DNA_hair_types.h"
#include "GPU_material.h"
-#include "GPU_texture.h"
#include "eevee_engine.h"
#include "eevee_lut.h"
@@ -57,8 +56,6 @@ static struct {
struct GPUShader *default_prepass_sh;
struct GPUShader *default_prepass_clip_sh;
- struct GPUShader *default_prepass_hair_fiber_sh;
- struct GPUShader *default_prepass_hair_fiber_clip_sh;
struct GPUShader *default_hair_prepass_sh;
struct GPUShader *default_hair_prepass_clip_sh;
struct GPUShader *default_lit[VAR_MAT_MAX];
@@ -91,7 +88,6 @@ extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_bsdf_sampling_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_common_hair_lib_glsl[];
-extern char datatoc_common_hair_fibers_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_irradiance_lib_glsl[];
extern char datatoc_octahedron_lib_glsl[];
@@ -291,9 +287,6 @@ static char *eevee_get_defines(int options)
if ((options & VAR_MAT_HAIR) != 0) {
BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n");
}
- if ((options & VAR_MAT_HAIR_FIBERS) != 0) {
- BLI_dynstr_append(ds, DRW_hair_shader_defines());
- }
if ((options & VAR_MAT_PROBE) != 0) {
BLI_dynstr_appendf(ds, "#define PROBE_CAPTURE\n");
}
@@ -571,7 +564,7 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
datatoc_lit_surface_frag_glsl,
datatoc_lit_surface_frag_glsl,
datatoc_volumetric_lib_glsl);
-
+
e_data.volume_shader_lib = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
@@ -588,7 +581,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
e_data.vert_shader_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_hair_lib_glsl,
- datatoc_common_hair_fibers_lib_glsl,
datatoc_lit_surface_vert_glsl);
e_data.default_background = DRW_shader_create(
@@ -607,25 +599,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
"#define CLIP_PLANES\n");
- char *hair_fiber_vert_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_common_hair_lib_glsl,
- datatoc_common_hair_fibers_lib_glsl,
- datatoc_prepass_vert_glsl);
-
- e_data.default_prepass_hair_fiber_sh = DRW_shader_create(
- hair_fiber_vert_str, NULL, datatoc_prepass_frag_glsl, DRW_hair_shader_defines());
-
- {
- char defines[256];
- BLI_snprintf(defines, sizeof(defines), "#define CLIP_PLANES\n%s",
- DRW_hair_shader_defines());
- e_data.default_prepass_hair_fiber_clip_sh = DRW_shader_create(
- hair_fiber_vert_str, NULL, datatoc_prepass_frag_glsl, defines);
- }
-
- MEM_freeN(hair_fiber_vert_str);
-
char *vert_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_hair_lib_glsl,
@@ -829,14 +802,13 @@ struct GPUMaterial *EEVEE_material_mesh_depth_get(
}
struct GPUMaterial *EEVEE_material_hair_get(
- struct Scene *scene, Material *ma, int shadow_method, bool use_fibers)
+ struct Scene *scene, Material *ma, int shadow_method)
{
const void *engine = &DRW_engine_viewport_eevee_type;
- int options = VAR_MAT_HAIR | VAR_MAT_MESH;
+ int options = VAR_MAT_MESH | VAR_MAT_HAIR;
+
options |= eevee_material_shadow_option(shadow_method);
- if (use_fibers) {
- options |= VAR_MAT_HAIR_FIBERS;
- }
+
GPUMaterial *mat = DRW_shader_find_from_material(ma, engine, options);
if (mat) {
return mat;
@@ -854,27 +826,19 @@ struct GPUMaterial *EEVEE_material_hair_get(
return mat;
}
-typedef enum ShaderHairType
-{
- DRW_SHADER_HAIR_NONE,
- DRW_SHADER_HAIR_PARTICLES,
- DRW_SHADER_HAIR_FIBERS,
-} ShaderHairType;
-
/**
* Create a default shading group inside the given pass.
**/
static struct DRWShadingGroup *EEVEE_default_shading_group_create(
EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, DRWPass *pass,
- ShaderHairType hair_type, bool is_flat_normal, bool use_blend, bool use_ssr, int shadow_method)
+ bool is_hair, bool is_flat_normal, bool use_blend, bool use_ssr, int shadow_method)
{
EEVEE_EffectsInfo *effects = vedata->stl->effects;
static int ssr_id;
ssr_id = (use_ssr) ? 1 : -1;
int options = VAR_MAT_MESH;
- if (hair_type == DRW_SHADER_HAIR_PARTICLES) options |= VAR_MAT_HAIR;
- if (hair_type == DRW_SHADER_HAIR_FIBERS) options |= VAR_MAT_HAIR | VAR_MAT_HAIR_FIBERS;
+ if (is_hair) options |= VAR_MAT_HAIR;
if (is_flat_normal) options |= VAR_MAT_FLAT;
if (use_blend) options |= VAR_MAT_BLEND;
if (((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) && use_blend) options |= VAR_MAT_VOLUME;
@@ -897,16 +861,15 @@ static struct DRWShadingGroup *EEVEE_default_shading_group_create(
static struct DRWShadingGroup *EEVEE_default_shading_group_get(
EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
Object *ob, ParticleSystem *psys, ModifierData *md,
- ShaderHairType hair_type, bool is_flat_normal, bool use_ssr, int shadow_method)
+ bool is_hair, bool is_flat_normal, bool use_ssr, int shadow_method)
{
static int ssr_id;
ssr_id = (use_ssr) ? 1 : -1;
int options = VAR_MAT_MESH;
- BLI_assert(hair_type != DRW_SHADER_HAIR_PARTICLES || (ob && psys && md));
+ BLI_assert(!is_hair || (ob && psys && md));
- if (hair_type == DRW_SHADER_HAIR_PARTICLES) options |= VAR_MAT_HAIR;
- if (hair_type == DRW_SHADER_HAIR_FIBERS) options |= VAR_MAT_HAIR | VAR_MAT_HAIR_FIBERS;
+ if (is_hair) options |= VAR_MAT_HAIR;
if (is_flat_normal) options |= VAR_MAT_FLAT;
options |= eevee_material_shadow_option(shadow_method);
@@ -916,23 +879,22 @@ static struct DRWShadingGroup *EEVEE_default_shading_group_get(
}
if (vedata->psl->default_pass[options] == NULL) {
- //DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
- DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
vedata->psl->default_pass[options] = DRW_pass_create("Default Lit Pass", state);
/* XXX / WATCH: This creates non persistent binds for the ubos and textures.
* But it's currently OK because the following shgroups does not add any bind.
* EDIT: THIS IS NOT THE CASE FOR HAIRS !!! DUMMY!!! */
- if (hair_type != DRW_SHADER_HAIR_PARTICLES) {
+ if (!is_hair) {
DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.default_lit[options], vedata->psl->default_pass[options]);
add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, false);
}
}
- if (hair_type == DRW_SHADER_HAIR_PARTICLES) {
- DRWShadingGroup *shgrp = DRW_shgroup_hair_create(ob, psys, md,
- vedata->psl->default_pass[options],
- e_data.default_lit[options]);
+ if (is_hair) {
+ DRWShadingGroup *shgrp = DRW_shgroup_particle_hair_create(ob, psys, md,
+ vedata->psl->default_pass[options],
+ e_data.default_lit[options]);
add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, false);
return shgrp;
}
@@ -1287,7 +1249,7 @@ static void material_opaque(
bool use_ssr = ((effects->enabled_effects & EFFECT_SSR) != 0);
*shgrp = EEVEE_default_shading_group_get(sldata, vedata,
NULL, NULL, NULL,
- DRW_SHADER_HAIR_NONE, use_flat_nor, use_ssr, linfo->shadow_method);
+ false, use_flat_nor, use_ssr, linfo->shadow_method);
DRW_shgroup_uniform_vec3(*shgrp, "basecol", color_p, 1);
DRW_shgroup_uniform_float(*shgrp, "metallic", metal_p, 1);
DRW_shgroup_uniform_float(*shgrp, "specular", spec_p, 1);
@@ -1373,7 +1335,7 @@ static void material_transparent(
if (*shgrp == NULL) {
*shgrp = EEVEE_default_shading_group_create(
sldata, vedata, psl->transparent_pass,
- DRW_SHADER_HAIR_NONE, use_flat_nor, true, false, linfo->shadow_method);
+ false, use_flat_nor, true, false, linfo->shadow_method);
DRW_shgroup_uniform_vec3(*shgrp, "basecol", color_p, 1);
DRW_shgroup_uniform_float(*shgrp, "metallic", metal_p, 1);
DRW_shgroup_uniform_float(*shgrp, "specular", spec_p, 1);
@@ -1461,12 +1423,12 @@ static void material_particle_hair(
float *spec_p = &ma->spec;
float *rough_p = &ma->roughness;
- shgrp = DRW_shgroup_hair_create(
+ shgrp = DRW_shgroup_particle_hair_create(
ob, psys, md,
psl->depth_pass,
e_data.default_hair_prepass_sh);
- shgrp = DRW_shgroup_hair_create(
+ shgrp = DRW_shgroup_particle_hair_create(
ob, psys, md,
psl->depth_pass_clip,
e_data.default_hair_prepass_cl
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list