22 num_subd_added_verts = 0;
25 OsdMesh osd_mesh(*
this);
30 osd_data.build(osd_mesh);
45 for (
int f = 0; f < num_faces; f++) {
60 OsdPatch *patch = osd_patches.data();
62 for (
int f = 0; f < num_faces; f++) {
67 patch->from_ngon =
false;
68 patch->shader = face.
shader;
69 patch->smooth = face.
smooth;
73 for (
int corner = 0; corner < face.
num_corners; corner++) {
75 patch->from_ngon =
true;
76 patch->shader = face.
shader;
77 patch->smooth = face.
smooth;
85 split.split_patches(osd_patches.data(),
sizeof(OsdPatch));
91 EdgeDice dice(params, split.get_num_verts(), split.get_num_triangles(), interpolation);
100 for (
int f = 0; f < num_faces; f++) {
110 hull[0] = verts[subd_face_corners[face.
start_corner + 0]];
111 hull[1] = verts[subd_face_corners[face.
start_corner + 1]];
112 hull[2] = verts[subd_face_corners[face.
start_corner + 3]];
113 hull[3] = verts[subd_face_corners[face.
start_corner + 2]];
123 const float inv_num_corners = 1.0f / float(face.
num_corners);
124 for (
int corner = 0; corner < face.
num_corners; corner++) {
125 center_vert += verts[subd_face_corners[face.
start_corner + corner]] * inv_num_corners;
128 for (
int corner = 0; corner < face.
num_corners; corner++) {
143 hull[1] = 0.5f * (verts[v0] + verts[v1]);
144 hull[2] = 0.5f * (verts[v3] + verts[v0]);
145 hull[3] = center_vert;
157#ifdef WITH_OPENSUBDIV
164 EdgeDice dice(params, split.get_num_verts(), split.get_num_triangles(), interpolation);
VecBase< float, D > constexpr mod(VecOp< float, D >, VecOp< float, D >) RET