Refactor: Make CD_TYPE_AS_MASK into a function with typed argument
So that misuse of this will result in build errors instead of bugs (this change found three places like that).
This commit is contained in:
@@ -88,7 +88,10 @@ enum eCDAllocType {
|
||||
CD_CONSTRUCT = 5,
|
||||
};
|
||||
|
||||
#define CD_TYPE_AS_MASK(_type) (eCustomDataMask)((eCustomDataMask)1 << (eCustomDataMask)(_type))
|
||||
inline eCustomDataMask CD_TYPE_AS_MASK(eCustomDataType type)
|
||||
{
|
||||
return eCustomDataMask(1) << eCustomDataMask(type);
|
||||
}
|
||||
|
||||
void customData_mask_layers__print(const CustomData_MeshMasks *mask);
|
||||
|
||||
|
||||
@@ -681,7 +681,7 @@ const CustomDataLayer *BKE_attribute_search(const AttributeOwner &owner,
|
||||
|
||||
for (int i = 0; i < customdata->totlayer; i++) {
|
||||
CustomDataLayer *layer = &customdata->layers[i];
|
||||
if ((CD_TYPE_AS_MASK(layer->type) & type_mask) && layer->name == name) {
|
||||
if ((CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & type_mask) && layer->name == name) {
|
||||
return layer;
|
||||
}
|
||||
}
|
||||
@@ -833,7 +833,7 @@ std::optional<blender::StringRefNull> BKE_attributes_active_name_get(AttributeOw
|
||||
}
|
||||
for (int i = 0; i < customdata->totlayer; i++) {
|
||||
CustomDataLayer *layer = &customdata->layers[i];
|
||||
if (CD_MASK_PROP_ALL & CD_TYPE_AS_MASK(layer->type)) {
|
||||
if (CD_MASK_PROP_ALL & CD_TYPE_AS_MASK(eCustomDataType(layer->type))) {
|
||||
if (index == active_index) {
|
||||
if (blender::bke::allow_procedural_attribute_access(layer->name)) {
|
||||
return layer->name;
|
||||
@@ -932,7 +932,7 @@ CustomDataLayer *BKE_attribute_from_index(AttributeOwner &owner,
|
||||
}
|
||||
|
||||
for (int i = 0; i < customdata->totlayer; i++) {
|
||||
if (!(layer_mask & CD_TYPE_AS_MASK(customdata->layers[i].type)) ||
|
||||
if (!(layer_mask & CD_TYPE_AS_MASK(eCustomDataType(customdata->layers[i].type))) ||
|
||||
(customdata->layers[i].flag & CD_FLAG_TEMPORARY))
|
||||
{
|
||||
continue;
|
||||
@@ -970,7 +970,7 @@ int BKE_attribute_to_index(const AttributeOwner &owner,
|
||||
|
||||
for (int i = 0; i < customdata->totlayer; i++) {
|
||||
const CustomDataLayer *layer_iter = customdata->layers + i;
|
||||
if (!(layer_mask & CD_TYPE_AS_MASK(layer_iter->type)) ||
|
||||
if (!(layer_mask & CD_TYPE_AS_MASK(eCustomDataType(layer_iter->type))) ||
|
||||
(layer_iter->flag & CD_FLAG_TEMPORARY))
|
||||
{
|
||||
continue;
|
||||
|
||||
@@ -2247,35 +2247,35 @@ void customData_mask_layers__print(const CustomData_MeshMasks *mask)
|
||||
{
|
||||
printf("verts mask=0x%" PRIx64 ":\n", mask->vmask);
|
||||
for (int i = 0; i < CD_NUMTYPES; i++) {
|
||||
if (mask->vmask & CD_TYPE_AS_MASK(i)) {
|
||||
if (mask->vmask & CD_TYPE_AS_MASK(eCustomDataType(i))) {
|
||||
printf(" %s\n", layerType_getName(eCustomDataType(i)));
|
||||
}
|
||||
}
|
||||
|
||||
printf("edges mask=0x%" PRIx64 ":\n", mask->emask);
|
||||
for (int i = 0; i < CD_NUMTYPES; i++) {
|
||||
if (mask->emask & CD_TYPE_AS_MASK(i)) {
|
||||
if (mask->emask & CD_TYPE_AS_MASK(eCustomDataType(i))) {
|
||||
printf(" %s\n", layerType_getName(eCustomDataType(i)));
|
||||
}
|
||||
}
|
||||
|
||||
printf("faces mask=0x%" PRIx64 ":\n", mask->fmask);
|
||||
for (int i = 0; i < CD_NUMTYPES; i++) {
|
||||
if (mask->fmask & CD_TYPE_AS_MASK(i)) {
|
||||
if (mask->fmask & CD_TYPE_AS_MASK(eCustomDataType(i))) {
|
||||
printf(" %s\n", layerType_getName(eCustomDataType(i)));
|
||||
}
|
||||
}
|
||||
|
||||
printf("loops mask=0x%" PRIx64 ":\n", mask->lmask);
|
||||
for (int i = 0; i < CD_NUMTYPES; i++) {
|
||||
if (mask->lmask & CD_TYPE_AS_MASK(i)) {
|
||||
if (mask->lmask & CD_TYPE_AS_MASK(eCustomDataType(i))) {
|
||||
printf(" %s\n", layerType_getName(eCustomDataType(i)));
|
||||
}
|
||||
}
|
||||
|
||||
printf("polys mask=0x%" PRIx64 ":\n", mask->pmask);
|
||||
for (int i = 0; i < CD_NUMTYPES; i++) {
|
||||
if (mask->pmask & CD_TYPE_AS_MASK(i)) {
|
||||
if (mask->pmask & CD_TYPE_AS_MASK(eCustomDataType(i))) {
|
||||
printf(" %s\n", layerType_getName(eCustomDataType(i)));
|
||||
}
|
||||
}
|
||||
@@ -2465,7 +2465,7 @@ CustomData CustomData_shallow_copy_remove_non_bmesh_attributes(const CustomData
|
||||
if (BM_attribute_stored_in_bmesh_builtin(layer.name)) {
|
||||
continue;
|
||||
}
|
||||
if (!(mask & CD_TYPE_AS_MASK(layer.type))) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(eCustomDataType(layer.type)))) {
|
||||
continue;
|
||||
}
|
||||
dst_layers.append(layer);
|
||||
@@ -3296,7 +3296,7 @@ int CustomData_number_of_layers_typemask(const CustomData *data, const eCustomDa
|
||||
int number = 0;
|
||||
|
||||
for (int i = 0; i < data->totlayer; i++) {
|
||||
if (mask & CD_TYPE_AS_MASK(data->layers[i].type)) {
|
||||
if (mask & CD_TYPE_AS_MASK(eCustomDataType(data->layers[i].type))) {
|
||||
number++;
|
||||
}
|
||||
}
|
||||
@@ -3307,7 +3307,7 @@ int CustomData_number_of_layers_typemask(const CustomData *data, const eCustomDa
|
||||
void CustomData_set_only_copy(const CustomData *data, const eCustomDataMask mask)
|
||||
{
|
||||
for (int i = 0; i < data->totlayer; i++) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(data->layers[i].type))) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(eCustomDataType(data->layers[i].type)))) {
|
||||
data->layers[i].flag |= CD_FLAG_NOCOPY;
|
||||
}
|
||||
}
|
||||
@@ -4333,7 +4333,9 @@ static bool cd_layer_find_dupe(CustomData *data,
|
||||
CustomDataLayer *layer = &data->layers[i];
|
||||
|
||||
if (CD_TYPE_AS_MASK(type) & CD_MASK_PROP_ALL) {
|
||||
if ((CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) && layer->name == name) {
|
||||
if ((CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_PROP_ALL) &&
|
||||
layer->name == name)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -4537,7 +4539,7 @@ void CustomData_external_reload(CustomData *data, ID * /*id*/, eCustomDataMask m
|
||||
CustomDataLayer *layer = &data->layers[i];
|
||||
const LayerTypeInfo *typeInfo = layerType_getInfo(eCustomDataType(layer->type));
|
||||
|
||||
if (!(mask & CD_TYPE_AS_MASK(layer->type))) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(eCustomDataType(layer->type)))) {
|
||||
/* pass */
|
||||
}
|
||||
else if ((layer->flag & CD_FLAG_EXTERNAL) && (layer->flag & CD_FLAG_IN_MEMORY)) {
|
||||
@@ -4564,7 +4566,7 @@ void CustomData_external_read(CustomData *data, ID *id, eCustomDataMask mask, co
|
||||
layer = &data->layers[i];
|
||||
const LayerTypeInfo *typeInfo = layerType_getInfo(eCustomDataType(layer->type));
|
||||
|
||||
if (!(mask & CD_TYPE_AS_MASK(layer->type))) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(eCustomDataType(layer->type)))) {
|
||||
/* pass */
|
||||
}
|
||||
else if (layer->flag & CD_FLAG_IN_MEMORY) {
|
||||
@@ -4595,7 +4597,7 @@ void CustomData_external_read(CustomData *data, ID *id, eCustomDataMask mask, co
|
||||
layer = &data->layers[i];
|
||||
const LayerTypeInfo *typeInfo = layerType_getInfo(eCustomDataType(layer->type));
|
||||
|
||||
if (!(mask & CD_TYPE_AS_MASK(layer->type))) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(eCustomDataType(layer->type)))) {
|
||||
/* pass */
|
||||
}
|
||||
else if (layer->flag & CD_FLAG_IN_MEMORY) {
|
||||
@@ -4641,7 +4643,7 @@ void CustomData_external_write(
|
||||
CustomDataLayer *layer = &data->layers[i];
|
||||
const LayerTypeInfo *typeInfo = layerType_getInfo(eCustomDataType(layer->type));
|
||||
|
||||
if (!(mask & CD_TYPE_AS_MASK(layer->type))) {
|
||||
if (!(mask & CD_TYPE_AS_MASK(eCustomDataType(layer->type)))) {
|
||||
/* pass */
|
||||
}
|
||||
else if ((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->write) {
|
||||
@@ -4776,7 +4778,7 @@ void CustomData_external_remove(CustomData *data,
|
||||
|
||||
if (layer->flag & CD_FLAG_EXTERNAL) {
|
||||
if (!(layer->flag & CD_FLAG_IN_MEMORY)) {
|
||||
CustomData_external_read(data, id, CD_TYPE_AS_MASK(layer->type), totelem);
|
||||
CustomData_external_read(data, id, CD_TYPE_AS_MASK(eCustomDataType(layer->type)), totelem);
|
||||
}
|
||||
|
||||
layer->flag &= ~CD_FLAG_EXTERNAL;
|
||||
|
||||
@@ -968,7 +968,8 @@ static bool geometry_color_attribute_convert_poll(bContext *C)
|
||||
return false;
|
||||
}
|
||||
if (!(ATTR_DOMAIN_AS_MASK(meta_data->domain) & ATTR_DOMAIN_MASK_COLOR) ||
|
||||
!(CD_TYPE_AS_MASK(meta_data->data_type) & CD_MASK_COLOR_ALL))
|
||||
!(CD_TYPE_AS_MASK(*bke::attr_type_to_custom_data_type(meta_data->data_type)) &
|
||||
CD_MASK_COLOR_ALL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ static bool dyntopo_supports_layer(const CustomDataLayer &layer)
|
||||
if (layer.type == CD_PROP_FLOAT && STREQ(layer.name, ".sculpt_mask")) {
|
||||
return true;
|
||||
}
|
||||
if (CD_TYPE_AS_MASK(layer.type) & CD_MASK_PROP_ALL) {
|
||||
if (CD_TYPE_AS_MASK(eCustomDataType(layer.type)) & CD_MASK_PROP_ALL) {
|
||||
return BM_attribute_stored_in_bmesh_builtin(layer.name);
|
||||
}
|
||||
return ELEM(layer.type, CD_ORIGINDEX);
|
||||
|
||||
@@ -533,7 +533,7 @@ static void rna_Attribute_data_begin(CollectionPropertyIterator *iter, PointerRN
|
||||
}
|
||||
|
||||
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
||||
if (!(CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL)) {
|
||||
if (!(CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_PROP_ALL)) {
|
||||
iter->valid = false;
|
||||
}
|
||||
|
||||
@@ -726,7 +726,7 @@ static void rna_AttributeGroupID_remove(ID *id, ReportList *reports, PointerRNA
|
||||
static bool rna_Attributes_layer_skip(CollectionPropertyIterator * /*iter*/, void *data)
|
||||
{
|
||||
CustomDataLayer *layer = (CustomDataLayer *)data;
|
||||
return !(CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL);
|
||||
return !(CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_PROP_ALL);
|
||||
}
|
||||
|
||||
static bool rna_Attributes_noncolor_layer_skip(CollectionPropertyIterator *iter, void *data)
|
||||
@@ -741,7 +741,8 @@ static bool rna_Attributes_noncolor_layer_skip(CollectionPropertyIterator *iter,
|
||||
return true;
|
||||
}
|
||||
|
||||
return !(CD_TYPE_AS_MASK(layer->type) & CD_MASK_COLOR_ALL) || (layer->flag & CD_FLAG_TEMPORARY);
|
||||
return !(CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_COLOR_ALL) ||
|
||||
(layer->flag & CD_FLAG_TEMPORARY);
|
||||
}
|
||||
|
||||
/* Attributes are spread over multiple domains in separate CustomData, we use repeated
|
||||
@@ -855,7 +856,9 @@ int rna_AttributeGroup_color_length(PointerRNA *ptr)
|
||||
if (!(ATTR_DOMAIN_AS_MASK(attr.domain()) & ATTR_DOMAIN_MASK_COLOR)) {
|
||||
return;
|
||||
}
|
||||
if (!(CD_TYPE_AS_MASK(attr.data_type()) & CD_MASK_COLOR_ALL)) {
|
||||
if (!(CD_TYPE_AS_MASK(*bke::attr_type_to_custom_data_type(attr.data_type())) &
|
||||
CD_MASK_COLOR_ALL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
count++;
|
||||
|
||||
@@ -114,7 +114,7 @@ static void rna_MeshVertexLayer_name_set(PointerRNA *ptr, const char *value)
|
||||
{
|
||||
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
||||
|
||||
if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) {
|
||||
if (CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_PROP_ALL) {
|
||||
AttributeOwner owner = AttributeOwner::from_id(ptr->owner_id);
|
||||
BKE_attribute_rename(owner, layer->name, value, nullptr);
|
||||
}
|
||||
@@ -127,7 +127,7 @@ static void rna_MeshEdgeLayer_name_set(PointerRNA *ptr, const char *value)
|
||||
{
|
||||
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
||||
|
||||
if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) {
|
||||
if (CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_PROP_ALL) {
|
||||
AttributeOwner owner = AttributeOwner::from_id(ptr->owner_id);
|
||||
BKE_attribute_rename(owner, layer->name, value, nullptr);
|
||||
}
|
||||
@@ -140,7 +140,7 @@ static void rna_MeshLoopLayer_name_set(PointerRNA *ptr, const char *value)
|
||||
{
|
||||
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
||||
|
||||
if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) {
|
||||
if (CD_TYPE_AS_MASK(eCustomDataType(layer->type)) & CD_MASK_PROP_ALL) {
|
||||
AttributeOwner owner = AttributeOwner::from_id(ptr->owner_id);
|
||||
BKE_attribute_rename(owner, layer->name, value, nullptr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user