Cleanup: Use attribute API to create mesh attributes in Freestyle
This commit is contained in:
@@ -584,6 +584,7 @@ int BlenderStrokeRenderer::get_stroke_count() const
|
||||
// Build a mesh object representing a group of stylized strokes
|
||||
void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
|
||||
{
|
||||
using namespace blender;
|
||||
#if 0
|
||||
Object *object_mesh = BKE_object_add(
|
||||
freestyle_bmain, (ViewLayer *)freestyle_scene->view_layers.first, OB_MESH);
|
||||
@@ -599,18 +600,24 @@ void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
|
||||
mesh->corners_num = group->totloop;
|
||||
mesh->totcol = group->materials.size();
|
||||
BKE_mesh_face_offsets_ensure_alloc(mesh);
|
||||
|
||||
float3 *vert_positions = (float3 *)CustomData_add_layer_named(
|
||||
&mesh->vert_data, CD_PROP_FLOAT3, CD_SET_DEFAULT, mesh->verts_num, "position");
|
||||
blender::int2 *edges = (blender::int2 *)CustomData_add_layer_named(
|
||||
&mesh->edge_data, CD_PROP_INT32_2D, CD_CONSTRUCT, mesh->edges_num, ".edge_verts");
|
||||
blender::bke::MutableAttributeAccessor attributes = mesh->attributes_for_write();
|
||||
blender::MutableSpan<int> face_offsets = mesh->face_offsets_for_write();
|
||||
int *corner_verts = (int *)CustomData_add_layer_named(
|
||||
&mesh->corner_data, CD_PROP_INT32, CD_SET_DEFAULT, mesh->corners_num, ".corner_vert");
|
||||
int *corner_edges = (int *)CustomData_add_layer_named(
|
||||
&mesh->corner_data, CD_PROP_INT32, CD_SET_DEFAULT, mesh->corners_num, ".corner_edge");
|
||||
int *material_indices = (int *)CustomData_add_layer_named(
|
||||
&mesh->face_data, CD_PROP_INT32, CD_SET_DEFAULT, mesh->faces_num, "material_index");
|
||||
bke::SpanAttributeWriter position_attr = attributes.lookup_or_add_for_write_span<float3>(
|
||||
"position", bke::AttrDomain::Point);
|
||||
bke::SpanAttributeWriter edge_verts_attr = attributes.lookup_or_add_for_write_span<int2>(
|
||||
".edge_verts", bke::AttrDomain::Edge);
|
||||
bke::SpanAttributeWriter corner_vert_attr = attributes.lookup_or_add_for_write_span<int>(
|
||||
".corner_vert", bke::AttrDomain::Corner);
|
||||
bke::SpanAttributeWriter corner_edge_attr = attributes.lookup_or_add_for_write_span<int>(
|
||||
".corner_edge", bke::AttrDomain::Corner);
|
||||
bke::SpanAttributeWriter material_index_attr = attributes.lookup_or_add_for_write_span<int>(
|
||||
"material_index", bke::AttrDomain::Face);
|
||||
float3 *vert_positions = position_attr.span.data();
|
||||
int2 *edges = edge_verts_attr.span.data();
|
||||
int *corner_verts = corner_vert_attr.span.data();
|
||||
int *corner_edges = corner_edge_attr.span.data();
|
||||
int *material_indices = material_index_attr.span.data();
|
||||
|
||||
blender::float2 *loopsuv[2] = {nullptr};
|
||||
|
||||
if (hasTex) {
|
||||
@@ -818,6 +825,12 @@ void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
|
||||
|
||||
BKE_object_materials_sync_length(freestyle_bmain, object_mesh, (ID *)mesh);
|
||||
|
||||
position_attr.finish();
|
||||
edge_verts_attr.finish();
|
||||
corner_vert_attr.finish();
|
||||
corner_edge_attr.finish();
|
||||
material_index_attr.finish();
|
||||
|
||||
#if 0 // XXX
|
||||
BLI_assert(mesh->verts_num == vertex_index);
|
||||
BLI_assert(mesh->edges_num == edge_index);
|
||||
|
||||
Reference in New Issue
Block a user