Merge topic 'anari_attribute_names'
14deacbdd add attribute names via USD extension Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Kenneth Moreland <morelandkd@ornl.gov> Merge-request: !3205
This commit is contained in:
commit
3b598ff884
@ -80,6 +80,20 @@ static PointsFieldArrays UnpackFields(FieldSet fields)
|
||||
retval.Field3 = makeFieldArray(fields[2], retval.NumberOfField3Components);
|
||||
retval.Field4 = makeFieldArray(fields[3], retval.NumberOfField4Components);
|
||||
|
||||
auto isFieldEmpty = [](const vtkm::cont::Field& f) -> bool {
|
||||
return f.GetNumberOfValues() == 0 || f.GetData().GetNumberOfComponentsFlat() != 1 ||
|
||||
!f.GetData().CanConvert<AttributeHandleT>();
|
||||
};
|
||||
|
||||
if (!isFieldEmpty(fields[0]))
|
||||
retval.Field1Name = fields[0].GetName();
|
||||
if (!isFieldEmpty(fields[1]))
|
||||
retval.Field2Name = fields[1].GetName();
|
||||
if (!isFieldEmpty(fields[2]))
|
||||
retval.Field3Name = fields[2].GetName();
|
||||
if (!isFieldEmpty(fields[3]))
|
||||
retval.Field4Name = fields[3].GetName();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -300,6 +314,11 @@ void ANARIMapperPoints::ConstructArrays(bool regenerate)
|
||||
this->Handles->Parameters.Vertex.Attribute[3] =
|
||||
createANARIArray(d, fieldArrays.Field4, fieldArrays.Token);
|
||||
|
||||
this->Handles->Parameters.Vertex.AttributeName[0] = fieldArrays.Field1Name;
|
||||
this->Handles->Parameters.Vertex.AttributeName[1] = fieldArrays.Field2Name;
|
||||
this->Handles->Parameters.Vertex.AttributeName[2] = fieldArrays.Field3Name;
|
||||
this->Handles->Parameters.Vertex.AttributeName[3] = fieldArrays.Field4Name;
|
||||
|
||||
this->UpdateGeometry();
|
||||
this->UpdateMaterial();
|
||||
|
||||
@ -323,6 +342,10 @@ void ANARIMapperPoints::UpdateGeometry()
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "vertex.attribute1");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "vertex.attribute2");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "vertex.attribute3");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute0.name");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute1.name");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute2.name");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute3.name");
|
||||
|
||||
anari_cpp::setParameter(d, this->Handles->Geometry, "name", this->MakeObjectName("geometry"));
|
||||
|
||||
@ -334,6 +357,8 @@ void ANARIMapperPoints::UpdateGeometry()
|
||||
d, this->Handles->Geometry, "vertex.radius", this->Handles->Parameters.Vertex.Radius);
|
||||
if (this->GetMapFieldAsAttribute())
|
||||
{
|
||||
// Attributes //
|
||||
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"vertex.attribute0",
|
||||
@ -350,6 +375,37 @@ void ANARIMapperPoints::UpdateGeometry()
|
||||
this->Handles->Geometry,
|
||||
"vertex.attribute3",
|
||||
this->Handles->Parameters.Vertex.Attribute[3]);
|
||||
|
||||
// Attribute names for USD //
|
||||
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[0].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute0.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[0]);
|
||||
}
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[1].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute1.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[1]);
|
||||
}
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[2].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute2.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[2]);
|
||||
}
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[3].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute3.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@ struct PointsParameters
|
||||
anari_cpp::Array1D Position{ nullptr };
|
||||
anari_cpp::Array1D Radius{ nullptr };
|
||||
std::array<anari_cpp::Array1D, 4> Attribute;
|
||||
std::array<std::string, 4> AttributeName;
|
||||
} Vertex{};
|
||||
|
||||
unsigned int NumPrimitives{ 0 };
|
||||
@ -50,12 +51,16 @@ struct PointsFieldArrays
|
||||
{
|
||||
vtkm::cont::ArrayHandleRuntimeVec<vtkm::Float32> Field1;
|
||||
int NumberOfField1Components{ 1 };
|
||||
std::string Field1Name;
|
||||
vtkm::cont::ArrayHandleRuntimeVec<vtkm::Float32> Field2;
|
||||
int NumberOfField2Components{ 1 };
|
||||
std::string Field2Name;
|
||||
vtkm::cont::ArrayHandleRuntimeVec<vtkm::Float32> Field3;
|
||||
int NumberOfField3Components{ 1 };
|
||||
std::string Field3Name;
|
||||
vtkm::cont::ArrayHandleRuntimeVec<vtkm::Float32> Field4;
|
||||
int NumberOfField4Components{ 1 };
|
||||
std::string Field4Name;
|
||||
std::shared_ptr<vtkm::cont::Token> Token{ new vtkm::cont::Token };
|
||||
};
|
||||
|
||||
|
@ -214,18 +214,22 @@ static TriangleFieldArrays UnpackFields(vtkm::cont::ArrayHandle<vtkm::Id4> tris,
|
||||
if (!emptyField1)
|
||||
{
|
||||
retval.Field1.Allocate(numTris * 3);
|
||||
retval.Field1Name = fields[0].GetName();
|
||||
}
|
||||
if (!emptyField2)
|
||||
{
|
||||
retval.Field2.Allocate(numTris * 3);
|
||||
retval.Field2Name = fields[1].GetName();
|
||||
}
|
||||
if (!emptyField3)
|
||||
{
|
||||
retval.Field3.Allocate(numTris * 3);
|
||||
retval.Field3Name = fields[2].GetName();
|
||||
}
|
||||
if (!emptyField4)
|
||||
{
|
||||
retval.Field4.Allocate(numTris * 3);
|
||||
retval.Field4Name = fields[3].GetName();
|
||||
}
|
||||
|
||||
ExtractTriangleFields fieldsWorklet(emptyField1,
|
||||
@ -459,24 +463,28 @@ void ANARIMapperTriangles::ConstructArrays(bool regenerate)
|
||||
auto* a = (float*)fieldArrays.Field1.GetBuffers()[0].ReadPointerHost(*fieldArrays.Token);
|
||||
this->Handles->Parameters.Vertex.Attribute[0] =
|
||||
anari_cpp::newArray1D(d, a, NoopANARIDeleter, nullptr, numVerts);
|
||||
this->Handles->Parameters.Vertex.AttributeName[0] = fieldArrays.Field1Name;
|
||||
}
|
||||
if (fieldArrays.Field2.GetNumberOfValues() != 0)
|
||||
{
|
||||
auto* a = (float*)fieldArrays.Field2.GetBuffers()[0].ReadPointerHost(*fieldArrays.Token);
|
||||
this->Handles->Parameters.Vertex.Attribute[1] =
|
||||
anari_cpp::newArray1D(d, a, NoopANARIDeleter, nullptr, numVerts);
|
||||
this->Handles->Parameters.Vertex.AttributeName[1] = fieldArrays.Field2Name;
|
||||
}
|
||||
if (fieldArrays.Field3.GetNumberOfValues() != 0)
|
||||
{
|
||||
auto* a = (float*)fieldArrays.Field3.GetBuffers()[0].ReadPointerHost(*fieldArrays.Token);
|
||||
this->Handles->Parameters.Vertex.Attribute[2] =
|
||||
anari_cpp::newArray1D(d, a, NoopANARIDeleter, nullptr, numVerts);
|
||||
this->Handles->Parameters.Vertex.AttributeName[2] = fieldArrays.Field3Name;
|
||||
}
|
||||
if (fieldArrays.Field4.GetNumberOfValues() != 0)
|
||||
{
|
||||
auto* a = (float*)fieldArrays.Field4.GetBuffers()[0].ReadPointerHost(*fieldArrays.Token);
|
||||
this->Handles->Parameters.Vertex.Attribute[3] =
|
||||
anari_cpp::newArray1D(d, a, NoopANARIDeleter, nullptr, numVerts);
|
||||
this->Handles->Parameters.Vertex.AttributeName[3] = fieldArrays.Field4Name;
|
||||
}
|
||||
if (this->CalculateNormals)
|
||||
{
|
||||
@ -519,6 +527,10 @@ void ANARIMapperTriangles::UpdateGeometry()
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "vertex.attribute3");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "vertex.normal");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "primitive.index");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute0.name");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute1.name");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute2.name");
|
||||
anari_cpp::unsetParameter(d, this->Handles->Geometry, "usd::attribute3.name");
|
||||
|
||||
anari_cpp::setParameter(d, this->Handles->Geometry, "name", this->MakeObjectName("geometry"));
|
||||
|
||||
@ -528,6 +540,8 @@ void ANARIMapperTriangles::UpdateGeometry()
|
||||
d, this->Handles->Geometry, "vertex.position", this->Handles->Parameters.Vertex.Position);
|
||||
if (this->GetMapFieldAsAttribute())
|
||||
{
|
||||
// Attributes //
|
||||
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"vertex.attribute0",
|
||||
@ -544,6 +558,37 @@ void ANARIMapperTriangles::UpdateGeometry()
|
||||
this->Handles->Geometry,
|
||||
"vertex.attribute3",
|
||||
this->Handles->Parameters.Vertex.Attribute[3]);
|
||||
|
||||
// Attribute names for USD //
|
||||
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[0].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute0.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[0]);
|
||||
}
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[1].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute1.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[1]);
|
||||
}
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[2].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute2.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[2]);
|
||||
}
|
||||
if (!this->Handles->Parameters.Vertex.AttributeName[3].empty())
|
||||
{
|
||||
anari_cpp::setParameter(d,
|
||||
this->Handles->Geometry,
|
||||
"usd::attribute3.name",
|
||||
this->Handles->Parameters.Vertex.AttributeName[3]);
|
||||
}
|
||||
}
|
||||
|
||||
if (CalculateNormals)
|
||||
|
@ -29,6 +29,7 @@ struct TrianglesParameters
|
||||
anari_cpp::Array1D Position{ nullptr };
|
||||
anari_cpp::Array1D Normal{ nullptr };
|
||||
std::array<anari_cpp::Array1D, 4> Attribute;
|
||||
std::array<std::string, 4> AttributeName;
|
||||
} Vertex{};
|
||||
|
||||
struct PrimitiveData
|
||||
@ -53,9 +54,13 @@ struct TriangleArrays
|
||||
struct TriangleFieldArrays
|
||||
{
|
||||
vtkm::cont::ArrayHandle<vtkm::Float32> Field1;
|
||||
std::string Field1Name;
|
||||
vtkm::cont::ArrayHandle<vtkm::Float32> Field2;
|
||||
std::string Field2Name;
|
||||
vtkm::cont::ArrayHandle<vtkm::Float32> Field3;
|
||||
std::string Field3Name;
|
||||
vtkm::cont::ArrayHandle<vtkm::Float32> Field4;
|
||||
std::string Field4Name;
|
||||
std::shared_ptr<vtkm::cont::Token> Token{ new vtkm::cont::Token };
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user