Cleanup: Use attribute API to access UV maps in a few places
This commit is contained in:
@@ -1494,9 +1494,9 @@ struct DynamicPaintSetInitColorData {
|
||||
const DynamicPaintSurface *surface;
|
||||
|
||||
blender::Span<int> corner_verts;
|
||||
const float (*mloopuv)[2];
|
||||
blender::Span<blender::float2> mloopuv;
|
||||
blender::Span<int3> corner_tris;
|
||||
const MLoopCol *mloopcol;
|
||||
blender::Span<blender::ColorGeometry4b> mloopcol;
|
||||
ImagePool *pool;
|
||||
};
|
||||
|
||||
@@ -1511,7 +1511,7 @@ static void dynamic_paint_set_init_color_tex_to_vcol_cb(void *__restrict userdat
|
||||
|
||||
const blender::Span<int> corner_verts = data->corner_verts;
|
||||
const blender::Span<int3> corner_tris = data->corner_tris;
|
||||
const float(*mloopuv)[2] = data->mloopuv;
|
||||
const blender::Span<blender::float2> mloopuv = data->mloopuv;
|
||||
ImagePool *pool = data->pool;
|
||||
Tex *tex = data->surface->init_texture;
|
||||
|
||||
@@ -1544,7 +1544,7 @@ static void dynamic_paint_set_init_color_tex_to_imseq_cb(void *__restrict userda
|
||||
PaintPoint *pPoint = (PaintPoint *)sData->type_data;
|
||||
|
||||
const blender::Span<int3> corner_tris = data->corner_tris;
|
||||
const float(*mloopuv)[2] = data->mloopuv;
|
||||
const blender::Span<blender::float2> mloopuv = data->mloopuv;
|
||||
Tex *tex = data->surface->init_texture;
|
||||
ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
|
||||
const int samples = (data->surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
|
||||
@@ -1581,7 +1581,7 @@ static void dynamic_paint_set_init_color_vcol_to_imseq_cb(
|
||||
PaintPoint *pPoint = (PaintPoint *)sData->type_data;
|
||||
|
||||
const blender::Span<int3> corner_tris = data->corner_tris;
|
||||
const MLoopCol *mloopcol = data->mloopcol;
|
||||
const blender::Span<blender::ColorGeometry4b> mloopcol = data->mloopcol;
|
||||
ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
|
||||
const int samples = (data->surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
|
||||
|
||||
@@ -1602,9 +1602,11 @@ static void dynamic_paint_set_init_color_vcol_to_imseq_cb(
|
||||
|
||||
static void dynamicPaint_setInitialColor(const Scene * /*scene*/, DynamicPaintSurface *surface)
|
||||
{
|
||||
using namespace blender;
|
||||
PaintSurfaceData *sData = surface->data;
|
||||
PaintPoint *pPoint = (PaintPoint *)sData->type_data;
|
||||
Mesh *mesh = dynamicPaint_canvas_mesh_get(surface->canvas);
|
||||
const bke::AttributeAccessor attributes = mesh->attributes();
|
||||
|
||||
if (surface->type != MOD_DPAINT_SURFACE_T_PAINT) {
|
||||
return;
|
||||
@@ -1637,10 +1639,9 @@ static void dynamicPaint_setInitialColor(const Scene * /*scene*/, DynamicPaintSu
|
||||
/* get uv map */
|
||||
CustomData_validate_layer_name(
|
||||
&mesh->corner_data, CD_PROP_FLOAT2, surface->init_layername, uvname);
|
||||
const float(*mloopuv)[2] = static_cast<const float(*)[2]>(
|
||||
CustomData_get_layer_named(&mesh->corner_data, CD_PROP_FLOAT2, uvname));
|
||||
const VArraySpan mloopuv = *attributes.lookup<float2>(uvname, bke::AttrDomain::Corner);
|
||||
|
||||
if (!mloopuv) {
|
||||
if (mloopuv.is_empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1682,9 +1683,9 @@ static void dynamicPaint_setInitialColor(const Scene * /*scene*/, DynamicPaintSu
|
||||
/* For vertex surface, just copy colors from #MLoopCol. */
|
||||
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
|
||||
const blender::Span<int> corner_verts = mesh->corner_verts();
|
||||
const MLoopCol *col = static_cast<const MLoopCol *>(CustomData_get_layer_named(
|
||||
&mesh->corner_data, CD_PROP_BYTE_COLOR, surface->init_layername));
|
||||
if (!col) {
|
||||
const VArraySpan col = *attributes.lookup<ColorGeometry4b>(surface->init_layername,
|
||||
bke::AttrDomain::Corner);
|
||||
if (col.is_empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1694,9 +1695,9 @@ static void dynamicPaint_setInitialColor(const Scene * /*scene*/, DynamicPaintSu
|
||||
}
|
||||
else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
|
||||
const blender::Span<int3> corner_tris = mesh->corner_tris();
|
||||
const MLoopCol *col = static_cast<const MLoopCol *>(CustomData_get_layer_named(
|
||||
&mesh->corner_data, CD_PROP_BYTE_COLOR, surface->init_layername));
|
||||
if (!col) {
|
||||
const VArraySpan col = *attributes.lookup<ColorGeometry4b>(surface->init_layername,
|
||||
bke::AttrDomain::Corner);
|
||||
if (col.is_empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2204,7 +2205,7 @@ struct DynamicPaintCreateUVSurfaceData {
|
||||
Vec3f *tempWeights;
|
||||
|
||||
blender::Span<int3> corner_tris;
|
||||
const float (*mloopuv)[2];
|
||||
blender::Span<blender::float2> mloopuv;
|
||||
blender::Span<int> corner_verts;
|
||||
|
||||
const Bounds2D *faceBB;
|
||||
@@ -2223,7 +2224,7 @@ static void dynamic_paint_create_uv_surface_direct_cb(void *__restrict userdata,
|
||||
Vec3f *tempWeights = data->tempWeights;
|
||||
|
||||
const blender::Span<int3> corner_tris = data->corner_tris;
|
||||
const float(*mloopuv)[2] = data->mloopuv;
|
||||
const blender::Span<blender::float2> mloopuv = data->mloopuv;
|
||||
const blender::Span<int> corner_verts = data->corner_verts;
|
||||
|
||||
const Bounds2D *faceBB = data->faceBB;
|
||||
@@ -2320,7 +2321,7 @@ static void dynamic_paint_create_uv_surface_neighbor_cb(void *__restrict userdat
|
||||
Vec3f *tempWeights = data->tempWeights;
|
||||
|
||||
const blender::Span<int3> corner_tris = data->corner_tris;
|
||||
const float(*mloopuv)[2] = data->mloopuv;
|
||||
const blender::Span<blender::float2> mloopuv = data->mloopuv;
|
||||
const blender::Span<int> corner_verts = data->corner_verts;
|
||||
|
||||
uint32_t *active_points = data->active_points;
|
||||
@@ -2407,7 +2408,7 @@ static void dynamic_paint_create_uv_surface_neighbor_cb(void *__restrict userdat
|
||||
#undef JITTER_SAMPLES
|
||||
|
||||
static float dist_squared_to_corner_tris_uv_edges(const blender::Span<int3> corner_tris,
|
||||
const float (*mloopuv)[2],
|
||||
const blender::Span<blender::float2> mloopuv,
|
||||
int tri_index,
|
||||
const float point[2])
|
||||
{
|
||||
@@ -2529,7 +2530,7 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
|
||||
{
|
||||
const blender::Span<int> corner_verts = data->corner_verts;
|
||||
const blender::Span<int3> corner_tris = data->corner_tris;
|
||||
const float(*mloopuv)[2] = data->mloopuv;
|
||||
const blender::Span<blender::float2> mloopuv = data->mloopuv;
|
||||
|
||||
const int3 loop_idx = corner_tris[tri_index];
|
||||
|
||||
@@ -2812,6 +2813,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
|
||||
float *progress,
|
||||
bool *do_update)
|
||||
{
|
||||
using namespace blender;
|
||||
/* Anti-alias jitter point relative coords. */
|
||||
const int aa_samples = (surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
|
||||
char uvname[MAX_CUSTOMDATA_LAYER_NAME];
|
||||
@@ -2824,7 +2826,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
|
||||
|
||||
PaintUVPoint *tempPoints = nullptr;
|
||||
Vec3f *tempWeights = nullptr;
|
||||
const float(*mloopuv)[2] = nullptr;
|
||||
VArraySpan<float2> mloopuv;
|
||||
|
||||
Bounds2D *faceBB = nullptr;
|
||||
int *final_index;
|
||||
@@ -2846,12 +2848,12 @@ int dynamicPaint_createUVSurface(Scene *scene,
|
||||
if (CustomData_has_layer(&mesh->corner_data, CD_PROP_FLOAT2)) {
|
||||
CustomData_validate_layer_name(
|
||||
&mesh->corner_data, CD_PROP_FLOAT2, surface->uvlayer_name, uvname);
|
||||
mloopuv = static_cast<const float(*)[2]>(
|
||||
CustomData_get_layer_named(&mesh->corner_data, CD_PROP_FLOAT2, uvname));
|
||||
const bke::AttributeAccessor attributes = mesh->attributes();
|
||||
mloopuv = *attributes.lookup<float2>(uvname, bke::AttrDomain::Corner);
|
||||
}
|
||||
|
||||
/* Check for validity */
|
||||
if (!mloopuv) {
|
||||
if (mloopuv.is_empty()) {
|
||||
return setError(canvas, N_("No UV data on canvas"));
|
||||
}
|
||||
if (surface->image_resolution < 16 || surface->image_resolution > 8192) {
|
||||
|
||||
@@ -1794,7 +1794,7 @@ static void sample_mesh(FluidFlowSettings *ffs,
|
||||
const blender::Span<blender::float3> vert_normals,
|
||||
const int *corner_verts,
|
||||
const blender::int3 *corner_tris,
|
||||
const float (*mloopuv)[2],
|
||||
blender::Span<blender::float2> mloopuv,
|
||||
float *influence_map,
|
||||
float *velocity_map,
|
||||
int index,
|
||||
@@ -1915,7 +1915,7 @@ static void sample_mesh(FluidFlowSettings *ffs,
|
||||
tex_co[2] = ((z - flow_center[2]) / base_res[2] - ffs->texture_offset) /
|
||||
ffs->texture_size;
|
||||
}
|
||||
else if (mloopuv) {
|
||||
else if (!mloopuv.is_empty()) {
|
||||
const float *uv[3];
|
||||
uv[0] = mloopuv[corner_tris[tri_i][0]];
|
||||
uv[1] = mloopuv[corner_tris[tri_i][1]];
|
||||
@@ -1992,7 +1992,7 @@ struct EmitFromDMData {
|
||||
blender::Span<blender::float3> vert_normals;
|
||||
blender::Span<int> corner_verts;
|
||||
blender::Span<blender::int3> corner_tris;
|
||||
const float (*mloopuv)[2];
|
||||
blender::Span<blender::float2> mloopuv;
|
||||
const MDeformVert *dvert;
|
||||
int defgrp_index;
|
||||
|
||||
@@ -2077,8 +2077,9 @@ static void emit_from_mesh(
|
||||
const blender::Span<blender::int3> corner_tris = mesh->corner_tris();
|
||||
const int numverts = mesh->verts_num;
|
||||
const MDeformVert *dvert = mesh->deform_verts().data();
|
||||
const float(*mloopuv)[2] = static_cast<const float(*)[2]>(
|
||||
CustomData_get_layer_named(&mesh->corner_data, CD_PROP_FLOAT2, ffs->uvlayer_name));
|
||||
const blender::bke::AttributeAccessor attributes = mesh->attributes();
|
||||
const blender::VArraySpan uv_map = *attributes.lookup<blender::float2>(
|
||||
ffs->uvlayer_name, blender::bke::AttrDomain::Corner);
|
||||
|
||||
if (ffs->flags & FLUID_FLOW_INITVELOCITY) {
|
||||
vert_vel = MEM_calloc_arrayN<float>(3 * size_t(numverts), "manta_flow_velocity");
|
||||
@@ -2145,7 +2146,7 @@ static void emit_from_mesh(
|
||||
data.vert_normals = mesh->vert_normals();
|
||||
data.corner_verts = corner_verts;
|
||||
data.corner_tris = corner_tris;
|
||||
data.mloopuv = mloopuv;
|
||||
data.mloopuv = uv_map;
|
||||
data.dvert = dvert;
|
||||
data.defgrp_index = defgrp_index;
|
||||
data.tree = &tree_data;
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "DNA_screen_types.h"
|
||||
|
||||
#include "BKE_action.hh" /* BKE_pose_channel_find_name */
|
||||
#include "BKE_attribute.hh"
|
||||
#include "BKE_customdata.hh"
|
||||
#include "BKE_deform.hh"
|
||||
#include "BKE_lib_query.hh"
|
||||
@@ -82,7 +83,7 @@ static void matrix_from_obj_pchan(float mat[4][4], Object *ob, const char *bonen
|
||||
struct UVWarpData {
|
||||
blender::OffsetIndices<int> faces;
|
||||
blender::Span<int> corner_verts;
|
||||
float (*mloopuv)[2];
|
||||
blender::MutableSpan<blender::float2> mloopuv;
|
||||
|
||||
const MDeformVert *dvert;
|
||||
int defgrp_index;
|
||||
@@ -99,7 +100,7 @@ static void uv_warp_compute(void *__restrict userdata,
|
||||
const blender::IndexRange face = data->faces[i];
|
||||
const blender::Span<int> face_verts = data->corner_verts.slice(face);
|
||||
|
||||
float(*mluv)[2] = &data->mloopuv[face.start()];
|
||||
blender::float2 *mluv = &data->mloopuv[face.start()];
|
||||
|
||||
const MDeformVert *dvert = data->dvert;
|
||||
const int defgrp_index = data->defgrp_index;
|
||||
@@ -195,14 +196,16 @@ static Mesh *modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh
|
||||
const blender::OffsetIndices faces = mesh->faces();
|
||||
const blender::Span<int> corner_verts = mesh->corner_verts();
|
||||
|
||||
float(*mloopuv)[2] = static_cast<float(*)[2]>(CustomData_get_layer_named_for_write(
|
||||
&mesh->corner_data, CD_PROP_FLOAT2, uvname, corner_verts.size()));
|
||||
blender::bke::MutableAttributeAccessor attributes = mesh->attributes_for_write();
|
||||
blender::bke::SpanAttributeWriter mloopuv =
|
||||
attributes.lookup_or_add_for_write_span<blender::float2>(uvname,
|
||||
blender::bke::AttrDomain::Corner);
|
||||
MOD_get_vgroup(ctx->object, mesh, umd->vgroup_name, &dvert, &defgrp_index);
|
||||
|
||||
UVWarpData data{};
|
||||
data.faces = faces;
|
||||
data.corner_verts = corner_verts;
|
||||
data.mloopuv = mloopuv;
|
||||
data.mloopuv = mloopuv.span;
|
||||
data.dvert = dvert;
|
||||
data.defgrp_index = defgrp_index;
|
||||
data.warp_mat = warp_mat;
|
||||
@@ -215,6 +218,8 @@ static Mesh *modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh
|
||||
|
||||
mesh->runtime->is_original_bmesh = false;
|
||||
|
||||
mloopuv.finish();
|
||||
|
||||
return mesh;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user