[Bf-blender-cvs] [3c341523348] cycles_procedural_api: fix crash dereferencing nul pointer
Kévin Dietrich
noreply at git.blender.org
Sat Oct 3 04:18:23 CEST 2020
Commit: 3c3415233481306072f154db1d33b89ec2d13bb2
Author: Kévin Dietrich
Date: Fri Oct 2 23:38:10 2020 +0200
Branches: cycles_procedural_api
https://developer.blender.org/rB3c3415233481306072f154db1d33b89ec2d13bb2
fix crash dereferencing nul pointer
===================================================================
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 f4d814c68db..4be8d9a723f 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -762,8 +762,11 @@ static void create_mesh(Scene *scene,
}
/* allocate memory */
+ if (subdivision) {
+ mesh->reserve_subd_faces(numfaces, numngons, numcorners);
+ }
+
mesh->reserve_mesh(numverts, numtris);
- mesh->reserve_subd_faces(numfaces, numngons, numcorners);
/* create vertex coordinates and normals */
BL::Mesh::vertices_iterator v;
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index a7f88be4bd7..5786aeff22b 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -186,6 +186,7 @@ Mesh::Mesh(const NodeType *node_type, Type geom_type_)
corner_offset = 0;
num_subd_verts = 0;
+ num_subd_faces = 0;
num_ngons = 0;
@@ -245,6 +246,7 @@ void Mesh::resize_subd_faces(int numfaces, int num_ngons_, int numcorners)
subd_ptex_offset.resize(numfaces);
subd_face_corners.resize(numcorners);
num_ngons = num_ngons_;
+ num_subd_faces = numfaces;
subd_attributes.resize();
}
@@ -258,6 +260,7 @@ void Mesh::reserve_subd_faces(int numfaces, int num_ngons_, int numcorners)
subd_ptex_offset.reserve(numfaces);
subd_face_corners.reserve(numcorners);
num_ngons = num_ngons_;
+ num_subd_faces = numfaces;
subd_attributes.resize(true);
}
@@ -289,6 +292,7 @@ void Mesh::clear(bool preserve_voxel_data)
subd_face_corners.clear();
num_subd_verts = 0;
+ num_subd_faces = 0;
subd_creases_edge.clear();
subd_creases_weight.clear();
@@ -358,9 +362,9 @@ void Mesh::add_subd_face(int *corners, int num_corners, int shader_, bool smooth
}
int ptex_offset = 0;
-
- if (get_num_subd_faces()) {
- SubdFace s = get_subd_face(get_num_subd_faces() - 1);
+ // cannot use get_num_subd_faces here as it holds the total number of subd_faces, but we do not have the total amount of data yet
+ if (subd_shader.size()) {
+ SubdFace s = get_subd_face(subd_shader.size() - 1);
ptex_offset = s.ptex_offset + s.num_ptex_faces();
}
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index f00be5466f9..52e04ac0941 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -176,6 +176,7 @@ class Mesh : public Geometry {
size_t corner_offset;
size_t num_subd_verts;
+ size_t num_subd_faces;
unordered_map<int, int> vert_to_stitching_key_map; /* real vert index -> stitching index */
unordered_multimap<int, int>
@@ -239,7 +240,7 @@ class Mesh : public Geometry {
size_t get_num_subd_faces() const
{
- return subd_shader.size();
+ return num_subd_faces;
}
size_t get_num_subd_verts()
More information about the Bf-blender-cvs
mailing list