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.
This commit is contained in:
Sergey Sharybin 2014-08-25 14:05:00 +06:00
parent ca1bca442a
commit 2a44844870
Notes: blender-bot 2023-02-14 10:11:54 +01:00
Referenced by issue #41567, Metaball rendering stuck on 1 sample
Referenced by issue #41568, Dissolve Vertices with Tear Boundary Option keeps one vert every two verts.
Referenced by issue #41532, Some files bounce back and forth between 'packing BVH nodes' and 'Copying Transforms to Device'
Referenced by issue #41535, Other Objects is flickering when emitter are disabled on particle system
Referenced by issue #41474, Second renderlayer doesnt render if first one has 'Use Surfaces' disabled.
3 changed files with 6 additions and 3 deletions

View File

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

View File

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

View File

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