25 const void *data = HdGetValueData(value);
26 size_t size = value.GetArraySize();
28 const HdType valueType = HdGetValueTupleType(value).type;
30 TypeDesc attrType = CCL_NS::TypeUnknown;
33 attrType = CCL_NS::TypeFloat;
34 size *=
sizeof(
float);
37 attrType = CCL_NS::TypeFloat2;
39 static_assert(
sizeof(GfVec2f) ==
sizeof(
float2));
41 case HdTypeFloatVec3: {
42 attrType = CCL_NS::TypeVector;
45 const auto &valueData = value.Get<VtVec3fArray>();
46 VtArray<float3> valueConverted;
47 valueConverted.reserve(valueData.size());
48 for (
const GfVec3f &vec : valueData) {
49 valueConverted.push_back(
make_float3(vec[0], vec[1], vec[2]));
51 data = valueConverted.data();
52 value = std::move(valueConverted);
56 attrType = CCL_NS::TypeFloat4;
57 size *=
sizeof(float4);
58 static_assert(
sizeof(GfVec4f) ==
sizeof(float4));
61 TF_WARN(
"Unsupported attribute type %d",
static_cast<int>(valueType));
65 Attribute *
const attr = attributes.
add(name, attrType, elem);
68 assert(size == attr->
buffer.size());
69 std::memcpy(attr->
data(), data, size);
HDCYCLES_NAMESPACE_OPEN_SCOPE void ApplyPrimvars(AttributeSet &attributes, const ustring &name, VtValue value, AttributeElement elem, AttributeStandard std)