Commit: 1f5c5fa189db8d5d505246dc7e905a796d21ce22
Author: Brecht Van Lommel
Date:   Sat Mar 10 06:10:14 2018 +0100
Branches: master
https://developer.blender.org/rB1f5c5fa189db8d5d505246dc7e905a796d21ce22

Fix T54279: viewport update bug with volume meshes.

Meshes without vertex normals were not handled correctly.

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

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

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

diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index d6c37c22099..7d5a0e451d0 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -877,15 +877,8 @@ void Mesh::add_undisplaced()
        }
 }
 
-void Mesh::pack_normals(Scene *scene, uint *tri_shader, float4 *vnormal)
+void Mesh::pack_shaders(Scene *scene, uint *tri_shader)
 {
-       Attribute *attr_vN = attributes.find(ATTR_STD_VERTEX_NORMAL);
-       if(attr_vN == NULL) {
-               /* Happens on objects with just hair. */
-               return;
-       }
-
-       float3 *vN = attr_vN->data_float3();
        uint shader_id = 0;
        uint last_shader = -1;
        bool last_smooth = false;
@@ -893,10 +886,6 @@ void Mesh::pack_normals(Scene *scene, uint *tri_shader, 
float4 *vnormal)
        size_t triangles_size = num_triangles();
        int *shader_ptr = shader.data();
 
-       bool do_transform = transform_applied;
-       Transform ntfm = transform_normal;
-
-       /* save shader */
        for(size_t i = 0; i < triangles_size; i++) {
                if(shader_ptr[i] != last_shader || last_smooth != smooth[i]) {
                        last_shader = shader_ptr[i];
@@ -908,7 +897,20 @@ void Mesh::pack_normals(Scene *scene, uint *tri_shader, 
float4 *vnormal)
 
                tri_shader[i] = shader_id;
        }
+}
+
+void Mesh::pack_normals(Scene *scene, float4 *vnormal)
+{
+       Attribute *attr_vN = attributes.find(ATTR_STD_VERTEX_NORMAL);
+       if(attr_vN == NULL) {
+               /* Happens on objects with just hair. */
+               return;
+       }
 
+       bool do_transform = transform_applied;
+       Transform ntfm = transform_normal;
+
+       float3 *vN = attr_vN->data_float3();
        size_t verts_size = verts.size();
 
        for(size_t i = 0; i < verts_size; i++) {
@@ -1773,8 +1775,9 @@ void MeshManager::device_update_mesh(Device *,
                float2 *tri_patch_uv = dscene->tri_patch_uv.alloc(vert_size);
 
                foreach(Mesh *mesh, scene->meshes) {
+                       mesh->pack_shaders(scene,
+                                          &tri_shader[mesh->tri_offset]);
                        mesh->pack_normals(scene,
-                                          &tri_shader[mesh->tri_offset],
                                           &vnormal[mesh->vert_offset]);
                        mesh->pack_verts(tri_prim_index,
                                         &tri_vindex[mesh->tri_offset],
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index 6042faccad5..03a419e77f2 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -279,7 +279,8 @@ public:
        void add_vertex_normals();
        void add_undisplaced();
 
-       void pack_normals(Scene *scene, uint *shader, float4 *vnormal);
+       void pack_shaders(Scene *scene, uint *shader);
+       void pack_normals(Scene *scene, float4 *vnormal);
        void pack_verts(const vector<uint>& tri_prim_index,
                        uint4 *tri_vindex,
                        uint *tri_patch,

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to