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:
@@ -529,14 +529,12 @@ Mesh *BlenderSync::sync_mesh(BL::Object b_ob, bool object_updated, bool hide_tri
|
|||||||
Mesh *mesh;
|
Mesh *mesh;
|
||||||
|
|
||||||
if(!mesh_map.sync(&mesh, key)) {
|
if(!mesh_map.sync(&mesh, key)) {
|
||||||
bool have_geometry = mesh->verts.size() != 0;
|
|
||||||
|
|
||||||
/* if transform was applied to mesh, need full update */
|
/* if transform was applied to mesh, need full update */
|
||||||
if(object_updated && mesh->transform_applied);
|
if(object_updated && mesh->transform_applied);
|
||||||
/* test if shaders changed, these can be object level so mesh
|
/* test if shaders changed, these can be object level so mesh
|
||||||
* does not get tagged for recalc */
|
* does not get tagged for recalc */
|
||||||
else if(mesh->used_shaders != used_shaders);
|
else if(mesh->used_shaders != used_shaders);
|
||||||
else if(use_mesh_geometry != have_geometry);
|
else if(use_mesh_geometry != mesh->geometry_synced);
|
||||||
else {
|
else {
|
||||||
/* even if not tagged for recalc, we may need to sync anyway
|
/* even if not tagged for recalc, we may need to sync anyway
|
||||||
* because the shader needs different mesh attributes */
|
* 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 */
|
/* free derived mesh */
|
||||||
b_data.meshes.remove(b_mesh);
|
b_data.meshes.remove(b_mesh);
|
||||||
}
|
}
|
||||||
|
mesh->geometry_synced = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* displacement method */
|
/* displacement method */
|
||||||
|
@@ -132,6 +132,7 @@ void Mesh::clear()
|
|||||||
transform_applied = false;
|
transform_applied = false;
|
||||||
transform_negative_scaled = false;
|
transform_negative_scaled = false;
|
||||||
transform_normal = transform_identity();
|
transform_normal = transform_identity();
|
||||||
|
geometry_synced = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Mesh::split_vertex(int vertex)
|
int Mesh::split_vertex(int vertex)
|
||||||
|
@@ -71,6 +71,9 @@ public:
|
|||||||
ustring name;
|
ustring name;
|
||||||
|
|
||||||
/* Mesh Data */
|
/* Mesh Data */
|
||||||
|
bool geometry_synced; /* used to distinguish meshes with no verts
|
||||||
|
and meshed for which geometry is not created */
|
||||||
|
|
||||||
vector<float3> verts;
|
vector<float3> verts;
|
||||||
vector<Triangle> triangles;
|
vector<Triangle> triangles;
|
||||||
vector<uint> shader;
|
vector<uint> shader;
|
||||||
|
Reference in New Issue
Block a user