27#define BUGGY_SIMPLE_SCHEME_WORKAROUND 1
69#if BUGGY_SIMPLE_SCHEME_WORKAROUND
117 int manifold_face_index,
118 int *manifold_face_vertices)
122 for (
int i = 0;
i < face.
size();
i++) {
129 int manifold_edge_index,
130 int *manifold_edge_vertices)
134 const int2 &edge = storage->
edges[edge_index];
142#if BUGGY_SIMPLE_SCHEME_WORKAROUND
155 int manifold_vertex_index)
158#if BUGGY_SIMPLE_SCHEME_WORKAROUND
195 const int num_vert =
mesh->verts_num;
199 "loop uv vertex index");
209 for (
int vertex_index = 0; vertex_index < num_vert; vertex_index++) {
211 while (uv_vert !=
nullptr) {
218 uv_vert = uv_vert->
next;
237 const int face_index,
252 MEM_delete(user_data);
290 const int num_elements,
292 int **r_indices_reverse,
293 int *r_num_manifold_elements)
296 if (r_indices !=
nullptr) {
299 int *indices_reverse =
nullptr;
300 if (r_indices_reverse !=
nullptr) {
304 for (
int i = 0;
i < num_elements;
i++) {
305 if (not_used_map.
is_empty() || !not_used_map[
i]) {
309 if (indices_reverse !=
nullptr) {
310 indices_reverse[
i - offset] =
i;
320 if (r_indices !=
nullptr) {
323 if (r_indices_reverse !=
nullptr) {
324 *r_indices_reverse = indices_reverse;
326 *r_num_manifold_elements = num_elements - offset;
345 if (loose_edges.
count > 0) {
348 for (
int edge_index = 0; edge_index <
mesh->edges_num; edge_index++) {
350 const int2 edge = edges[edge_index];
CustomData interface, see also DNA_customdata_types.h.
const char * CustomData_get_layer_name(const CustomData *data, eCustomDataType type, int n)
int CustomData_number_of_layers(const CustomData *data, eCustomDataType type)
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
UvVertMap * BKE_mesh_uv_vert_map_create(blender::OffsetIndices< int > faces, blender::Span< int > corner_verts, blender::Span< blender::float2 > uv_map, int verts_num, const blender::float2 &limit, bool use_winding)
Read Guarded memory(de)allocation.
constexpr bool is_empty() const
constexpr int64_t size() const
constexpr int64_t start() const
void resize(const int64_t new_size_in_bits, const bool value=false)
GAttributeReader lookup(const StringRef attribute_id) const
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)
BLI_INLINE float crease_to_sharpness(float crease)
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 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)
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 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)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
OpenSubdiv_FVarLinearInterpolation
OpenSubdiv_VtxBoundaryInterpolation
int(* getFaceCornerUVIndex)(const OpenSubdiv_Converter *converter, const int face_index, const int corner_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)
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)
blender::OffsetIndices< int > faces
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