diff --git a/source/blender/draw/intern/draw_attributes.cc b/source/blender/draw/intern/draw_attributes.cc index 553832b0bf6..e1d53844f5a 100644 --- a/source/blender/draw/intern/draw_attributes.cc +++ b/source/blender/draw/intern/draw_attributes.cc @@ -4,20 +4,15 @@ #include "draw_attributes.hh" /* Return true if the given DRW_AttributeRequest is already in the requests. */ -static bool drw_attributes_has_request(const DRW_Attributes *requests, DRW_AttributeRequest req) +static bool drw_attributes_has_request(const DRW_Attributes *requests, + const DRW_AttributeRequest &req) { for (int i = 0; i < requests->num_requests; i++) { - const DRW_AttributeRequest src_req = requests->requests[i]; - if (src_req.domain != req.domain) { - continue; + const DRW_AttributeRequest &src_req = requests->requests[i]; + if (src_req.domain == req.domain && src_req.layer_index == req.layer_index && + src_req.cd_type == req.cd_type) { + return true; } - if (src_req.layer_index != req.layer_index) { - continue; - } - if (src_req.cd_type != req.cd_type) { - continue; - } - return true; } return false; } @@ -61,14 +56,15 @@ bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b) return true; } -DRW_AttributeRequest *drw_attributes_add_request(DRW_Attributes *attrs, - const char *name, - const eCustomDataType type, - const int layer_index, - const eAttrDomain domain) +void drw_attributes_add_request(DRW_Attributes *attrs, + const char *name, + const eCustomDataType type, + const int layer_index, + const eAttrDomain domain) { - if (attrs->num_requests >= GPU_MAX_ATTR) { - return nullptr; + if (attrs->num_requests >= GPU_MAX_ATTR || + drw_attributes_has_request(attrs, {type, layer_index, domain})) { + return; } DRW_AttributeRequest *req = &attrs->requests[attrs->num_requests]; @@ -77,7 +73,6 @@ DRW_AttributeRequest *drw_attributes_add_request(DRW_Attributes *attrs, req->layer_index = layer_index; req->domain = domain; attrs->num_requests += 1; - return req; } bool drw_custom_data_match_attribute(const CustomData *custom_data, diff --git a/source/blender/draw/intern/draw_attributes.hh b/source/blender/draw/intern/draw_attributes.hh index 1449f7b3b8a..d5de4e1641b 100644 --- a/source/blender/draw/intern/draw_attributes.hh +++ b/source/blender/draw/intern/draw_attributes.hh @@ -60,11 +60,11 @@ void drw_attributes_merge(DRW_Attributes *dst, /* Return true if all requests in b are in a. */ bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b); -DRW_AttributeRequest *drw_attributes_add_request(DRW_Attributes *attrs, - const char *name, - eCustomDataType data_type, - int layer_index, - eAttrDomain domain); +void drw_attributes_add_request(DRW_Attributes *attrs, + const char *name, + eCustomDataType data_type, + int layer_index, + eAttrDomain domain); bool drw_custom_data_match_attribute(const CustomData *custom_data, const char *name,