Blender V4.3
subdiv_mesh.cc File Reference
#include <mutex>
#include "DNA_key_types.h"
#include "DNA_mesh_types.h"
#include "BLI_array.hh"
#include "BLI_math_vector.h"
#include "BLI_math_vector.hh"
#include "BLI_math_vector_types.hh"
#include "BLI_task.hh"
#include "BKE_attribute_math.hh"
#include "BKE_customdata.hh"
#include "BKE_key.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_mapping.hh"
#include "BKE_subdiv.hh"
#include "BKE_subdiv_eval.hh"
#include "BKE_subdiv_foreach.hh"
#include "BKE_subdiv_mesh.hh"
#include "MEM_guardedalloc.h"

Go to the source code of this file.

Classes

struct  blender::bke::subdiv::SubdivMeshContext
 
struct  blender::bke::subdiv::LoopsOfPtex
 
struct  blender::bke::subdiv::VerticesForInterpolation
 
struct  blender::bke::subdiv::LoopsForInterpolation
 
struct  blender::bke::subdiv::SubdivMeshTLS
 

Namespaces

namespace  blender
 
namespace  blender::bke
 
namespace  blender::bke::subdiv
 

Functions

Subdivision context
static void blender::bke::subdiv::subdiv_mesh_ctx_cache_uv_layers (SubdivMeshContext *ctx)
 
static void blender::bke::subdiv::subdiv_mesh_ctx_cache_custom_data_layers (SubdivMeshContext *ctx)
 
static void blender::bke::subdiv::subdiv_mesh_prepare_accumulator (SubdivMeshContext *ctx, int num_vertices)
 
static void blender::bke::subdiv::subdiv_mesh_context_free (SubdivMeshContext *ctx)
 
Loop custom data copy helpers
static void blender::bke::subdiv::loops_of_ptex_get (LoopsOfPtex *loops_of_ptex, const IndexRange coarse_face, const int ptex_of_face_index)
 
Vertex custom data interpolation helpers
static void blender::bke::subdiv::vertex_interpolation_init (const SubdivMeshContext *ctx, VerticesForInterpolation *vertex_interpolation, const IndexRange coarse_face)
 
static void blender::bke::subdiv::vertex_interpolation_from_corner (const SubdivMeshContext *ctx, VerticesForInterpolation *vertex_interpolation, const IndexRange coarse_face, const int corner)
 
static void blender::bke::subdiv::vertex_interpolation_end (VerticesForInterpolation *vertex_interpolation)
 
Loop custom data interpolation helpers
static void blender::bke::subdiv::loop_interpolation_init (const SubdivMeshContext *ctx, LoopsForInterpolation *loop_interpolation, const IndexRange coarse_face)
 
static void blender::bke::subdiv::loop_interpolation_from_corner (const SubdivMeshContext *ctx, LoopsForInterpolation *loop_interpolation, const IndexRange coarse_face, const int corner)
 
static void blender::bke::subdiv::loop_interpolation_end (LoopsForInterpolation *loop_interpolation)
 
TLS
static void blender::bke::subdiv::subdiv_mesh_tls_free (void *tls_v)
 
Evaluation helper functions
static void blender::bke::subdiv::subdiv_vertex_orco_evaluate (const SubdivMeshContext *ctx, const int ptex_face_index, const float u, const float v, const int subdiv_vertex_index)
 
Accumulation helpers
static void blender::bke::subdiv::subdiv_accumulate_vertex_displacement (SubdivMeshContext *ctx, const int ptex_face_index, const float u, const float v, const int subdiv_vertex_index)
 
Callbacks
static bool blender::bke::subdiv::subdiv_mesh_topology_info (const ForeachContext *foreach_context, const int num_vertices, const int num_edges, const int num_loops, const int num_faces, const int *)
 
Vertex subdivision process
static void blender::bke::subdiv::subdiv_vertex_data_copy (const SubdivMeshContext *ctx, const int coarse_vertex_index, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_vertex_data_interpolate (const SubdivMeshContext *ctx, const int subdiv_vertex_index, const VerticesForInterpolation *vertex_interpolation, const float u, const float v)
 
static void blender::bke::subdiv::evaluate_vertex_and_apply_displacement_copy (const SubdivMeshContext *ctx, const int ptex_face_index, const float u, const float v, const int coarse_vertex_index, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::evaluate_vertex_and_apply_displacement_interpolate (const SubdivMeshContext *ctx, const int ptex_face_index, const float u, const float v, VerticesForInterpolation *vertex_interpolation, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_displacement_every_corner_or_edge (const ForeachContext *foreach_context, void *, const int ptex_face_index, const float u, const float v, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_displacement_every_corner (const ForeachContext *foreach_context, void *tls, const int ptex_face_index, const float u, const float v, const int, const int, const int, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_displacement_every_edge (const ForeachContext *foreach_context, void *tls, const int ptex_face_index, const float u, const float v, const int, const int, const int, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_corner (const ForeachContext *foreach_context, void *, const int ptex_face_index, const float u, const float v, const int coarse_vertex_index, const int, const int, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_mesh_ensure_vertex_interpolation (SubdivMeshContext *ctx, SubdivMeshTLS *tls, const int coarse_face_index, const int coarse_corner)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_edge (const ForeachContext *foreach_context, void *tls_v, const int ptex_face_index, const float u, const float v, const int, const int coarse_face_index, const int coarse_corner, const int subdiv_vertex_index)
 
static bool blender::bke::subdiv::subdiv_mesh_is_center_vertex (const IndexRange coarse_face, const float u, const float v)
 
static void blender::bke::subdiv::subdiv_mesh_tag_center_vertex (const IndexRange coarse_face, const int subdiv_vertex_index, const float u, const float v, Mesh *subdiv_mesh)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_inner (const ForeachContext *foreach_context, void *tls_v, const int ptex_face_index, const float u, const float v, const int coarse_face_index, const int coarse_corner, const int subdiv_vertex_index)
 
Edge subdivision process
static void blender::bke::subdiv::subdiv_copy_edge_data (SubdivMeshContext *ctx, const int subdiv_edge_index, const int coarse_edge_index)
 
static void blender::bke::subdiv::subdiv_mesh_edge (const ForeachContext *foreach_context, void *, const int coarse_edge_index, const int subdiv_edge_index, const bool, const int subdiv_v1, const int subdiv_v2)
 
Loops creation/interpolation
static void blender::bke::subdiv::subdiv_interpolate_corner_data (const SubdivMeshContext *ctx, const int subdiv_loop_index, const LoopsForInterpolation *loop_interpolation, const float u, const float v)
 
static void blender::bke::subdiv::subdiv_eval_uv_layer (SubdivMeshContext *ctx, const int corner_index, const int ptex_face_index, const float u, const float v)
 
static void blender::bke::subdiv::subdiv_mesh_ensure_loop_interpolation (SubdivMeshContext *ctx, SubdivMeshTLS *tls, const int coarse_face_index, const int coarse_corner)
 
static void blender::bke::subdiv::subdiv_mesh_loop (const ForeachContext *foreach_context, void *tls_v, const int ptex_face_index, const float u, const float v, const int, const int coarse_face_index, const int coarse_corner, const int subdiv_loop_index, const int subdiv_vertex_index, const int subdiv_edge_index)
 
Polygons subdivision process
static void blender::bke::subdiv::subdiv_mesh_face (const ForeachContext *foreach_context, void *, const int coarse_face_index, const int subdiv_face_index, const int start_loop_index, const int)
 
Loose elements subdivision process
static void blender::bke::subdiv::subdiv_mesh_vertex_loose (const ForeachContext *foreach_context, void *, const int coarse_vertex_index, const int subdiv_vertex_index)
 
static std::array< std::optional< int2 >, 2 > blender::bke::subdiv::find_edge_neighbors (const Span< int2 > coarse_edges, const GroupedSpan< int > vert_to_edge_map, const int edge_index)
 
static std::array< float3, 4 > blender::bke::subdiv::find_loose_edge_interpolation_positions (const Span< float3 > coarse_positions, const int2 &coarse_edge, const std::array< std::optional< int2 >, 2 > &neighbors)
 
float3 blender::bke::subdiv::mesh_interpolate_position_on_edge (Span< float3 > coarse_positions, Span< int2 > coarse_edges, GroupedSpan< int > vert_to_edge_map, int coarse_edge_index, bool is_simple, float u)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_of_loose_edge_interpolate (SubdivMeshContext *ctx, const int2 &coarse_edge, const float u, const int subdiv_vertex_index)
 
static void blender::bke::subdiv::subdiv_mesh_vertex_of_loose_edge (const ForeachContext *foreach_context, void *, const int coarse_edge_index, const float u, const int subdiv_vertex_index)
 
Initialization
static void blender::bke::subdiv::setup_foreach_callbacks (const SubdivMeshContext *subdiv_context, ForeachContext *foreach_context)
 
Public entry point
Meshblender::bke::subdiv::subdiv_to_mesh (Subdiv *subdiv, const ToMeshSettings *settings, const Mesh *coarse_mesh)