Cycles: Avoid overhead from RNA when extracting mesh data #106275
|
@ -991,7 +991,7 @@ static void create_mesh(Scene *scene,
|
||||||
Attribute *attr_N = attributes.add(ATTR_STD_VERTEX_NORMAL);
|
Attribute *attr_N = attributes.add(ATTR_STD_VERTEX_NORMAL);
|
||||||
float3 *N = attr_N->data_float3();
|
float3 *N = attr_N->data_float3();
|
||||||
|
|
||||||
if (!corner_normals) {
|
if (subdivision || !(use_loop_normals && corner_normals)) {
|
||||||
const float(*b_vert_normals)[3] = static_cast<const float(*)[3]>(
|
const float(*b_vert_normals)[3] = static_cast<const float(*)[3]>(
|
||||||
b_mesh.vertex_normals[0].ptr.data);
|
b_mesh.vertex_normals[0].ptr.data);
|
||||||
for (int i = 0; i < numverts; i++) {
|
for (int i = 0; i < numverts; i++) {
|
||||||
|
@ -1047,7 +1047,7 @@ static void create_mesh(Scene *scene,
|
||||||
std::fill(shader, shader + numtris, 0);
|
std::fill(shader, shader + numtris, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sharp_faces && !corner_normals) {
|
if (sharp_faces && !(use_loop_normals && corner_normals)) {
|
||||||
for (int i = 0; i < numtris; i++) {
|
for (int i = 0; i < numtris; i++) {
|
||||||
const int poly_index = looptris[i].poly;
|
const int poly_index = looptris[i].poly;
|
||||||
smooth[i] = !sharp_faces[poly_index];
|
smooth[i] = !sharp_faces[poly_index];
|
||||||
|
@ -1057,7 +1057,7 @@ static void create_mesh(Scene *scene,
|
||||||
std::fill(smooth, smooth + numtris, true);
|
std::fill(smooth, smooth + numtris, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (corner_normals) {
|
if (use_loop_normals && corner_normals) {
|
||||||
for (int i = 0; i < numtris; i++) {
|
for (int i = 0; i < numtris; i++) {
|
||||||
const MLoopTri &tri = looptris[i];
|
const MLoopTri &tri = looptris[i];
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
|
@ -1068,6 +1068,7 @@ static void create_mesh(Scene *scene,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh->tag_triangles_modified();
|
mesh->tag_triangles_modified();
|
||||||
mesh->tag_shader_modified();
|
mesh->tag_shader_modified();
|
||||||
mesh->tag_smooth_modified();
|
mesh->tag_smooth_modified();
|
||||||
|
@ -1080,7 +1081,7 @@ static void create_mesh(Scene *scene,
|
||||||
int *subd_ptex_offset = mesh->get_subd_ptex_offset().data();
|
int *subd_ptex_offset = mesh->get_subd_ptex_offset().data();
|
||||||
int *subd_face_corners = mesh->get_subd_face_corners().data();
|
int *subd_face_corners = mesh->get_subd_face_corners().data();
|
||||||
|
|
||||||
if (sharp_faces) {
|
if (sharp_faces && !use_loop_normals) {
|
||||||
for (int i = 0; i < numfaces; i++) {
|
for (int i = 0; i < numfaces; i++) {
|
||||||
subd_smooth[i] = !sharp_faces[i];
|
subd_smooth[i] = !sharp_faces[i];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue