[Bf-blender-cvs] [f0d93a71df8] master: Cleanup: API for MeshExtractRunTimeData.
Jeroen Bakker
noreply at git.blender.org
Tue Jun 1 13:18:50 CEST 2021
Commit: f0d93a71df85e91ec4e06d2b37e24fb728edf2c2
Author: Jeroen Bakker
Date: Tue Jun 1 12:59:15 2021 +0200
Branches: master
https://developer.blender.org/rBf0d93a71df85e91ec4e06d2b37e24fb728edf2c2
Cleanup: API for MeshExtractRunTimeData.
===================================================================
M source/blender/draw/intern/draw_cache_extract_mesh.cc
M source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
M source/blender/draw/intern/draw_cache_extract_mesh_private.h
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc b/source/blender/draw/intern/draw_cache_extract_mesh.cc
index b3ebce98524..5a086805580 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.cc
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc
@@ -54,63 +54,80 @@ namespace blender::draw {
/** \name Mesh Elements Extract Struct
* \{ */
-struct MeshExtractRunData {
+struct ExtractorRunData {
+ /* Extractor where this run data belongs to. */
const MeshExtract *extractor;
- void *buffer;
- void *user_data;
-};
-
-using MeshExtractRunDataArray = blender::Vector<MeshExtractRunData>;
+ /* During iteration the VBO/IBO that is being build. */
+ void *buffer = nullptr;
+ /* User data during iteration. Created in MeshExtract.init and passed along to other MeshExtract
+ * functions. */
+ void *user_data = nullptr;
-static void mesh_extract_run_data_array_add(MeshExtractRunDataArray &array,
- const MeshExtract *extractor)
-{
- MeshExtractRunData run_data;
- run_data.extractor = extractor;
- run_data.buffer = NULL;
- run_data.user_data = NULL;
- array.append(run_data);
-}
+ ExtractorRunData(const MeshExtract *extractor) : extractor(extractor)
+ {
+ }
+};
-static void mesh_extract_run_data_array_filter_iter_type(const MeshExtractRunDataArray &src,
- MeshExtractRunDataArray &dst,
- eMRIterType iter_type)
-{
- for (const MeshExtractRunData &data : src) {
- const MeshExtract *extractor = data.extractor;
- if ((iter_type & MR_ITER_LOOPTRI) && extractor->iter_looptri_bm) {
- BLI_assert(extractor->iter_looptri_mesh);
- dst.append(data);
- continue;
- }
- if ((iter_type & MR_ITER_POLY) && extractor->iter_poly_bm) {
- BLI_assert(extractor->iter_poly_mesh);
- dst.append(data);
- continue;
+class ExtractorRunDatas : public Vector<ExtractorRunData> {
+ public:
+ void filter_into(ExtractorRunDatas &result, eMRIterType iter_type) const
+ {
+ for (const ExtractorRunData &data : *this) {
+ const MeshExtract *extractor = data.extractor;
+ if ((iter_type & MR_ITER_LOOPTRI) && extractor->iter_looptri_bm) {
+ BLI_assert(extractor->iter_looptri_mesh);
+ result.append(data);
+ continue;
+ }
+ if ((iter_type & MR_ITER_POLY) && extractor->iter_poly_bm) {
+ BLI_assert(extractor->iter_poly_mesh);
+ result.append(data);
+ continue;
+ }
+ if ((iter_type & MR_ITER_LEDGE) && extractor->iter_ledge_bm) {
+ BLI_assert(extractor->iter_ledge_mesh);
+ result.append(data);
+ continue;
+ }
+ if ((iter_type & MR_ITER_LVERT) && extractor->iter_lvert_bm) {
+ BLI_assert(extractor->iter_lvert_mesh);
+ result.append(data);
+ continue;
+ }
}
- if ((iter_type & MR_ITER_LEDGE) && extractor->iter_ledge_bm) {
- BLI_assert(extractor->iter_ledge_mesh);
- dst.append(data);
- continue;
+ }
+
+ void filter_threaded_extractors_into(ExtractorRunDatas &result)
+ {
+ for (const ExtractorRunData &data : *this) {
+ const MeshExtract *extractor = data.extractor;
+ if (extractor->use_threading) {
+ result.append(extractor);
+ }
}
- if ((iter_type & MR_ITER_LVERT) && extractor->iter_lvert_bm) {
- BLI_assert(extractor->iter_lvert_mesh);
- dst.append(data);
- continue;
+ }
+
+ eMRIterType iter_types()
+ {
+ eMRIterType iter_type = static_cast<eMRIterType>(0);
+
+ for (const ExtractorRunData &data : *this) {
+ const MeshExtract *extractor = data.extractor;
+ iter_type |= mesh_extract_iter_type(extractor);
}
+ return iter_type;
}
-}
-static void mesh_extract_run_data_array_filter_threading(
- const MeshExtractRunDataArray &src, MeshExtractRunDataArray &dst_multi_threaded)
-{
- for (const MeshExtractRunData &data : src) {
- const MeshExtract *extractor = data.extractor;
- if (extractor->use_threading) {
- mesh_extract_run_data_array_add(dst_multi_threaded, extractor);
+ eMRDataType data_types()
+ {
+ eMRDataType data_type = static_cast<eMRDataType>(0);
+ for (const ExtractorRunData &data : *this) {
+ const MeshExtract *extractor = data.extractor;
+ data_type |= extractor->data_type;
}
+ return data_type;
}
-}
+};
/** \} */
@@ -118,34 +135,13 @@ static void mesh_extract_run_data_array_filter_threading(
/** \name Extract
* \{ */
-static void extracts_flags_get(const MeshExtractRunDataArray &extractors,
- eMRIterType *r_iter_type,
- eMRDataType *r_data_flag)
-{
- eMRIterType iter_type = static_cast<eMRIterType>(0);
- eMRDataType data_flag = static_cast<eMRDataType>(0);
-
- for (const MeshExtractRunData &data : extractors) {
- const MeshExtract *extractor = data.extractor;
- iter_type |= mesh_extract_iter_type(extractor);
- data_flag |= extractor->data_flag;
- }
-
- if (r_iter_type) {
- *r_iter_type = iter_type;
- }
- if (r_data_flag) {
- *r_data_flag = data_flag;
- }
-}
-
BLI_INLINE void extract_init(const MeshRenderData *mr,
struct MeshBatchCache *cache,
- MeshExtractRunDataArray &extractors,
+ ExtractorRunDatas &extractors,
MeshBufferCache *mbc)
{
/* Multi thread. */
- for (MeshExtractRunData &run_data : extractors) {
+ for (ExtractorRunData &run_data : extractors) {
const MeshExtract *extractor = run_data.extractor;
run_data.buffer = mesh_extract_buffer_get(extractor, mbc);
run_data.user_data = extractor->init(mr, cache, run_data.buffer);
@@ -154,14 +150,14 @@ BLI_INLINE void extract_init(const MeshRenderData *mr,
BLI_INLINE void extract_iter_looptri_bm(const MeshRenderData *mr,
const ExtractTriBMesh_Params *params,
- const MeshExtractRunDataArray &all_extractors)
+ const ExtractorRunDatas &all_extractors)
{
- MeshExtractRunDataArray extractors;
- mesh_extract_run_data_array_filter_iter_type(all_extractors, extractors, MR_ITER_LOOPTRI);
+ ExtractorRunDatas extractors;
+ all_extractors.filter_into(extractors, MR_ITER_LOOPTRI);
EXTRACT_TRIS_LOOPTRI_FOREACH_BM_BEGIN(elt, elt_index, params)
{
- for (MeshExtractRunData &run_data : extractors) {
+ for (ExtractorRunData &run_data : extractors) {
run_data.extractor->iter_looptri_bm(mr, elt, elt_index, run_data.user_data);
}
}
@@ -170,14 +166,14 @@ BLI_INLINE void extract_iter_looptri_bm(const MeshRenderData *mr,
BLI_INLINE void extract_iter_looptri_mesh(const MeshRenderData *mr,
const ExtractTriMesh_Params *params,
- const MeshExtractRunDataArray &all_extractors)
+ const ExtractorRunDatas &all_extractors)
{
- MeshExtractRunDataArray extractors;
- mesh_extract_run_data_array_filter_iter_type(all_extractors, extractors, MR_ITER_LOOPTRI);
+ ExtractorRunDatas extractors;
+ all_extractors.filter_into(extractors, MR_ITER_LOOPTRI);
EXTRACT_TRIS_LOOPTRI_FOREACH_MESH_BEGIN(mlt, mlt_index, params)
{
- for (MeshExtractRunData &run_data : extractors) {
+ for (ExtractorRunData &run_data : extractors) {
run_data.extractor->iter_looptri_mesh(mr, mlt, mlt_index, run_data.user_data);
}
}
@@ -186,14 +182,14 @@ BLI_INLINE void extract_iter_looptri_mesh(const MeshRenderData *mr,
BLI_INLINE void extract_iter_poly_bm(const MeshRenderData *mr,
const ExtractPolyBMesh_Params *params,
- const MeshExtractRunDataArray &all_extractors)
+ const ExtractorRunDatas &all_extractors)
{
- MeshExtractRunDataArray extractors;
- mesh_extract_run_data_array_filter_iter_type(all_extractors, extractors, MR_ITER_POLY);
+ ExtractorRunDatas extractors;
+ all_extractors.filter_into(extractors, MR_ITER_POLY);
EXTRACT_POLY_FOREACH_BM_BEGIN(f, f_index, params, mr)
{
- for (MeshExtractRunData &run_data : extractors) {
+ for (ExtractorRunData &run_data : extractors) {
run_data.extractor->iter_poly_bm(mr, f, f_index, run_data.user_data);
}
}
@@ -202,14 +198,14 @@ BLI_INLINE void extract_iter_poly_bm(const MeshRenderData *mr,
BLI_INLINE void extract_iter_poly_mesh(const MeshRenderData *mr,
const ExtractPolyMesh_Params *params,
- const MeshExtractRunDataArray &all_extractors)
+ const ExtractorRunDatas &all_extractors)
{
- MeshExtractRunDataArray extractors;
- mesh_extract_run_data_array_filter_iter_type(all_extractors, extractors, MR_ITER_POLY);
+ ExtractorRunDatas extractors;
+ all_extractors.filter_into(extractors, MR_ITER_POLY);
EXTRACT_POLY_FOREACH_MESH_BEGIN(mp, mp_index, params, mr)
{
- for (MeshExtractRunData &run_data : extractors) {
+ for (ExtractorRunData &run_data : extractors) {
run_data.extractor->iter_poly_mesh(mr, mp, mp_index, run_data.user_data);
}
}
@@ -218,14 +214,14 @@ BLI_INLINE void extract_iter_poly_mesh(const MeshRenderData *mr,
BLI_INLINE void extract_iter_ledge_bm(const MeshRenderData *mr,
const ExtractLEdgeBMesh_Params *params,
- const MeshExtractRunDataArray &all_extractors)
+ const ExtractorRunDatas &all_extractors)
{
- MeshExtractRunDataArray extractors;
- mesh_extract_run_data_array_filter_iter_type(all_extractors, extractors, MR_ITER_LEDGE);
+ ExtractorRunDatas extractors;
+ all_extractors.filter_into(extractors, MR_ITER_LEDGE);
EXTRACT_LEDGE_FOREACH_BM_BEGIN(eed, ledge_index, params)
{
- for (MeshExtractRunData &run_data : extractors) {
+ for (ExtractorRunData &run_data : extractors) {
run_data
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list