[Bf-blender-cvs] [fe9e0e2337d] refactor-mesh-material-index-generic: Avoid retrieving material indices many times in draw code
Hans Goudey
noreply at git.blender.org
Sat Aug 27 16:36:00 CEST 2022
Commit: fe9e0e2337d2c8a2df47ed03e759f8219b4d215e
Author: Hans Goudey
Date: Sat Aug 27 09:35:37 2022 -0500
Branches: refactor-mesh-material-index-generic
https://developer.blender.org/rBfe9e0e2337d2c8a2df47ed03e759f8219b4d215e
Avoid retrieving material indices many times in draw code
===================================================================
M source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh.hh
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc b/source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
index b933f1f4916..e07fe81840e 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
@@ -229,13 +229,10 @@ static void mesh_render_data_polys_sorted_build(MeshRenderData *mr, MeshBufferCa
}
}
else {
- const blender::VArraySpan<int> material_indices =
- blender::bke::mesh_attributes(*mr->me).lookup_or_default<int>(
- "material_index", ATTR_DOMAIN_FACE, 0);
for (int i = 0; i < mr->poly_len; i++) {
if (!(mr->use_hide && mr->hide_poly && mr->hide_poly[i])) {
const MPoly *mp = &mr->mpoly[i];
- const int mat = min_ii(material_indices[i], mat_last);
+ const int mat = min_ii(mr->material_indices ? mr->material_indices[i] : 0, mat_last);
tri_first_index[i] = mat_tri_offs[mat];
mat_tri_offs[mat] += mp->totloop - 2;
}
@@ -271,13 +268,10 @@ static void mesh_render_data_mat_tri_len_mesh_range_fn(void *__restrict userdata
{
MeshRenderData *mr = static_cast<MeshRenderData *>(userdata);
int *mat_tri_len = static_cast<int *>(tls->userdata_chunk);
- const blender::VArraySpan<int> material_indices =
- blender::bke::mesh_attributes(*mr->me).lookup_or_default<int>(
- "material_index", ATTR_DOMAIN_FACE, 0);
const MPoly *mp = &mr->mpoly[iter];
if (!(mr->use_hide && mr->hide_poly && mr->hide_poly[iter])) {
- int mat = min_ii(material_indices[iter], mr->mat_len - 1);
+ int mat = min_ii(mr->material_indices ? mr->material_indices[iter] : 0, mr->mat_len - 1);
mat_tri_len[mat] += mp->totloop - 2;
}
}
@@ -583,6 +577,9 @@ MeshRenderData *mesh_render_data_create(Object *object,
mr->e_origindex = static_cast<const int *>(CustomData_get_layer(&mr->me->edata, CD_ORIGINDEX));
mr->p_origindex = static_cast<const int *>(CustomData_get_layer(&mr->me->pdata, CD_ORIGINDEX));
+ mr->material_indices = static_cast<const int *>(
+ CustomData_get_layer_named(&me->pdata, CD_PROP_INT32, "material_index"));
+
mr->hide_vert = static_cast<const bool *>(
CustomData_get_layer_named(&me->vdata, CD_PROP_BOOL, ".hide_vert"));
mr->hide_edge = static_cast<const bool *>(
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.hh b/source/blender/draw/intern/mesh_extractors/extract_mesh.hh
index 5d55af904e8..10b94291e35 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh.hh
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.hh
@@ -80,6 +80,7 @@ struct MeshRenderData {
BMFace *efa_act_uv;
/* Data created on-demand (usually not for #BMesh based data). */
MLoopTri *mlooptri;
+ const int *material_indices;
const float (*vert_normals)[3];
const float (*poly_normals)[3];
const bool *hide_vert;
More information about the Bf-blender-cvs
mailing list