Commit: 6faa4d77c11ec6b0bf8e77f50fa7bb87e54dc039
Author: Lukas Tönne
Date:   Mon Aug 14 08:19:54 2017 +0100
Branches: strand_editmode
https://developer.blender.org/rB6faa4d77c11ec6b0bf8e77f50fa7bb87e54dc039

Removed fiber drawing from the strand edit mode to simplify code.

For rendering hair fibers the edit mode should just use the underlying data.

===================================================================

M       source/blender/blenkernel/BKE_editstrands.h
M       source/blender/blenkernel/intern/editstrands.c
M       source/blender/draw/engines/eevee/eevee_materials.c
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_strands.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_editstrands.h 
b/source/blender/blenkernel/BKE_editstrands.h
index 991776deda3..be04edb9fc6 100644
--- a/source/blender/blenkernel/BKE_editstrands.h
+++ b/source/blender/blenkernel/BKE_editstrands.h
@@ -51,8 +51,6 @@ typedef struct BMEditStrands {
        
        /* Scalp mesh for fixing root vertices */
        struct DerivedMesh *root_dm;
-       struct HairPattern *hair_pattern;
-       struct HairGroup *hair_group;
        
        int flag;
        
@@ -60,7 +58,6 @@ typedef struct BMEditStrands {
        unsigned int elem_glbuf; // legacy gpu code
        unsigned int dot_glbuf; // legacy gpu code
        void *batch_cache;
-       void *texture;
 } BMEditStrands;
 
 /* BMEditStrands->flag */
@@ -76,13 +73,6 @@ struct BMEditStrands *BKE_editstrands_from_object(struct 
Object *ob);
 void BKE_editstrands_update_linked_customdata(struct BMEditStrands *es);
 void BKE_editstrands_free(struct BMEditStrands *es);
 
-/* === Hair Fibers === */
-
-int* BKE_editstrands_hair_get_fiber_lengths(struct BMEditStrands *es, int 
subdiv);
-void BKE_editstrands_hair_get_texture_buffer_size(struct BMEditStrands *es, 
int subdiv, int *r_size,
-                                                  int *r_strand_map_start, int 
*r_strand_vertex_start, int *r_fiber_start);
-void BKE_editstrands_hair_get_texture_buffer(struct BMEditStrands *es, int 
subdiv, void *texbuffer);
-
 /* === Constraints === */
 
 /* Stores vertex locations for temporary reference:
diff --git a/source/blender/blenkernel/intern/editstrands.c 
b/source/blender/blenkernel/intern/editstrands.c
index adbb4b707aa..74d300751d3 100644
--- a/source/blender/blenkernel/intern/editstrands.c
+++ b/source/blender/blenkernel/intern/editstrands.c
@@ -131,104 +131,6 @@ void BKE_editstrands_free(BMEditStrands *es)
                es->root_dm->release(es->root_dm);
 }
 
-/* === Hair fibers === */
-
-typedef struct EditStrandsView {
-       HairDrawDataInterface base;
-       BMEditStrands *edit;
-} EditStrandsView;
-
-static int get_num_strands(const HairDrawDataInterface *hairdata_)
-{
-       const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-       BMesh *bm = strands->edit->base.bm;
-       return BM_strands_count(bm);
-}
-
-static int get_num_verts(const HairDrawDataInterface *hairdata_)
-{
-       const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-       BMesh *bm = strands->edit->base.bm;
-       return bm->totvert;
-}
-
-static void get_strand_lengths(const HairDrawDataInterface* hairdata_, int 
*r_lengths)
-{
-       const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-       BMesh *bm = strands->edit->base.bm;
-       BMVert *v;
-       BMIter iter;
-       int i;
-       
-       int *length = r_lengths;
-       BM_ITER_STRANDS_INDEX(v, &iter, bm, BM_STRANDS_OF_MESH, i) {
-               *length = BM_strands_keys_count(v);
-               ++length;
-       }
-}
-
-static void get_strand_roots(const HairDrawDataInterface* hairdata_, struct 
MeshSample *r_roots)
-{
-       const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-       BMesh *bm = strands->edit->base.bm;
-       BMVert *v;
-       BMIter iter;
-       int i;
-       
-       MeshSample *root = r_roots;
-       BM_ITER_STRANDS_INDEX(v, &iter, bm, BM_STRANDS_OF_MESH, i) {
-               BM_elem_meshsample_data_named_get(&bm->vdata, v, 
CD_MSURFACE_SAMPLE, CD_HAIR_ROOT_LOCATION, root);
-               ++root;
-       }
-}
-
-static void get_strand_vertices(const HairDrawDataInterface* hairdata_, float 
(*r_verts)[3])
-{
-       const EditStrandsView *strands = (EditStrandsView *)hairdata_;
-       BMesh *bm = strands->edit->base.bm;
-       BMVert *vert;
-       BMIter iter;
-       
-       float (*co)[3] = r_verts;
-       BM_ITER_MESH(vert, &iter, bm, BM_VERTS_OF_MESH) {
-               copy_v3_v3(*co, vert->co);
-               ++co;
-       }
-}
-
-static EditStrandsView editstrands_get_view(BMEditStrands *edit)
-{
-       EditStrandsView hairdata;
-       hairdata.base.group = edit->hair_group;
-       hairdata.base.get_num_strands = get_num_strands;
-       hairdata.base.get_num_verts = get_num_verts;
-       hairdata.base.get_strand_lengths = get_strand_lengths;
-       hairdata.base.get_strand_roots = get_strand_roots;
-       hairdata.base.get_strand_vertices = get_strand_vertices;
-       hairdata.edit = edit;
-       return hairdata;
-}
-
-int* BKE_editstrands_hair_get_fiber_lengths(BMEditStrands *es, int subdiv)
-{
-       EditStrandsView strands = editstrands_get_view(es);
-       return BKE_hair_strands_get_fiber_lengths(&strands.base, subdiv);
-}
-
-void BKE_editstrands_hair_get_texture_buffer_size(BMEditStrands *es, int 
subdiv, int *r_size,
-                                                  int *r_strand_map_start, int 
*r_strand_vertex_start, int *r_fiber_start)
-{
-       EditStrandsView strands = editstrands_get_view(es);
-       BKE_hair_strands_get_texture_buffer_size(&strands.base, subdiv,
-                                                r_size, r_strand_map_start, 
r_strand_vertex_start, r_fiber_start);
-}
-
-void BKE_editstrands_hair_get_texture_buffer(BMEditStrands *es, int subdiv, 
void *texbuffer)
-{
-       EditStrandsView strands = editstrands_get_view(es);
-       BKE_hair_strands_get_texture_buffer(&strands.base, subdiv, es->root_dm, 
texbuffer);
-}
-
 /* === Constraints === */
 
 BMEditStrandsLocations BKE_editstrands_get_locations(BMEditStrands *edit)
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index 3cc6ca81171..836f111d977 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1021,35 +1021,15 @@ static void material_particle_hair(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *ved
        }
        
        ParticleSettings *part = psys->part;
-       bool use_hair = false;
-       bool use_fibers = false;
        float mat[4][4];
-       struct Gwn_Batch *hair_geom = NULL;
-       const DRWHairFiberTextureBuffer *fiber_buffer = NULL;
-       GPUTexture **fiber_texture = NULL;
+       unit_m4(mat);
        
-       if (ob->mode & OB_MODE_HAIR_EDIT) {
-               BMEditStrands *edit = psys->hairedit;
-               const HairEditSettings *tsettings = 
&scene->toolsettings->hair_edit;
-               if (edit &&tsettings->hair_draw_mode == HAIR_DRAW_FIBERS && 
edit->hair_group) {
-                       use_hair = true;
-                       use_fibers = true;
-                       copy_m4_m4(mat, ob->obmat);
-                       
-                       hair_geom = DRW_cache_editstrands_get_hair_fibers(edit, 
true, tsettings->hair_draw_subdiv, &fiber_buffer);
-                       
-                       if (!edit->texture) {
-                               edit->texture = 
DRW_texture_create_2D(fiber_buffer->width, fiber_buffer->height,
-                                                                     
DRW_TEX_RG_32, 0, fiber_buffer->data);
-                       }
-                       fiber_texture = (GPUTexture **)(&edit->texture);
-               }
-       }
-       else {
+       bool use_hair = false;
+       struct Gwn_Batch *hair_geom = NULL;
+       if ((ob->mode & OB_MODE_HAIR_EDIT) == 0) {
                int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as 
: part->draw_as;
                if (draw_as == PART_DRAW_PATH && (psys->pathcache || 
psys->childcache)) {
                        use_hair = true;
-                       unit_m4(mat);
                        hair_geom = DRW_cache_particles_get_hair(psys, md);
                }
        }
@@ -1060,19 +1040,8 @@ static void material_particle_hair(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *ved
                        ma = &defmaterial;
                }
                
-               if (!use_fibers) {
-                       DRW_shgroup_call_add(stl->g_data->depth_shgrp, 
hair_geom, mat);
-                       DRW_shgroup_call_add(stl->g_data->depth_shgrp_clip, 
hair_geom, mat);
-               }
-               else {
-                       
DRW_shgroup_call_add(stl->g_data->depth_shgrp_hair_fibers, hair_geom, mat);
-                       
DRW_hair_shader_uniforms(stl->g_data->depth_shgrp_hair_fibers, scene,
-                                                fiber_texture, fiber_buffer);
-                       
-                       
DRW_shgroup_call_add(stl->g_data->depth_shgrp_hair_fibers_clip, hair_geom, mat);
-                       
DRW_hair_shader_uniforms(stl->g_data->depth_shgrp_hair_fibers_clip, scene,
-                                                fiber_texture, fiber_buffer);
-               }
+               DRW_shgroup_call_add(stl->g_data->depth_shgrp, hair_geom, mat);
+               DRW_shgroup_call_add(stl->g_data->depth_shgrp_clip, hair_geom, 
mat);
                
                DRWShadingGroup *shgrp = BLI_ghash_lookup(material_hash, (const 
void *)ma);
                if (!shgrp) {
@@ -1083,7 +1052,7 @@ static void material_particle_hair(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *ved
                        
                        if (ma->use_nodes && ma->nodetree) {
                                struct GPUMaterial *gpumat = 
EEVEE_material_hair_get(scene, ma,
-                                                                               
     use_fibers, stl->effects->use_ao, stl->effects->use_bent_normals);
+                                       false, stl->effects->use_ao, 
stl->effects->use_bent_normals);
                                
                                shgrp = DRW_shgroup_material_create(gpumat, 
psl->material_pass);
                                if (shgrp) {
@@ -1103,8 +1072,8 @@ static void material_particle_hair(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *ved
                        
                        /* Fallback to default shader */
                        if (shgrp == NULL) {
-                               shgrp = EEVEE_default_shading_group_get(sldata, 
vedata, true, use_fibers,
-                                                                       false, 
stl->effects->use_ao, stl->effects->use_bent_normals, stl->effects->use_ssr);
+                               shgrp = EEVEE_default_shading_group_get(sldata, 
vedata, true, false,
+                                       false, stl->effects->use_ao, 
stl->effects->use_bent_normals, stl->effects->use_ssr);
                                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);
@@ -1116,11 +1085,6 @@ static void material_particle_hair(EEVEE_SceneLayerData 
*sldata, EEVEE_Data *ved
                
                if (shgrp) {
                        DRW_shgroup_call_add(shgrp, hair_geom, mat);
-                       
-                       if (use_fibers) {
-                               DRW_hair_shader_uniforms(shgrp, scene,
-                                                        fiber_texture, 
fiber_buffer);
-                       }
                }
        }
 }
diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 9a4000cc0f2..fb7773d4b71 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -2610,12 +2610,6 @@ Gwn_Batch *DRW_cache_editstrands_get_wires(struct 
BMEditStrands *es)
        return DRW_editstrands_batch_cache_get_wires(es);
 }
 
-Gwn_Batch *DRW_cache_editstrands_get_hair_fibers(struct BMEditStrands *es, 
bool use_ribbons, int subdiv,
-                                                 const struct 
DRWHairFiberTextureBuffer **r_buffer)
-{
-       return DRW_editstrands_batch_cache_get_hair_fibers(es, use_ribbons, 
subdiv, r_buffer);
-}
-
 /* -------------------------------------------------------------------- */
 
 /** \name Hair */
diff --git a/source/blender/draw/intern/draw_cache.h 
b/source/blender/draw/intern/draw_cache.h
index b6853c1fd3c..5e4dc14fc2e 100644
--- a/source/blender/draw/intern/draw_ca

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