[Bf-blender-cvs] [f42c6960d20] blender2.8: Draw manager: Cleanup, early output

Sergey Sharybin noreply at git.blender.org
Thu Mar 29 11:44:29 CEST 2018


Commit: f42c6960d2065a31526d448774cb43a345966813
Author: Sergey Sharybin
Date:   Thu Mar 29 10:33:02 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBf42c6960d2065a31526d448774cb43a345966813

Draw manager: Cleanup, early output

Do early output and reduce level of indentation.

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

M	source/blender/draw/intern/draw_cache_impl_particles.c

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

diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c
index da0cc457b99..97e1a3b3e05 100644
--- a/source/blender/draw/intern/draw_cache_impl_particles.c
+++ b/source/blender/draw/intern/draw_cache_impl_particles.c
@@ -176,128 +176,114 @@ static void ensure_seg_pt_count(ParticleSystem *psys, ParticleBatchCache *cache)
 /* Gwn_Batch cache usage. */
 static void particle_batch_cache_ensure_pos_and_seg(ParticleSystem *psys, ModifierData *md, ParticleBatchCache *cache)
 {
-	if (cache->pos == NULL || cache->segments == NULL) {
-		int curr_point = 0;
-		ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md;
-
-		GWN_VERTBUF_DISCARD_SAFE(cache->pos);
-		GWN_INDEXBUF_DISCARD_SAFE(cache->segments);
-
-		static Gwn_VertFormat format = { 0 };
-		static struct { uint pos, tan, ind; } attr_id;
-		unsigned int *uv_id = NULL;
-		int uv_layers = 0;
-		MTFace **mtfaces = NULL;
-		float (**parent_uvs)[2] = NULL;
-		bool simple = psys->part->childtype == PART_CHILD_PARTICLES;
-
-		if (psmd) {
-			if (CustomData_has_layer(&psmd->dm_final->loopData, CD_MLOOPUV)) {
-				uv_layers = CustomData_number_of_layers(&psmd->dm_final->loopData, CD_MLOOPUV);
-			}
+	if (cache->pos != NULL && cache->segments != NULL) {
+		return;
+	}
+
+	int curr_point = 0;
+	ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md;
+
+	GWN_VERTBUF_DISCARD_SAFE(cache->pos);
+	GWN_INDEXBUF_DISCARD_SAFE(cache->segments);
+
+	static Gwn_VertFormat format = { 0 };
+	static struct { uint pos, tan, ind; } attr_id;
+	unsigned int *uv_id = NULL;
+	int uv_layers = 0;
+	MTFace **mtfaces = NULL;
+	float (**parent_uvs)[2] = NULL;
+	bool simple = psys->part->childtype == PART_CHILD_PARTICLES;
+
+	if (psmd) {
+		if (CustomData_has_layer(&psmd->dm_final->loopData, CD_MLOOPUV)) {
+			uv_layers = CustomData_number_of_layers(&psmd->dm_final->loopData, CD_MLOOPUV);
 		}
+	}
 
-		GWN_vertformat_clear(&format);
+	GWN_vertformat_clear(&format);
 
-		/* initialize vertex format */
-		attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
-		attr_id.tan = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
-		attr_id.ind = GWN_vertformat_attr_add(&format, "ind", GWN_COMP_I32, 1, GWN_FETCH_INT);
+	/* initialize vertex format */
+	attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+	attr_id.tan = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+	attr_id.ind = GWN_vertformat_attr_add(&format, "ind", GWN_COMP_I32, 1, GWN_FETCH_INT);
 
-		if (psmd) {
-			uv_id = MEM_mallocN(sizeof(*uv_id) * uv_layers, "UV attrib format");
+	if (psmd) {
+		uv_id = MEM_mallocN(sizeof(*uv_id) * uv_layers, "UV attrib format");
 
-			for (int i = 0; i < uv_layers; i++) {
-				const char *name = CustomData_get_layer_name(&psmd->dm_final->loopData, CD_MLOOPUV, i);
-				char uuid[32];
+		for (int i = 0; i < uv_layers; i++) {
+			const char *name = CustomData_get_layer_name(&psmd->dm_final->loopData, CD_MLOOPUV, i);
+			char uuid[32];
 
-				BLI_snprintf(uuid, sizeof(uuid), "u%u", BLI_ghashutil_strhash_p(name));
-				uv_id[i] = GWN_vertformat_attr_add(&format, uuid, GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
-			}
+			BLI_snprintf(uuid, sizeof(uuid), "u%u", BLI_ghashutil_strhash_p(name));
+			uv_id[i] = GWN_vertformat_attr_add(&format, uuid, GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
 		}
+	}
 
-		cache->pos = GWN_vertbuf_create_with_format(&format);
-		GWN_vertbuf_data_alloc(cache->pos, cache->point_count);
+	cache->pos = GWN_vertbuf_create_with_format(&format);
+	GWN_vertbuf_data_alloc(cache->pos, cache->point_count);
 
-		Gwn_IndexBufBuilder elb;
-		GWN_indexbuf_init(&elb, GWN_PRIM_LINES, cache->segment_count, cache->point_count);
+	Gwn_IndexBufBuilder elb;
+	GWN_indexbuf_init(&elb, GWN_PRIM_LINES, cache->segment_count, cache->point_count);
 
-		if (uv_layers) {
-			DM_ensure_tessface(psmd->dm_final);
+	if (uv_layers) {
+		DM_ensure_tessface(psmd->dm_final);
 
-			mtfaces = MEM_mallocN(sizeof(*mtfaces) * uv_layers, "Faces UV layers");
+		mtfaces = MEM_mallocN(sizeof(*mtfaces) * uv_layers, "Faces UV layers");
 
-			for (int i = 0; i < uv_layers; i++) {
-				mtfaces[i] = (MTFace *)CustomData_get_layer_n(&psmd->dm_final->faceData, CD_MTFACE, i);
-			}
+		for (int i = 0; i < uv_layers; i++) {
+			mtfaces[i] = (MTFace *)CustomData_get_layer_n(&psmd->dm_final->faceData, CD_MTFACE, i);
 		}
+	}
 
-		if (psys->pathcache && (!psys->childcache || (psys->part->draw & PART_DRAW_PARENT))) {
-			if (simple) {
-				parent_uvs = MEM_callocN(sizeof(*parent_uvs) * psys->totpart, "Parent particle UVs");
-			}
+	if (psys->pathcache && (!psys->childcache || (psys->part->draw & PART_DRAW_PARENT))) {
+		if (simple) {
+			parent_uvs = MEM_callocN(sizeof(*parent_uvs) * psys->totpart, "Parent particle UVs");
+		}
 
-			for (int i = 0; i < psys->totpart; i++) {
-				ParticleCacheKey *path = psys->pathcache[i];
+		for (int i = 0; i < psys->totpart; i++) {
+			ParticleCacheKey *path = psys->pathcache[i];
 
-				if (path->segments > 0) {
-					float tangent[3];
-					int from = psmd ? psmd->psys->part->from : 0;
-					float (*uv)[2] = NULL;
+			if (path->segments > 0) {
+				float tangent[3];
+				int from = psmd ? psmd->psys->part->from : 0;
+				float (*uv)[2] = NULL;
 
-					if (psmd) {
-						uv = MEM_callocN(sizeof(*uv) * uv_layers, "Particle UVs");
+				if (psmd) {
+					uv = MEM_callocN(sizeof(*uv) * uv_layers, "Particle UVs");
 
-						if (simple) {
-							parent_uvs[i] = uv;
-						}
+					if (simple) {
+						parent_uvs[i] = uv;
 					}
+				}
 
-					if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
-						ParticleData *particle = &psys->particles[i];
-						int num = particle->num_dmcache;
-
-						if (num == DMCACHE_NOTFOUND) {
-							if (particle->num < psmd->dm_final->getNumTessFaces(psmd->dm_final)) {
-								num = particle->num;
-							}
-						}
-
-						if (num != DMCACHE_NOTFOUND) {
-							MFace *mface = psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);
+				if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+					ParticleData *particle = &psys->particles[i];
+					int num = particle->num_dmcache;
 
-							for (int j = 0; j < uv_layers; j++) {
-								psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, uv[j]);
-							}
+					if (num == DMCACHE_NOTFOUND) {
+						if (particle->num < psmd->dm_final->getNumTessFaces(psmd->dm_final)) {
+							num = particle->num;
 						}
 					}
 
-					for (int j = 0; j < path->segments; j++) {
-						if (j == 0) {
-							sub_v3_v3v3(tangent, path[j + 1].co, path[j].co);
-						}
-						else {
-							sub_v3_v3v3(tangent, path[j + 1].co, path[j - 1].co);
-						}
+					if (num != DMCACHE_NOTFOUND) {
+						MFace *mface = psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);
 
-						GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[j].co);
-						GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
-						GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &i);
-
-						if (psmd) {
-							for (int k = 0; k < uv_layers; k++) {
-								GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point, uv[k]);
-							}
+						for (int j = 0; j < uv_layers; j++) {
+							psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, uv[j]);
 						}
-
-						GWN_indexbuf_add_line_verts(&elb, curr_point, curr_point + 1);
-
-						curr_point++;
 					}
+				}
 
-					sub_v3_v3v3(tangent, path[path->segments].co, path[path->segments - 1].co);
+				for (int j = 0; j < path->segments; j++) {
+					if (j == 0) {
+						sub_v3_v3v3(tangent, path[j + 1].co, path[j].co);
+					}
+					else {
+						sub_v3_v3v3(tangent, path[j + 1].co, path[j - 1].co);
+					}
 
-					GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[path->segments].co);
+					GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[j].co);
 					GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
 					GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &i);
 
@@ -305,102 +291,101 @@ static void particle_batch_cache_ensure_pos_and_seg(ParticleSystem *psys, Modifi
 						for (int k = 0; k < uv_layers; k++) {
 							GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point, uv[k]);
 						}
-
-						if (!simple) {
-							MEM_freeN(uv);
-						}
 					}
 
+					GWN_indexbuf_add_line_verts(&elb, curr_point, curr_point + 1);
+
 					curr_point++;
 				}
-			}
-		}
 
-		if (psys->childcache) {
-			int child_count = psys->totchild * psys->part->disp / 100;
+				sub_v3_v3v3(tangent, path[path->segments].co, path[path->segments - 1].co);
 
-			if (simple && !parent_uvs) {
-				parent_uvs = MEM_callocN(sizeof(*parent_uvs) * psys->totpart, "Parent particle UVs");
-			}
+				GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[path->segments].co);
+				GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
+				GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &i);
 
-			for (int i = 0, x = psys->totpart; i < child_count; i++, x++) {
-				ParticleCacheKey *path = psys->childcache[i];
-				float tangent[3];
-
-				if (path->segments > 0) {
-					int from = psmd ? psmd->psys->part->from : 0;
-					float (*uv)[2] = NULL;
+				if (psmd) {
+					for (int k = 0; k < uv_layers; k++) {
+						GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point, uv[k]);
+					}
 
 					if (!simple) {
-						if (psmd) {
-							uv = MEM_callocN(sizeof(*uv) * uv_layers, "Particle UVs");
-						}
+						MEM_freeN(uv);
+					}
+				}
 
-						if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
-							ChildParticle *particle = &psys->child[i];
-							int num = particle->num;
+				curr_point++;
+			}
+		}
+	}
 
-							if (num != DMCACHE_NOTFOUND) {
-								MFace *mface = psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);
+	if (psys->childcache) {
+		int child_count = psys->totchild * psys->part->disp / 100;
 
-								for (int j = 0; j < uv_layers; j++) {
-									psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, uv[j]);
-								}
-							}
-						}
-					}
-					else if (!parent_uvs[psys->child[i].parent]) {
-						if (psmd) {
-					

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list