[Bf-blender-cvs] [7cd18dd] master: Fix debug mode assert in subd code after recent refactoring.

Brecht Van Lommel noreply at git.blender.org
Sun May 29 20:32:58 CEST 2016


Commit: 7cd18dda7d5d952829e6024ee9798ce77a1dede0
Author: Brecht Van Lommel
Date:   Sun May 29 11:16:27 2016 +0200
Branches: master
https://developer.blender.org/rB7cd18dda7d5d952829e6024ee9798ce77a1dede0

Fix debug mode assert in subd code after recent refactoring.

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

M	intern/cycles/app/cycles_xml.cpp
M	intern/cycles/subd/subd_dice.cpp

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

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index 896a490..f501a01 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -876,6 +876,11 @@ static void xml_read_mesh(const XMLReadState& state, pugi::xml_node node)
 		/* create vertices */
 		mesh->verts = P;
 
+		size_t num_triangles = 0;
+		for(size_t i = 0; i < nverts.size(); i++)
+			num_triangles += nverts[i]-2;
+		mesh->reserve_mesh(mesh->verts.size(), num_triangles);
+
 		/* create triangles */
 		int index_offset = 0;
 
diff --git a/intern/cycles/subd/subd_dice.cpp b/intern/cycles/subd/subd_dice.cpp
index daf0f63..9542ac4 100644
--- a/intern/cycles/subd/subd_dice.cpp
+++ b/intern/cycles/subd/subd_dice.cpp
@@ -48,7 +48,7 @@ void EdgeDice::reserve(int num_verts, int num_tris)
 	vert_offset = mesh->verts.size();
 	tri_offset = mesh->triangles.size();
 
-	mesh->resize_mesh(vert_offset + num_verts, tri_offset + num_tris);
+	mesh->resize_mesh(vert_offset + num_verts, tri_offset);
 
 	Attribute *attr_vN = mesh->attributes.add(ATTR_STD_VERTEX_NORMAL);
 
@@ -80,7 +80,13 @@ int EdgeDice::add_vert(Patch *patch, float2 uv)
 
 void EdgeDice::add_triangle(Patch *patch, int v0, int v1, int v2)
 {
-	params.mesh->add_triangle(v0, v1, v2, params.shader, params.smooth, false);
+	Mesh *mesh = params.mesh;
+
+	/* todo: optimize so we can reserve in advance, this is like push_back_slow() */
+	if(mesh->triangles.size() == mesh->triangles.capacity())
+		mesh->reserve_mesh(mesh->verts.size(), size_t(max(mesh->triangles.size() + 1, 1) * 1.2));
+
+	mesh->add_triangle(v0, v1, v2, params.shader, params.smooth, false);
 
 	if(params.ptex) {
 		Attribute *attr_ptex_face_id = params.mesh->attributes.add(ATTR_STD_PTEX_FACE_ID);




More information about the Bf-blender-cvs mailing list