45 #define BUGGY_SIMPLE_SCHEME_WORKAROUND 1
77 #if BUGGY_SIMPLE_SCHEME_WORKAROUND
135 int manifold_face_index,
136 int *manifold_face_vertices)
142 manifold_face_vertices[
corner] =
148 int manifold_edge_index,
149 int *manifold_edge_vertices)
161 #if BUGGY_SIMPLE_SCHEME_WORKAROUND
175 int manifold_vertex_index)
178 #if BUGGY_SIMPLE_SCHEME_WORKAROUND
188 int UNUSED(manifold_vertex_index))
217 mesh->
totloop,
sizeof(
int),
"loop uv vertex index");
220 mpoly, mloop, mloopuv, num_poly, num_vert, limit,
false,
true);
223 for (
int vertex_index = 0; vertex_index < num_vert; vertex_index++) {
225 while (uv_vert !=
NULL) {
232 uv_vert = uv_vert->
next;
253 const int face_index,
309 const int num_elements,
311 int **indices_reverse_r,
312 int *num_manifold_elements_r)
315 if (indices_r !=
NULL) {
318 int *indices_reverse =
NULL;
319 if (indices_reverse_r !=
NULL) {
320 indices_reverse =
MEM_malloc_arrayN(num_elements,
sizeof(
int),
"manifold indices reverse");
323 for (
int i = 0; i < num_elements; i++) {
328 if (indices_reverse !=
NULL) {
329 indices_reverse[i - offset] = i;
339 if (indices_r !=
NULL) {
342 if (indices_reverse_r !=
NULL) {
343 *indices_reverse_r = indices_reverse;
345 *num_manifold_elements_r = num_elements - offset;
357 for (
int poly_index = 0; poly_index <
mesh->
totpoly; poly_index++) {
358 const MPoly *poly = &mpoly[poly_index];
377 for (
int edge_index = 0; edge_index <
mesh->
totedge; edge_index++) {
379 const MEdge *edge = &medge[edge_index];
CustomData interface, see also DNA_customdata_types.h.
int CustomData_number_of_layers(const struct CustomData *data, int type)
void * CustomData_get_layer_n(const struct CustomData *data, int type, int n)
UvMapVert * BKE_mesh_uv_vert_map_get_vert(UvVertMap *vmap, unsigned int v)
void BKE_mesh_uv_vert_map_free(UvVertMap *vmap)
UvVertMap * BKE_mesh_uv_vert_map_create(const struct MPoly *mpoly, const struct MLoop *mloop, const struct MLoopUV *mloopuv, unsigned int totpoly, unsigned int totvert, const float limit[2], const bool selected, const bool use_winding)
#define STD_UV_CONNECT_LIMIT
BLI_INLINE float BKE_subdiv_edge_crease_to_sharpness_char(char edge_crease)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_TEST_BOOL(_bitmap, _index)
#define BLI_BITMAP_NEW(_tot, _alloc_string)
Read Guarded memory(de)allocation.
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
OpenSubdiv_FVarLinearInterpolation
OpenSubdiv_VtxBoundaryInterpolation
int * manifold_edge_index_reverse
int * manifold_vertex_index_reverse
int * manifold_vertex_index
BLI_bitmap * infinite_sharp_vertices_map
int num_manifold_vertices
struct CustomData pdata ldata
int(* getNumVertexFaces)(const struct OpenSubdiv_Converter *converter, const int vertex_index)
bool(* specifiesFullTopology)(const struct OpenSubdiv_Converter *converter)
void(* freeUserData)(const struct OpenSubdiv_Converter *converter)
void(* getFaceVertices)(const struct OpenSubdiv_Converter *converter, const int face_index, int *face_vertices)
float(* getVertexSharpness)(const struct OpenSubdiv_Converter *converter, const int vertex_index)
void(* getFaceEdges)(const struct OpenSubdiv_Converter *converter, const int face_index, int *face_edges)
int(* getNumUVLayers)(const struct OpenSubdiv_Converter *converter)
int(* getNumVertexEdges)(const struct OpenSubdiv_Converter *converter, const int vertex_index)
OpenSubdiv_FVarLinearInterpolation(* getFVarLinearInterpolation)(const struct OpenSubdiv_Converter *converter)
void(* getEdgeVertices)(const struct OpenSubdiv_Converter *converter, const int edge_index, int edge_vertices[2])
OpenSubdiv_SchemeType(* getSchemeType)(const struct OpenSubdiv_Converter *converter)
bool(* isInfiniteSharpVertex)(const struct OpenSubdiv_Converter *converter, const int vertex_index)
void(* getVertexFaces)(const struct OpenSubdiv_Converter *converter, const int vertex_index, int *vertex_faces)
int(* getNumVertices)(const struct OpenSubdiv_Converter *converter)
float(* getEdgeSharpness)(const struct OpenSubdiv_Converter *converter, const int edge_index)
int(* getNumEdges)(const struct OpenSubdiv_Converter *converter)
int(* getNumFaces)(const struct OpenSubdiv_Converter *converter)
int(* getNumEdgeFaces)(const struct OpenSubdiv_Converter *converter, const int edge_index)
int(* getNumUVCoordinates)(const struct OpenSubdiv_Converter *converter)
void(* getVertexEdges)(const struct OpenSubdiv_Converter *converter, const int vertex_index, int *vertex_edges)
void(* finishUVLayer)(const struct OpenSubdiv_Converter *converter)
void(* getEdgeFaces)(const struct OpenSubdiv_Converter *converter, const int edge, int *edge_faces)
OpenSubdiv_VtxBoundaryInterpolation(* getVtxBoundaryInterpolation)(const struct OpenSubdiv_Converter *converter)
void(* precalcUVLayer)(const struct OpenSubdiv_Converter *converter, const int layer_index)
int(* getFaceCornerUVIndex)(const struct OpenSubdiv_Converter *converter, const int face_index, const int corner_index)
int(* getNumFaceVertices)(const struct OpenSubdiv_Converter *converter, const int face_index)
unsigned short loop_of_poly_index
int BKE_subdiv_converter_fvar_linear_from_settings(const SubdivSettings *settings)
int BKE_subdiv_converter_vtx_boundary_interpolation_from_settings(const SubdivSettings *settings)
static int get_face_corner_uv_index(const OpenSubdiv_Converter *converter, const int face_index, const int corner)
static void get_edge_vertices(const OpenSubdiv_Converter *converter, int manifold_edge_index, int *manifold_edge_vertices)
static void initialize_manifold_index_array(const BLI_bitmap *used_map, const int num_elements, int **indices_r, int **indices_reverse_r, int *num_manifold_elements_r)
static void precalc_uv_layer(const OpenSubdiv_Converter *converter, const int layer_index)
static bool specifies_full_topology(const OpenSubdiv_Converter *UNUSED(converter))
static void get_face_vertices(const OpenSubdiv_Converter *converter, int manifold_face_index, int *manifold_face_vertices)
static bool is_infinite_sharp_vertex(const OpenSubdiv_Converter *converter, int manifold_vertex_index)
struct ConverterStorage ConverterStorage
static OpenSubdiv_VtxBoundaryInterpolation get_vtx_boundary_interpolation(const struct OpenSubdiv_Converter *converter)
static int get_num_faces(const OpenSubdiv_Converter *converter)
static void init_user_data(OpenSubdiv_Converter *converter, const SubdivSettings *settings, const Mesh *mesh)
static void finish_uv_layer(const OpenSubdiv_Converter *UNUSED(converter))
static int get_num_vertices(const OpenSubdiv_Converter *converter)
static OpenSubdiv_SchemeType get_scheme_type(const OpenSubdiv_Converter *converter)
static int get_num_face_vertices(const OpenSubdiv_Converter *converter, int manifold_face_index)
static float get_vertex_sharpness(const OpenSubdiv_Converter *converter, int UNUSED(manifold_vertex_index))
void BKE_subdiv_converter_init_for_mesh(struct OpenSubdiv_Converter *converter, const SubdivSettings *settings, const Mesh *mesh)
static int get_num_edges(const OpenSubdiv_Converter *converter)
static void free_user_data(const OpenSubdiv_Converter *converter)
static float get_edge_sharpness(const OpenSubdiv_Converter *converter, int manifold_edge_index)
static int get_num_uvs(const OpenSubdiv_Converter *converter)
static void initialize_manifold_indices(ConverterStorage *storage)
static int get_num_uv_layers(const OpenSubdiv_Converter *converter)
static OpenSubdiv_FVarLinearInterpolation get_fvar_linear_interpolation(const OpenSubdiv_Converter *converter)
static void init_functions(OpenSubdiv_Converter *converter)