[Bf-blender-cvs] [2a44844] master: Fix T41532: Some files bounce back and forth between 'packing BVH nodes' and 'Copying Transforms to Device'

Sergey Sharybin noreply at git.blender.org
Mon Aug 25 10:06:37 CEST 2014


Commit: 2a448448702a1805a9d249f1a49b5f886feb146c
Author: Sergey Sharybin
Date:   Mon Aug 25 14:05:00 2014 +0600
Branches: master
https://developer.blender.org/rB2a448448702a1805a9d249f1a49b5f886feb146c

Fix T41532: Some files bounce back and forth between 'packing BVH nodes' and 'Copying Transforms to Device'

This was originally caused by a6ae12a where i didn't foresee unclear distinguishing
between empty and non-synced meshes will give issues for the viewport. They're the
same for final rendering, but for viewport we need to be accurate here.

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

M	intern/cycles/blender/blender_mesh.cpp
M	intern/cycles/render/mesh.cpp
M	intern/cycles/render/mesh.h

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

diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 0f7d14e..a5e4b7b 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -529,14 +529,12 @@ Mesh *BlenderSync::sync_mesh(BL::Object b_ob, bool object_updated, bool hide_tri
 	Mesh *mesh;
 
 	if(!mesh_map.sync(&mesh, key)) {
-		bool have_geometry = mesh->verts.size() != 0;
-		
 		/* if transform was applied to mesh, need full update */
 		if(object_updated && mesh->transform_applied);
 		/* test if shaders changed, these can be object level so mesh
 		 * does not get tagged for recalc */
 		else if(mesh->used_shaders != used_shaders);
-		else if(use_mesh_geometry != have_geometry);
+		else if(use_mesh_geometry != mesh->geometry_synced);
 		else {
 			/* even if not tagged for recalc, we may need to sync anyway
 			 * because the shader needs different mesh attributes */
@@ -599,6 +597,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object b_ob, bool object_updated, bool hide_tri
 			/* free derived mesh */
 			b_data.meshes.remove(b_mesh);
 		}
+		mesh->geometry_synced = true;
 	}
 
 	/* displacement method */
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 2734430..8299cd0 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -132,6 +132,7 @@ void Mesh::clear()
 	transform_applied = false;
 	transform_negative_scaled = false;
 	transform_normal = transform_identity();
+	geometry_synced = false;
 }
 
 int Mesh::split_vertex(int vertex)
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index 5ee774b..d459056 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -71,6 +71,9 @@ public:
 	ustring name;
 
 	/* Mesh Data */
+	bool geometry_synced;  /* used to distinguish meshes with no verts
+	                          and meshed for which geometry is not created */
+
 	vector<float3> verts;
 	vector<Triangle> triangles;
 	vector<uint> shader;




More information about the Bf-blender-cvs mailing list