29#define BUGGY_SIMPLE_SCHEME_WORKAROUND 1
71#if BUGGY_SIMPLE_SCHEME_WORKAROUND
127 return storage->
faces[manifold_face_index].size();
131 int manifold_face_index,
132 int *manifold_face_vertices)
136 for (
int i = 0; i < face.size(); i++) {
143 int manifold_edge_index,
144 int *manifold_edge_vertices)
148 const int2 &edge = storage->
edges[edge_index];
156#if BUGGY_SIMPLE_SCHEME_WORKAROUND
169 int manifold_vertex_index)
172#if BUGGY_SIMPLE_SCHEME_WORKAROUND
205 const float(*mloopuv)[2] =
static_cast<const float(*)[2]
>(
225 for (
int vertex_index = 0; vertex_index < num_vert; vertex_index++) {
227 while (uv_vert !=
nullptr) {
234 uv_vert = uv_vert->
next;
253 const int face_index,
268 MEM_delete(user_data);
308 const int num_elements,
310 int **r_indices_reverse,
311 int *r_num_manifold_elements)
313 int *indices =
nullptr;
314 if (r_indices !=
nullptr) {
315 indices =
static_cast<int *
>(
MEM_malloc_arrayN(num_elements,
sizeof(
int),
"manifold indices"));
317 int *indices_reverse =
nullptr;
318 if (r_indices_reverse !=
nullptr) {
319 indices_reverse =
static_cast<int *
>(
323 for (
int i = 0; i < num_elements; i++) {
324 if (not_used_map.
is_empty() || !not_used_map[i]) {
325 if (indices !=
nullptr) {
326 indices[i] = i - offset;
328 if (indices_reverse !=
nullptr) {
329 indices_reverse[i - offset] = i;
333 if (indices !=
nullptr) {
339 if (r_indices !=
nullptr) {
342 if (r_indices_reverse !=
nullptr) {
343 *r_indices_reverse = indices_reverse;
345 *r_num_manifold_elements = num_elements - offset;
364 if (loose_edges.
count > 0) {
367 for (
int edge_index = 0; edge_index < mesh->edges_num; edge_index++) {
369 const int2 edge = edges[edge_index];
383 user_data->
mesh = mesh;
385 user_data->
edges = mesh->edges();
386 user_data->
faces = mesh->faces();
389 if (settings->use_creases) {
CustomData interface, see also DNA_customdata_types.h.
const void * CustomData_get_layer_n(const CustomData *data, eCustomDataType type, int n)
int CustomData_number_of_layers(const CustomData *data, eCustomDataType type)
UvVertMap * BKE_mesh_uv_vert_map_create(blender::OffsetIndices< int > faces, const bool *hide_poly, const bool *select_poly, const int *corner_verts, const float(*mloopuv)[2], unsigned int totvert, const float limit[2], bool selected, bool use_winding)
void BKE_mesh_uv_vert_map_free(UvVertMap *vmap)
UvMapVert * BKE_mesh_uv_vert_map_get_vert(UvVertMap *vmap, unsigned int v)
#define STD_UV_CONNECT_LIMIT
Read Guarded memory(de)allocation.
constexpr const T * data() const
constexpr bool is_empty() const
void resize(const int64_t new_size_in_bits, const bool value=false)
draw_view in_light_buf[] float
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
static void init_functions(OpenSubdiv_Converter *converter)
static void free_user_data(const OpenSubdiv_Converter *converter)
void converter_init_for_mesh(OpenSubdiv_Converter *converter, const Settings *settings, const Mesh *mesh)
static int get_num_uvs(const OpenSubdiv_Converter *converter)
static bool is_infinite_sharp_vertex(const OpenSubdiv_Converter *converter, int manifold_vertex_index)
static void get_face_vertices(const OpenSubdiv_Converter *converter, int manifold_face_index, int *manifold_face_vertices)
int converter_fvar_linear_from_settings(const Settings *settings)
static float get_edge_sharpness(const OpenSubdiv_Converter *converter, int manifold_edge_index)
static int get_num_uv_layers(const OpenSubdiv_Converter *converter)
static OpenSubdiv_SchemeType get_scheme_type(const OpenSubdiv_Converter *converter)
static bool specifies_full_topology(const OpenSubdiv_Converter *)
static void finish_uv_layer(const OpenSubdiv_Converter *)
int converter_vtx_boundary_interpolation_from_settings(const Settings *settings)
static int get_num_face_vertices(const OpenSubdiv_Converter *converter, int manifold_face_index)
static float get_vertex_sharpness(const OpenSubdiv_Converter *converter, int manifold_vertex_index)
static void initialize_manifold_index_array(const BitSpan not_used_map, const int num_elements, int **r_indices, int **r_indices_reverse, int *r_num_manifold_elements)
BLI_INLINE float crease_to_sharpness(float edge_crease)
static int get_num_vertices(const OpenSubdiv_Converter *converter)
static int get_num_edges(const OpenSubdiv_Converter *converter)
static int get_face_corner_uv_index(const OpenSubdiv_Converter *converter, const int face_index, const int corner)
static OpenSubdiv_FVarLinearInterpolation get_fvar_linear_interpolation(const OpenSubdiv_Converter *converter)
static int get_num_faces(const OpenSubdiv_Converter *converter)
static void precalc_uv_layer(const OpenSubdiv_Converter *converter, const int layer_index)
static OpenSubdiv_VtxBoundaryInterpolation get_vtx_boundary_interpolation(const OpenSubdiv_Converter *converter)
static void init_user_data(OpenSubdiv_Converter *converter, const Settings *settings, const Mesh *mesh)
static void initialize_manifold_indices(ConverterStorage *storage)
static void get_edge_vertices(const OpenSubdiv_Converter *converter, int manifold_edge_index, int *manifold_edge_vertices)
OpenSubdiv_FVarLinearInterpolation
OpenSubdiv_VtxBoundaryInterpolation
int(* getFaceCornerUVIndex)(const OpenSubdiv_Converter *converter, const int face_index, const int corner_index)
int(* getNumFaceVertices)(const OpenSubdiv_Converter *converter, const int face_index)
void(* freeUserData)(const OpenSubdiv_Converter *converter)
int(* getNumEdges)(const OpenSubdiv_Converter *converter)
void(* precalcUVLayer)(const OpenSubdiv_Converter *converter, const int layer_index)
float(* getEdgeSharpness)(const OpenSubdiv_Converter *converter, const int edge_index)
int(* getNumVertexFaces)(const OpenSubdiv_Converter *converter, const int vertex_index)
void(* getVertexFaces)(const OpenSubdiv_Converter *converter, const int vertex_index, int *vertex_faces)
void(* getVertexEdges)(const OpenSubdiv_Converter *converter, const int vertex_index, int *vertex_edges)
OpenSubdiv_FVarLinearInterpolation(* getFVarLinearInterpolation)(const OpenSubdiv_Converter *converter)
int(* getNumFaces)(const OpenSubdiv_Converter *converter)
bool(* specifiesFullTopology)(const OpenSubdiv_Converter *converter)
int(* getNumUVCoordinates)(const OpenSubdiv_Converter *converter)
void(* getFaceVertices)(const OpenSubdiv_Converter *converter, const int face_index, int *face_vertices)
OpenSubdiv_VtxBoundaryInterpolation(* getVtxBoundaryInterpolation)(const OpenSubdiv_Converter *converter)
int(* getNumUVLayers)(const OpenSubdiv_Converter *converter)
int(* getNumEdgeFaces)(const OpenSubdiv_Converter *converter, const int edge_index)
bool(* isInfiniteSharpVertex)(const OpenSubdiv_Converter *converter, const int vertex_index)
float(* getVertexSharpness)(const OpenSubdiv_Converter *converter, const int vertex_index)
OpenSubdiv_SchemeType(* getSchemeType)(const OpenSubdiv_Converter *converter)
void(* getEdgeVertices)(const OpenSubdiv_Converter *converter, const int edge_index, int edge_vertices[2])
int(* getNumVertexEdges)(const OpenSubdiv_Converter *converter, const int vertex_index)
int(* getNumVertices)(const OpenSubdiv_Converter *converter)
void(* getFaceEdges)(const OpenSubdiv_Converter *converter, const int face_index, int *face_edges)
void(* finishUVLayer)(const OpenSubdiv_Converter *converter)
void(* getEdgeFaces)(const OpenSubdiv_Converter *converter, const int edge, int *edge_faces)
unsigned short loop_of_face_index
blender::BitVector is_loose_bits
VArraySpan< float > cd_vertex_crease
int * manifold_edge_index_reverse
int * manifold_vertex_index
int num_manifold_vertices
OffsetIndices< int > faces
int * manifold_vertex_index_reverse
Span< float3 > vert_positions
VArraySpan< float > cd_edge_crease
BitVector infinite_sharp_vertices_map