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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to