[Bf-blender-cvs] [7e1832c8d54] hair_guides: Merge branch 'blender2.8' into hair_guides

Lukas Tönne noreply at git.blender.org
Sun Apr 15 12:17:26 CEST 2018


Commit: 7e1832c8d546ec13e752b7bd42ce13e3fc10ae86
Author: Lukas Tönne
Date:   Sun Apr 15 11:16:55 2018 +0100
Branches: hair_guides
https://developer.blender.org/rB7e1832c8d546ec13e752b7bd42ce13e3fc10ae86

Merge branch 'blender2.8' into hair_guides

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



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

diff --cc source/blender/bmesh/operators/bmo_face_island.c
index 77b28f2f29c,00000000000..e52052a28d3
mode 100644,000000..100644
--- a/source/blender/bmesh/operators/bmo_face_island.c
+++ b/source/blender/bmesh/operators/bmo_face_island.c
@@@ -1,238 -1,0 +1,238 @@@
 +/*
 + * ***** BEGIN GPL LICENSE BLOCK *****
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
 + * as published by the Free Software Foundation; either version 2
 + * of the License, or (at your option) any later version.
 + *
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License
 + * along with this program; if not, write to the Free Software Foundation,
 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 + *
 + * The Original Code is Copyright (C) Blender Foundation
 + * All rights reserved.
 + *
 + * The Original Code is: all of this file.
 + *
 + * Contributor(s): Lukas Toenne
 + *
 + * ***** END GPL LICENSE BLOCK *****
 + */
 +
 +/** \file blender/bmesh/operators/bmo_face_island.c
 + *  \ingroup bmesh
 + *
 + * Face island search.
 + */
 +
 +#include "MEM_guardedalloc.h"
 +
 +#include "BLI_array.h"
 +#include "BLI_math.h"
 +
 +#include "bmesh.h"
 +
 +#include "intern/bmesh_operators_private.h"
 +
 +
 +#define FACE_MARK 1
 +
 +static BMLoop* bmo_face_island_find_start_loop(BMesh *bm, BMOperator *op)
 +{
 +	BMFace *f;
 +	BMOIter oiter;
 +	BMO_ITER (f, &oiter, op->slots_in, "faces", BM_FACE)
 +	{
 +		BMLoop *l;
 +		BMIter l_iter;
 +		BM_ITER_ELEM(l, &l_iter, f, BM_LOOPS_OF_FACE)
 +		{
 +			BMLoop *lr = l;
 +			do
 +			{
 +				if (!BM_loop_is_manifold(lr)) {
 +					/* treat non-manifold edges as boundaries */
 +					return lr;
 +				}
 +				if (!BMO_face_flag_test(bm, lr->f, FACE_MARK))
 +				{
 +					return lr;
 +				}
 +				lr = lr->radial_next;
 +			}
 +			while (lr != l);
 +		}
 +	}
 +	return NULL;
 +}
 +
 +void bmo_face_island_boundary_exec(BMesh *bm, BMOperator *op)
 +{
 +	BMO_slot_buffer_flag_enable(bm, op->slots_in, "faces", BM_FACE, FACE_MARK);
 +	
 +	BMLoop *l_start = bmo_face_island_find_start_loop(bm, op);
 +	if (!l_start)
 +	{
 +		return;
 +	}
 +	
 +	BMLoop **boundary = NULL;
 +	BLI_array_declare(boundary);
 +	
 +	BMWalker walker;
 +	BMW_init(&walker, bm, BMW_ISLANDBOUND,
 +	         BMW_MASK_NOP, BMW_MASK_NOP, FACE_MARK,
 +	         BMW_FLAG_NOP, /* no need to check BMW_FLAG_TEST_HIDDEN, faces are already marked by the bmo */
 +	         BMW_NIL_LAY);
 +	
 +	for (BMLoop *l_iter = BMW_begin(&walker, l_start); l_iter; l_iter = BMW_step(&walker))
 +	{
 +		BLI_array_append(boundary, l_iter);
 +	}
 +	BMW_end(&walker);
 +	
 +	{
 +		BMOpSlot *slot = BMO_slot_get(op->slots_out, "boundary");
- 		BMO_slot_buffer_from_array(op, slot, (BMHeader **)boundary, BLI_array_count(boundary));
++		BMO_slot_buffer_from_array(op, slot, (BMHeader **)boundary, BLI_array_len(boundary));
 +		BLI_array_free(boundary);
 +	}
 +	
 +#if 0
 +	BMOIter oiter;
 +	BMFace *f;
 +	BMFace ***regions = NULL;
 +	BMFace **faces = NULL;
 +	BLI_array_declare(regions);
 +	BLI_array_declare(faces);
 +	BMFace *act_face = bm->act_face;
 +	BMWalker regwalker;
 +	int i;
 +
 +	const bool use_verts = BMO_slot_bool_get(op->slots_in, "use_verts");
 +
 +	if (use_verts) {
 +		/* tag verts that start out with only 2 edges,
 +		 * don't remove these later */
 +		BMIter viter;
 +		BMVert *v;
 +
 +		BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) {
 +			BMO_vert_flag_set(bm, v, VERT_MARK, !BM_vert_is_edge_pair(v));
 +		}
 +	}
 +
 +	BMO_slot_buffer_flag_enable(bm, op->slots_in, "faces", BM_FACE, FACE_MARK | FACE_TAG);
 +	
 +	/* collect region */
 +	BMO_ITER (f, &oiter, op->slots_in, "faces", BM_FACE) {
 +		BMFace *f_iter;
 +		if (!BMO_face_flag_test(bm, f, FACE_TAG)) {
 +			continue;
 +		}
 +
 +		BLI_array_empty(faces);
 +		faces = NULL; /* forces different allocatio */
 +
 +		BMW_init(&regwalker, bm, BMW_ISLAND_MANIFOLD,
 +		         BMW_MASK_NOP, BMW_MASK_NOP, FACE_MARK,
 +		         BMW_FLAG_NOP, /* no need to check BMW_FLAG_TEST_HIDDEN, faces are already marked by the bmo */
 +		         BMW_NIL_LAY);
 +
 +		for (f_iter = BMW_begin(&regwalker, f); f_iter; f_iter = BMW_step(&regwalker)) {
 +			BLI_array_append(faces, f_iter);
 +		}
 +		BMW_end(&regwalker);
 +		
 +		for (i = 0; i < BLI_array_count(faces); i++) {
 +			f_iter = faces[i];
 +			BMO_face_flag_disable(bm, f_iter, FACE_TAG);
 +			BMO_face_flag_enable(bm, f_iter, FACE_ORIG);
 +		}
 +
 +		if (BMO_error_occurred(bm)) {
 +			BMO_error_clear(bm);
 +			BMO_error_raise(bm, op, BMERR_DISSOLVEFACES_FAILED, NULL);
 +			goto cleanup;
 +		}
 +		
 +		BLI_array_append(faces, NULL);
 +		BLI_array_append(regions, faces);
 +	}
 +
 +	/* track how many faces we should end up with */
 +	int totface_target = bm->totface;
 +
 +	for (i = 0; i < BLI_array_count(regions); i++) {
 +		BMFace *f_new;
 +		int tot = 0;
 +		
 +		faces = regions[i];
 +		if (!faces[0]) {
 +			BMO_error_raise(bm, op, BMERR_DISSOLVEFACES_FAILED,
 +			                "Could not find boundary of dissolve region");
 +			goto cleanup;
 +		}
 +		
 +		while (faces[tot])
 +			tot++;
 +		
 +		f_new = BM_faces_join(bm, faces, tot, true);
 +
 +		if (f_new) {
 +			/* maintain active face */
 +			if (act_face && bm->act_face == NULL) {
 +				bm->act_face = f_new;
 +			}
 +			totface_target -= tot - 1;
 +		}
 +		else {
 +			BMO_error_raise(bm, op, BMERR_DISSOLVEFACES_FAILED,
 +			                "Could not create merged face");
 +			goto cleanup;
 +		}
 +
 +		/* if making the new face failed (e.g. overlapping test)
 +		 * unmark the original faces for deletion */
 +		BMO_face_flag_disable(bm, f_new, FACE_ORIG);
 +		BMO_face_flag_enable(bm, f_new, FACE_NEW);
 +	}
 +
 +	/* Typically no faces need to be deleted */
 +	if (totface_target != bm->totface) {
 +		BMO_op_callf(bm, op->flag, "delete geom=%ff context=%i", FACE_ORIG, DEL_FACES);
 +	}
 +
 +	if (use_verts) {
 +		BMIter viter;
 +		BMVert *v, *v_next;
 +
 +		BM_ITER_MESH_MUTABLE (v, v_next, &viter, bm, BM_VERTS_OF_MESH) {
 +			if (BMO_vert_flag_test(bm, v, VERT_MARK)) {
 +				if (BM_vert_is_edge_pair(v)) {
 +					BM_vert_collapse_edge(bm, v->e, v, true, true);
 +				}
 +			}
 +		}
 +	}
 +
 +	if (BMO_error_occurred(bm)) {
 +		goto cleanup;
 +	}
 +
 +	BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "region.out", BM_FACE, FACE_NEW);
 +
 +cleanup:
 +	/* free/cleanup */
 +	for (i = 0; i < BLI_array_count(regions); i++) {
 +		if (regions[i]) MEM_freeN(regions[i]);
 +	}
 +
 +	BLI_array_free(regions);
 +#endif
 +}
diff --cc source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 1d556f6b2ce,df6fb100d22..4ddad462a5a
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@@ -72,9 -75,6 +75,7 @@@ struct ViewLayer
  struct Tex;
  struct World;
  struct EffectorWeights;
- struct ParticleSystem;
- struct ParticleSettings;
 +struct Groom;
  
  struct PropertyRNA;
  
diff --cc source/blender/depsgraph/intern/depsgraph_tag.cc
index e5c714cfd74,6a6ebd1be44..2091d597ffa
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@@ -92,8 -95,8 +95,9 @@@ void depsgraph_geometry_tag_to_componen
  				case OB_CURVE:
  				case OB_SURF:
  				case OB_FONT:
+ 				case OB_LATTICE:
  				case OB_MBALL:
 +				case OB_GROOM:
  					*component_type = DEG_NODE_TYPE_GEOMETRY;
  					break;
  				case OB_ARMATURE:
diff --cc source/blender/draw/CMakeLists.txt
index 4dcc8dc081c,eb66e9c20ea..1529ee7022e
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@@ -64,10 -62,13 +64,14 @@@ set(SR
  	intern/draw_cache_impl_metaball.c
  	intern/draw_cache_impl_particles.c
  	intern/draw_common.c
 +	intern/draw_hair.c
  	intern/draw_instance_data.c
  	intern/draw_manager.c
+ 	intern/draw_manager_data.c
+ 	intern/draw_manager_exec.c
+ 	intern/draw_manager_shader.c
  	intern/draw_manager_text.c
+ 	intern/draw_manager_texture.c
  	intern/draw_manager_profiling.c
  	intern/draw_view.c
  	modes/edit_armature_mode.c
diff --cc source/blender/draw/engines/eevee/eevee_materials.c
index cde14f0efc3,fc4439a253c..d146fda5373
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@@ -505,8 -529,10 +545,8 @@@ static void EEVEE_update_viewvecs(floa
  void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, EEVEE_FramebufferList *fbl)
  {
  	if (!e_data.frag_shader_lib) {
 -		char *frag_str = NULL;
 -
  		/* Shaders */
- 		e_data.frag_shader_lib = BLI_string_joinN(
+ 		e_data.shadow_shader_lib = BLI_string_joinN(
  		        datatoc_common_uniforms_lib_glsl,
  		        datatoc_bsdf_common_lib_glsl,
  		        datatoc_bsdf_sampling_lib_glsl,
@@@ -529,8 -555,13 +569,13 @@@
  		        datatoc_lit_surface_frag_glsl,
  		        datatoc_lit_surface_frag_glsl,
  		        datatoc_volumetric_lib_glsl);
 -
 +		
+ 		e_data.frag_shader_lib = BLI_string_joinN(
+ 		        datatoc_common_view_lib_glsl,
+ 		        e_data.shadow_shader_lib);
+ 
  		e_data.volume_shader_lib = BLI_string_joinN(
+ 		        datatoc_common_view_lib_glsl,
  		        datatoc_common_uniforms_lib_glsl,
  		        datatoc_bsdf_common_lib_glsl,
  		        datatoc_ambient_occlusion_lib_glsl,
@@@ -799,36 -779,25 +809,36 @@@ struct GPUMaterial *EEVEE_material_mesh
  }
  
  struct GPUMaterial *EEVEE_material_hair_get(
 -        struct Scene *scene, Material *ma, int shadow_method)
 +        struct Scene *scene, Material *ma, int shadow_method, bool use_fibers)
  {
  	const void *engine = &DRW_engine_viewport_eevee_type;
 -	int options = VAR_MAT_MESH | VAR_MAT_HAIR;
 -
 +	int options = VAR_MAT_HAIR | VAR_MAT_MESH;
  	options |= eevee_material_shadow_option(shadow_method);
 -
 +	if (use_fibers) {
 +		options |= VAR_MAT_HAIR_FIBERS;
 +	}
- 	GPUMaterial *mat = GPU_material_from_nodetree_find(&ma->gpumaterial, engine, options);
+ 	GPUMate

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list