Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/io/alembic/intern/abc_customdata.cc')
-rw-r--r--source/blender/io/alembic/intern/abc_customdata.cc65
1 files changed, 32 insertions, 33 deletions
diff --git a/source/blender/io/alembic/intern/abc_customdata.cc b/source/blender/io/alembic/intern/abc_customdata.cc
index 64f1087a5de..b63f63b7919 100644
--- a/source/blender/io/alembic/intern/abc_customdata.cc
+++ b/source/blender/io/alembic/intern/abc_customdata.cc
@@ -56,18 +56,17 @@ static void get_uvs(const CDStreamConfig &config,
return;
}
- const int num_poly = config.totpoly;
- MPoly *polygons = config.mpoly;
- MLoop *mloop = config.mloop;
+ const Span<MPoly> polys = config.polys;
+ const Span<MLoop> loops = config.loops;
if (!config.pack_uvs) {
int count = 0;
- uvidx.resize(config.totloop);
- uvs.resize(config.totloop);
+ uvidx.resize(loops.size());
+ uvs.resize(loops.size());
/* Iterate in reverse order to match exported polygons. */
- for (int i = 0; i < num_poly; i++) {
- MPoly &current_poly = polygons[i];
+ for (const int i : polys.index_range()) {
+ const MPoly &current_poly = polys[i];
const MLoopUV *loopuv = mloopuv_array + current_poly.loopstart + current_poly.totloop;
for (int j = 0; j < current_poly.totloop; j++, count++) {
@@ -81,12 +80,12 @@ static void get_uvs(const CDStreamConfig &config,
}
else {
/* Mapping for indexed UVs, deduplicating UV coordinates at vertices. */
- std::vector<std::vector<uint32_t>> idx_map(config.totvert);
+ std::vector<std::vector<uint32_t>> idx_map(config.verts.size());
int idx_count = 0;
- for (int i = 0; i < num_poly; i++) {
- MPoly &current_poly = polygons[i];
- MLoop *looppoly = mloop + current_poly.loopstart + current_poly.totloop;
+ for (const int i : polys.index_range()) {
+ const MPoly &current_poly = polys[i];
+ const MLoop *looppoly = &loops[current_poly.loopstart + current_poly.totloop];
const MLoopUV *loopuv = mloopuv_array + current_poly.loopstart + current_poly.totloop;
for (int j = 0; j < current_poly.totloop; j++) {
@@ -172,19 +171,19 @@ static void get_cols(const CDStreamConfig &config,
const void *cd_data)
{
const float cscale = 1.0f / 255.0f;
- const MPoly *polys = config.mpoly;
- const MLoop *mloops = config.mloop;
+ const Span<MPoly> polys = config.polys;
+ const Span<MLoop> loops = config.loops;
const MCol *cfaces = static_cast<const MCol *>(cd_data);
- buffer.reserve(config.totvert);
- uvidx.reserve(config.totvert);
+ buffer.reserve(config.verts.size());
+ uvidx.reserve(config.verts.size());
Imath::C4f col;
- for (int i = 0; i < config.totpoly; i++) {
+ for (const int i : polys.index_range()) {
const MPoly *p = &polys[i];
const MCol *cface = &cfaces[p->loopstart + p->totloop];
- const MLoop *mloop = &mloops[p->loopstart + p->totloop];
+ const MLoop *mloop = &loops[p->loopstart + p->totloop];
for (int j = 0; j < p->totloop; j++) {
cface--;
@@ -247,9 +246,9 @@ void write_generated_coordinates(const OCompoundProperty &prop, CDStreamConfig &
const float(*orcodata)[3] = static_cast<const float(*)[3]>(customdata);
/* Convert 3D vertices from float[3] z=up to V3f y=up. */
- std::vector<Imath::V3f> coords(config.totvert);
+ std::vector<Imath::V3f> coords(config.verts.size());
float orco_yup[3];
- for (int vertex_idx = 0; vertex_idx < config.totvert; vertex_idx++) {
+ for (int vertex_idx = 0; vertex_idx < config.verts.size(); vertex_idx++) {
copy_yup_from_zup(orco_yup, orcodata[vertex_idx]);
coords[vertex_idx].setValue(orco_yup[0], orco_yup[1], orco_yup[2]);
}
@@ -318,8 +317,8 @@ static void read_uvs(const CDStreamConfig &config,
const Alembic::AbcGeom::V2fArraySamplePtr &uvs,
const UInt32ArraySamplePtr &indices)
{
- MPoly *mpolys = config.mpoly;
- MLoop *mloops = config.mloop;
+ const Span<MPoly> polys = config.polys;
+ const Span<MLoop> loops = config.loops;
MLoopUV *mloopuvs = static_cast<MLoopUV *>(data);
unsigned int uv_index, loop_index, rev_loop_index;
@@ -327,13 +326,13 @@ static void read_uvs(const CDStreamConfig &config,
BLI_assert(uv_scope != ABC_UV_SCOPE_NONE);
const bool do_uvs_per_loop = (uv_scope == ABC_UV_SCOPE_LOOP);
- for (int i = 0; i < config.totpoly; i++) {
- MPoly &poly = mpolys[i];
+ for (const int i : polys.index_range()) {
+ const MPoly &poly = polys[i];
unsigned int rev_loop_offset = poly.loopstart + poly.totloop - 1;
for (int f = 0; f < poly.totloop; f++) {
rev_loop_index = rev_loop_offset - f;
- loop_index = do_uvs_per_loop ? poly.loopstart + f : mloops[rev_loop_index].v;
+ loop_index = do_uvs_per_loop ? poly.loopstart + f : loops[rev_loop_index].v;
uv_index = (*indices)[loop_index];
const Imath::V2f &uv = (*uvs)[uv_index];
@@ -385,7 +384,7 @@ static void read_custom_data_mcols(const std::string &iobject_full_name,
color_param.getIndexed(sample, iss);
is_facevarying = sample.getScope() == kFacevaryingScope &&
- config.totloop == sample.getIndices()->size();
+ config.loops.size() == sample.getIndices()->size();
c3f_ptr = sample.getVals();
indices = sample.getIndices();
@@ -398,7 +397,7 @@ static void read_custom_data_mcols(const std::string &iobject_full_name,
color_param.getIndexed(sample, iss);
is_facevarying = sample.getScope() == kFacevaryingScope &&
- config.totloop == sample.getIndices()->size();
+ config.loops.size() == sample.getIndices()->size();
c4f_ptr = sample.getVals();
indices = sample.getIndices();
@@ -414,8 +413,8 @@ static void read_custom_data_mcols(const std::string &iobject_full_name,
void *cd_data = config.add_customdata_cb(
config.mesh, prop_header.getName().c_str(), CD_PROP_BYTE_COLOR);
MCol *cfaces = static_cast<MCol *>(cd_data);
- MPoly *mpolys = config.mpoly;
- MLoop *mloops = config.mloop;
+ const Span<MPoly> polys = config.polys;
+ const Span<MLoop> loops = config.loops;
size_t face_index = 0;
size_t color_index;
@@ -427,10 +426,10 @@ static void read_custom_data_mcols(const std::string &iobject_full_name,
* is why we have to check for indices->size() > 0 */
bool use_dual_indexing = is_facevarying && indices->size() > 0;
- for (int i = 0; i < config.totpoly; i++) {
- MPoly *poly = &mpolys[i];
+ for (const int i : polys.index_range()) {
+ const MPoly *poly = &polys[i];
MCol *cface = &cfaces[poly->loopstart + poly->totloop];
- MLoop *mloop = &mloops[poly->loopstart + poly->totloop];
+ const MLoop *mloop = &loops[poly->loopstart + poly->totloop];
for (int j = 0; j < poly->totloop; j++, face_index++) {
cface--;
@@ -592,14 +591,14 @@ AbcUvScope get_uv_scope(const Alembic::AbcGeom::GeometryScope scope,
const CDStreamConfig &config,
const Alembic::AbcGeom::UInt32ArraySamplePtr &indices)
{
- if (scope == kFacevaryingScope && indices->size() == config.totloop) {
+ if (scope == kFacevaryingScope && indices->size() == config.loops.size()) {
return ABC_UV_SCOPE_LOOP;
}
/* kVaryingScope is sometimes used for vertex scopes as the values vary across the vertices. To
* be sure, one has to check the size of the data against the number of vertices, as it could
* also be a varying attribute across the faces (i.e. one value per face). */
- if ((ELEM(scope, kVaryingScope, kVertexScope)) && indices->size() == config.totvert) {
+ if ((ELEM(scope, kVaryingScope, kVertexScope)) && indices->size() == config.verts.size()) {
return ABC_UV_SCOPE_VERTEX;
}