131 return mverts[index].
co;
139 const int grid_index = index / key->
grid_area;
140 const int vertex_index = index - grid_index * key->
grid_area;
184 const int grid_index = index / key->
grid_area;
185 const int vertex_index = index - grid_index * key->
grid_area;
206 return mverts[index].
co;
227 const int grid_index = index / key->
grid_area;
228 const int vertex_index = index - grid_index * key->
grid_area;
254 return ss->
vmask[index];
261 const int grid_index = index / key->
grid_area;
262 const int vertex_index = index - grid_index * key->
grid_area;
305 const int deform_target,
308 switch (deform_target) {
365 const int grid_index = index / key->
grid_area;
366 const int vertex_index = index - grid_index * key->
grid_area;
368 if (grid_hidden && grid_hidden[grid_index]) {
381 for (
int i = 0; i < ss->
totfaces; i++) {
403 for (
int i = 0; i < ss->
totfaces; i++) {
417 for (
int i = 0; i < ss->
totfaces; i++) {
444 for (
int j = 0; j < ss->
pmap[index].
count; j++) {
464 for (
int j = 0; j < ss->
pmap[index].
count; j++) {
475 const int grid_index = index / key->
grid_area;
488 for (
int j = 0; j < ss->
pmap[index].
count; j++) {
498 const int grid_index = index / key->
grid_area;
514 for (
int i = 0; i < ss->
pmap[index].
count; i++) {
525 const int grid_index = index / key->
grid_area;
538 for (
int i = 0; i < ss->
pmap[index].
count; i++) {
549 const int grid_index = index / key->
grid_area;
551 return ss->
face_sets[face_index] == face_set;
581 for (
int i = 0; i < ss->pmap[index].count; i++) {
594 for (
int i = 0; i < ss->
totfaces; i++) {
596 bool poly_visible =
true;
600 poly_visible =
false;
617 for (
int i = 0; i < ss->
pmap[index].
count; i++) {
618 if (face_set == -1) {
637 int p1 = -1, p2 = -1;
656 if (p1 != -1 && p2 != -1) {
672 const int grid_index = index / key->
grid_area;
673 const int vertex_index = index - grid_index * key->
grid_area;
698 int next_face_set = 0;
699 for (
int i = 0; i < ss->
totfaces; i++) {
705 return next_face_set;
715 #define SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY 256
719 for (
int i = 0; i < iter->
size; i++) {
720 if (iter->
neighbors[i] == neighbor_index) {
757 const BMVert *v_other = adj_v[i];
775 for (
int i = 0; i < ss->
pmap[index].
count; i++) {
783 for (
int j = 0; j <
ARRAY_SIZE(f_adj_v); j += 1) {
784 if (f_adj_v[j] != index) {
801 const bool include_duplicates,
808 const int grid_index = index / key->
grid_area;
809 const int vertex_index = index - grid_index * key->
grid_area;
823 for (
int i = 0; i < neighbors.
size; i++) {
843 const bool include_duplicates,
881 const int grid_index = index / key->
grid_area;
882 const int vertex_index = index - grid_index * key->
grid_area;
925 bool is_in_symmetry_area =
true;
926 for (
int i = 0; i < 3; i++) {
927 char symm_it = 1 << i;
928 if (symm & symm_it) {
929 if (pco[i] == 0.0f) {
931 is_in_symmetry_area =
false;
934 if (vco[i] * pco[i] < 0.0f) {
935 is_in_symmetry_area =
false;
939 return is_in_symmetry_area;
958 if (distance_squared < nvtd->nearest_vertex_distance_squared &&
959 distance_squared < data->max_distance_squared) {
968 void *__restrict chunk_join,
969 void *__restrict chunk)
984 Sculpt *sd,
Object *ob,
const float co[3],
float max_distance,
bool use_original)
992 .radius_squared = max_distance * max_distance,
993 .original = use_original,
1005 .max_distance_squared = max_distance * max_distance,
1027 return i == 0 || (symm & i && (symm != 5 || i != 3) && (symm != 6 || (!
ELEM(i, 3, 5))));
1031 const float br_co[3],
1035 for (
char i = 0; i <= symm; ++i) {
1097 for (
char i = 0; i <= symm; ++i) {
1105 else if (radius > 0.0f) {
1106 float radius_squared = (radius == FLT_MAX) ? FLT_MAX : radius * radius;
1123 for (
char i = 0; i <= symm; ++i) {
1131 else if (radius > 0.0f) {
1146 bool (*func)(
SculptSession *ss,
int from_v,
int to_v,
bool is_duplicate,
void *userdata),
1154 const int to_v = ni.
index;
1166 if (func(ss, from_v, to_v, ni.
is_duplicate, userdata)) {
1198 return ELEM(sculpt_tool,
1212 return ELEM(sculpt_tool,
1277 data->unode = unode;
1307 orig_data->
co = orig_data->
coords[iter->
i];
1367 switch (
data->brush->sculpt_tool) {
1492 float bb_min[3], bb_max[3];
1609 test->
dist = distsq;
1635 test->
dist = distsq;
1641 const float local[4][4],
1642 const float roundness)
1653 local_co[0] =
fabsf(local_co[0]);
1654 local_co[1] =
fabsf(local_co[1]);
1655 local_co[2] =
fabsf(local_co[2]);
1658 side += (1.0f - side) * roundness;
1660 const float hardness = 1.0f - roundness;
1661 const float constant_side = hardness * side;
1662 const float falloff_side = roundness * side;
1664 if (!(local_co[0] <= side && local_co[1] <= side && local_co[2] <= side)) {
1668 if (
min_ff(local_co[0], local_co[1]) > constant_side) {
1672 test->
dist =
len_v2v2(r_point, local_co) / falloff_side;
1675 if (
max_ff(local_co[0], local_co[1]) > constant_side) {
1677 test->
dist = (
max_ff(local_co[0], local_co[1]) - constant_side) / falloff_side;
1700 return sculpt_brush_test_sq_fn;
1714 const float sculpt_normal[3],
1729 return dot > 0.0f ?
dot : 0.0f;
1737 const float area_no[3])
1739 if (sculpt_brush_test_sphere_fast(test, co)) {
1740 float t1[3], t2[3], t3[3], dist;
1788 float overlap = 0.0f;
1790 for (
int i = 1; i < sd->
radial_symm[axis -
'X']; i++) {
1807 for (
int i = 0; i <= symm; i++) {
1818 return 1.0f / overlap;
1852 const bool use_area_nos =
data->use_area_nos;
1853 const bool use_area_cos =
data->use_area_cos;
1858 bool use_original =
false;
1859 bool normal_test_r, area_test_r;
1863 use_original = (unode->
co || unode->
bm_entry);
1868 ss, &normal_test,
data->brush->falloff_shape);
1873 test_radius *=
data->brush->normal_radius_factor;
1874 normal_test.
radius = test_radius;
1880 ss, &area_test,
data->brush->falloff_shape);
1887 data->brush->area_radius_factor > 0.0f) {
1888 test_radius *=
data->brush->area_radius_factor;
1894 test_radius *=
data->brush->normal_radius_factor;
1896 area_test.
radius = test_radius;
1902 if (use_original &&
data->has_bm_orco) {
1903 float(*orco_coords)[3];
1909 for (
int i = 0; i < orco_tris_num; i++) {
1910 const float *co_tri[3] = {
1911 orco_coords[orco_tris[i][0]],
1912 orco_coords[orco_tris[i][1]],
1913 orco_coords[orco_tris[i][2]],
1919 normal_test_r = sculpt_brush_normal_test_sq_fn(&normal_test, co);
1920 area_test_r = sculpt_brush_area_test_sq_fn(&area_test, co);
1922 if (!normal_test_r && !area_test_r) {
1932 if (use_area_cos && area_test_r) {
1935 const float afactor =
clamp_f(3.0f * p * p - 2.0f * p * p * p, 0.0f, 1.0f);
1945 if (use_area_nos && normal_test_r) {
1948 const float nfactor =
clamp_f(3.0f * p * p - 2.0f * p * p * p, 0.0f, 1.0f);
1965 const float *temp_co;
1966 const float *temp_no_s;
1980 normal_test_r = sculpt_brush_normal_test_sq_fn(&normal_test, co);
1981 area_test_r = sculpt_brush_area_test_sq_fn(&area_test, co);
1983 if (!normal_test_r && !area_test_r) {
1990 data->any_vertex_sampled =
true;
2007 if (use_area_cos && area_test_r) {
2010 const float afactor =
clamp_f(3.0f * p * p - 2.0f * p * p * p, 0.0f, 1.0f);
2020 if (use_area_nos && normal_test_r) {
2023 const float nfactor =
clamp_f(3.0f * p * p - 2.0f * p * p * p, 0.0f, 1.0f);
2035 void *__restrict chunk_join,
2036 void *__restrict chunk)
2069 .has_bm_orco = has_bm_orco,
2070 .use_area_cos =
true,
2127 .has_bm_orco = has_bm_orco,
2128 .use_area_nos =
true,
2129 .any_vertex_sampled =
false,
2148 return data.any_vertex_sampled;
2166 .has_bm_orco = has_bm_orco,
2167 .use_area_cos =
true,
2168 .use_area_nos =
true,
2221 const float feather,
2230 const float alpha = root_alpha * root_alpha;
2233 const float pen_flip = cache->
pen_flip ? -1.0f : 1.0f;
2239 float flip = dir *
invert * pen_flip;
2245 float final_pressure;
2249 final_pressure =
pow4f(pressure);
2250 overlap = (1.0f + overlap) / 2.0f;
2251 return 0.25f * alpha * flip * final_pressure * overlap * feather;
2255 return alpha * flip * pressure * overlap * feather;
2257 return alpha * pressure * overlap * feather;
2261 return root_alpha * feather;
2264 return root_alpha * feather * pressure * overlap;
2269 return 0.1f * alpha * flip * pressure * overlap * feather;
2274 return 10.0f * alpha * flip * pressure * overlap * feather;
2277 return alpha * pressure * overlap * feather;
2279 return alpha * pressure * overlap * feather * 2.0f;
2281 final_pressure = pressure * pressure;
2282 return final_pressure * overlap * feather;
2285 return alpha * pressure * overlap * feather;
2288 final_pressure =
powf(pressure, 1.5f);
2289 return alpha * flip * final_pressure * overlap * feather * 0.3f;
2291 final_pressure = pressure * pressure;
2292 return alpha * flip * final_pressure * overlap * feather * 1.3f;
2295 overlap = (1.0f + overlap) / 2.0f;
2298 return alpha * flip * pressure * overlap * feather;
2300 return alpha * pressure * feather;
2307 return alpha * flip * pressure * overlap * feather;
2311 return 0.250f * alpha * flip * pressure * overlap * feather;
2314 return 0.125f * alpha * flip * pressure * overlap * feather;
2318 overlap = (1.0f + overlap) / 2.0f;
2319 return alpha * flip * pressure * overlap * feather;
2325 overlap = (1.0f + overlap) / 2.0f;
2326 return alpha * flip * pressure * overlap * feather;
2330 return 0.5f * alpha * flip * pressure * overlap * feather;
2334 return flip * alpha * pressure * feather;
2338 return alpha * flip * pressure * overlap * feather;
2341 return 0.25f * alpha * flip * pressure * overlap * feather;
2345 overlap = (1.0f + overlap) / 2.0f;
2346 return alpha * pressure * overlap * feather;
2349 return alpha * pressure * feather;
2352 return root_alpha * feather;
2355 return root_alpha * feather;
2358 return alpha * pressure * feather;
2363 return root_alpha * feather;
2372 const float brush_point[3],
2377 const int vertex_index,
2397 float symm_point[3], point_2d[2];
2399 float x = 0.0f,
y = 0.0f;
2434 const float point_3d[3] = {point_2d[0], point_2d[1], 0.0f};
2440 float final_len =
len;
2446 else if (hardness == 1.0f) {
2447 final_len = cache->
radius;
2450 p = (p - hardness) / (1.0f - hardness);
2451 final_len = p * cache->
radius;
2478 float t[3], bb_min[3], bb_max[3];
2480 if (
data->ignore_fully_ineffective) {
2489 if (
data->original) {
2496 for (
int i = 0; i < 3; i++) {
2497 if (bb_min[i] >
center[i]) {
2498 nearest[i] = bb_min[i];
2500 else if (bb_max[i] <
center[i]) {
2501 nearest[i] = bb_max[i];
2516 float bb_min[3], bb_max[3];
2518 if (
data->ignore_fully_ineffective) {
2524 if (
data->original) {
2531 float dummy_co[3], dummy_depth;
2533 data->dist_ray_to_aabb_precalc, bb_min, bb_max, dummy_co, &dummy_depth);
2537 return dist_sq <
data->radius_squared ||
true;
2542 for (
int i = 0; i < 3; i++) {
2547 bool do_clip =
false;
2582 .original = use_original,
2583 .ignore_fully_ineffective =
false,
2607 .original = use_original,
2622 .original = use_original,
2623 .dist_ray_to_aabb_precalc = &dist_ray_to_aabb_precalc,
2669 const bool update_normal =
2695 const float xy_delta[2] = {0.0f, 1.0f};
2750 #define SCULPT_TILT_SENSITIVITY 0.7f
2753 if (!
U.experimental.use_sculpt_tools_tilt) {
2758 float normal_tilt_y[3];
2760 float normal_tilt_xy[3];
2866 const float pivot[3])
2868 for (
int i = 0; i < 3; i++) {
2870 if (!(symm & symm_it)) {
2873 if (symmarea & symm_it) {
2876 if (pivot[i] < 0.0f) {
2885 const float pivot[3])
2887 for (
int i = 0; i < 3; i++) {
2889 if (!(symm & symm_it)) {
2892 if (symmarea & symm_it) {
2895 if (pivot[i] < 0.0f) {
3037 ss, &test,
data->brush->falloff_shape);
3041 if (!sculpt_brush_test_sq_fn(&test, vd.
co)) {
3069 float gravity_vector[3];
3100 float(*ofs)[3] =
NULL;
3102 const int kb_act_idx = ob->
shapenr - 1;
3116 if ((currkey != kb) && (currkey->
relative == kb_act_idx)) {
3153 const float radius_scale = 1.25f;
3155 ob, sd, brush, use_original, radius_scale, &totnode);
3180 for (n = 0; n < totnode; n++) {
3278 float radius_scale = 1.0f;
3288 radius_scale = 2.0f;
3374 ob, 1.0f, 0.0f, 0.0f,
false,
true);
3543 float disp[3], newco[3];
3566 const bool use_orco =
data->use_proxies_orco;
3573 if (use_orco && !ss->
bm) {
3594 for (
int p = 0; p < proxy_count; p++) {
3637 .use_proxies_orco = use_orco,
3657 .use_proxies_orco =
false,
3731 float(*vertCos)[3] =
NULL;
3784 float frac = 1.0f / max_overlap_count(sd);
3785 float reduce = (feather -
frac) / (1.0f -
frac);
3787 printf(
"feather: %f frac: %f reduce: %f\n", feather,
frac, reduce);
3833 const float radius = cache->
radius;
3835 const float *bbMin = bb->
vec[0];
3836 const float *bbMax = bb->
vec[6];
3847 float original_initial_location[3];
3851 for (
int dim = 0; dim < 3; dim++) {
3853 start[dim] = (bbMin[dim] - orgLoc[dim] - radius) / step[dim];
3854 end[dim] = (bbMax[dim] - orgLoc[dim] + radius) / step[dim];
3857 start[dim] = end[dim] = 0;
3863 action(sd, ob, brush, ups, paint_mode_settings);
3867 for (cur[0] = start[0]; cur[0] <= end[0]; cur[0]++) {
3868 for (cur[1] = start[1]; cur[1] <= end[1]; cur[1]++) {
3869 for (cur[2] = start[2]; cur[2] <= end[2]; cur[2]++) {
3870 if (!cur[0] && !cur[1] && !cur[2]) {
3877 for (
int dim = 0; dim < 3; dim++) {
3878 cache->
location[dim] = cur[dim] * step[dim] + orgLoc[dim];
3880 cache->
initial_location[dim] = cur[dim] * step[dim] + original_initial_location[dim];
3882 action(sd, ob, brush, ups, paint_mode_settings);
3896 const float UNUSED(feather))
3900 for (
int i = 1; i < sd->
radial_symm[axis -
'X']; i++) {
3904 do_tiled(sd, ob, brush, ups, paint_mode_settings, action);
3941 for (
int i = 0; i <= symm; i++) {
3949 do_tiled(sd, ob, brush, ups, paint_mode_settings, action);
3951 do_radial_symmetry(sd, ob, brush, ups, paint_mode_settings, action, i,
'X', feather);
3952 do_radial_symmetry(sd, ob, brush, ups, paint_mode_settings, action, i,
'Y', feather);
3953 do_radial_symmetry(sd, ob, brush, ups, paint_mode_settings, action, i,
'Z', feather);
3984 return "Draw Brush";
3986 return "Smooth Brush";
3988 return "Crease Brush";
3990 return "Blob Brush";
3992 return "Pinch Brush";
3994 return "Inflate Brush";
3996 return "Grab Brush";
3998 return "Nudge Brush";
4000 return "Thumb Brush";
4002 return "Layer Brush";
4004 return "Flatten Brush";
4006 return "Clay Brush";
4008 return "Clay Strips Brush";
4010 return "Clay Thumb Brush";
4012 return "Fill Brush";
4014 return "Scrape Brush";
4016 return "Snake Hook Brush";
4018 return "Rotate Brush";
4020 return "Mask Brush";
4022 return "Simplify Brush";
4024 return "Draw Sharp Brush";
4026 return "Elastic Deform Brush";
4028 return "Pose Brush";
4030 return "Multi-plane Scrape Brush";
4032 return "Slide/Relax Brush";
4034 return "Boundary Brush";
4036 return "Cloth Brush";
4038 return "Draw Face Sets";
4040 return "Multires Displacement Eraser";
4042 return "Multires Displacement Smear";
4044 return "Paint Brush";
4046 return "Smear Brush";
4100 for (
int i = 0; i < 3; i++) {
4114 float imtx_mirror_ob[4][4];
4192 float viewDir[3] = {0.0f, 0.0f, 1.0f};
4200 for (
int i = 0; i < 3; i++) {
4262 cache->
brush = brush;
4320 #define PIXEL_INPUT_THRESHHOLD 5
4325 #undef PIXEL_INPUT_THRESHHOLD
4337 return initial_size * clay_stabilized_pressure;
4340 return initial_size * cache->
pressure;
4387 const float mval[2] = {
4411 float grab_location[3], imat[4][4], delta[3], loc[3];
4507 const float eps = 0.00001f;
4524 float axis[3],
angle;
4734 bool use_origco =
false;
4743 origco = (unode) ? unode->
co :
NULL;
4744 use_origco = origco ?
true :
false;
4771 bool use_origco =
false;
4780 origco = (unode) ? unode->
co :
NULL;
4781 use_origco = origco ?
true :
false;
4799 const float mval[2],
4802 float ray_normal[3],
4837 const float mval[2],
4838 bool use_sampled_normal)
4847 float ray_start[3], ray_end[3], ray_normal[3], depth, face_normal[3], sampled_normal[3],
4849 float viewDir[3] = {0.0f, 0.0f, 1.0f};
4851 bool original =
false;
4873 .ray_start = ray_start,
4874 .ray_normal = ray_normal,
4876 .face_normal = face_normal,
4914 if (!use_sampled_normal) {
4966 const float mval[2],
4967 bool force_original)
4973 float ray_start[3], ray_end[3], ray_normal[3], depth, face_normal[3];
4983 original = force_original || ((cache) ? cache->
original :
false);
5029 .ray_start = ray_start,
5030 .ray_normal = ray_normal,
5032 .dist_sq_to_ray = FLT_MAX,
5070 bool need_pmap, needs_colors;
5071 bool need_mask =
false;
5121 for (
int i = 0; i < ss->
totfaces; i++) {
5137 float bb_min[3], bb_max[3];
5242 if (rv3d != current_rv3d) {
5518 int ignore_background_click;
5628 ot->
idname =
"SCULPT_OT_brush_stroke";
5646 "ignore_background_click",
5648 "Ignore Background Click",
5649 "Clicks on the background do not start the stroke");
5691 totvert,
sizeof(
int),
"fake neighbor");
5692 for (
int i = 0; i < totvert; i++) {
5732 if (distance_squared < nvtd->nearest_vertex_distance_squared &&
5733 distance_squared < data->max_distance_squared) {
5743 void *__restrict chunk_join,
5744 void *__restrict chunk)
5766 .radius_squared = max_distance * max_distance,
5780 .max_distance_squared = max_distance * max_distance,
5829 for (
int i = 0; i < totvert; i++) {
5834 for (
int i = 0; i < totvert; i++) {
5858 base_mesh->
totedge,
sizeof(
int),
"Adjacent face edge count");
5860 for (
int p = 0; p < base_mesh->
totpoly; p++) {
5864 adjacent_faces_edge_count[loop->
e]++;
5868 for (
int e = 0;
e < base_mesh->
totedge;
e++) {
5869 if (adjacent_faces_edge_count[
e] < 2) {
5895 for (
int i = 0; i < totvert; i++) {
5896 const int from_v = i;
typedef float(TangentPoint)[2]
Generic geometry attributes built on CustomData.
struct CustomDataLayer * BKE_id_attributes_active_color_get(const struct ID *id)
eAttrDomain BKE_id_attribute_domain(const struct ID *id, const struct CustomDataLayer *layer)
void BKE_brush_size_set(struct Scene *scene, struct Brush *brush, int size)
float BKE_brush_curve_strength(const struct Brush *br, float p, float len)
float BKE_brush_sample_tex_3d(const struct Scene *scene, const struct Brush *br, const float point[3], float rgba[4], int thread, struct ImagePool *pool)
bool BKE_brush_use_size_pressure(const struct Brush *brush)
float BKE_brush_alpha_get(const struct Scene *scene, const struct Brush *brush)
int BKE_brush_size_get(const struct Scene *scene, const struct Brush *brush)
float BKE_brush_unprojected_radius_get(const struct Scene *scene, const struct Brush *brush)
void BKE_brush_unprojected_radius_set(struct Scene *scene, struct Brush *brush, float unprojected_radius)
bool BKE_brush_use_locked_size(const struct Scene *scene, const struct Brush *brush)
bool BKE_brush_use_alpha_pressure(const struct Brush *brush)
BLI_INLINE float * CCG_elem_mask(const CCGKey *key, CCGElem *elem)
BLI_INLINE CCGElem * CCG_elem_offset(const CCGKey *key, CCGElem *elem, int offset)
BLI_INLINE float * CCG_elem_no(const CCGKey *key, CCGElem *elem)
BLI_INLINE float * CCG_elem_co(const CCGKey *key, CCGElem *elem)
struct Scene * CTX_data_scene(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct View3D * CTX_wm_view3d(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct ToolSettings * CTX_data_tool_settings(const bContext *C)
struct RegionView3D * CTX_wm_region_view3d(const bContext *C)
int CustomData_get_offset(const struct CustomData *data, int type)
struct ImagePool * BKE_image_pool_new(void)
void BKE_keyblock_update_from_offset(const struct Object *ob, struct KeyBlock *kb, const float(*ofs)[3])
void BKE_keyblock_update_from_vertcos(const struct Object *ob, struct KeyBlock *kb, const float(*vertCos)[3])
bool BKE_keyblock_is_basis(const struct Key *key, int index)
float(* BKE_keyblock_convert_to_vertcos(const struct Object *ob, const struct KeyBlock *kb))[3]
struct ID * BKE_libblock_find_name(struct Main *bmain, short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int poly_get_adj_loops_from_vert(const struct MPoly *poly, const struct MLoop *mloop, unsigned int vert, unsigned int r_adj[2])
struct Mesh * BKE_mesh_from_object(struct Object *ob)
void BKE_mesh_tag_coords_changed(struct Mesh *mesh)
void multires_stitch_grids(struct Object *)
void multires_mark_as_modified(struct Depsgraph *depsgraph, struct Object *object, enum MultiresModifiedFlags flags)
General operations, lookup, etc. for blender objects.
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
struct Mesh * BKE_object_get_original_mesh(const struct Object *object)
const struct BoundBox * BKE_object_boundbox_get(struct Object *ob)
void BKE_paint_brush_set(struct Paint *paint, struct Brush *br)
#define PAINT_SYMM_AREA_DEFAULT
void BKE_sculpt_sync_face_sets_visibility_to_base_mesh(struct Mesh *mesh)
void BKE_sculpt_sync_face_sets_visibility_to_grids(struct Mesh *mesh, struct SubdivCCG *subdiv_ccg)
void BKE_sculpt_update_object_for_edit(struct Depsgraph *depsgraph, struct Object *ob_orig, bool need_pmap, bool need_mask, bool is_paint_tool)
struct Brush * BKE_paint_toolslots_brush_get(struct Paint *paint, int slot_index)
struct Brush * BKE_paint_brush(struct Paint *paint)
#define SCULPT_FACE_SET_NONE
struct Paint * BKE_paint_get_active_from_context(const struct bContext *C)
bool BKE_sculptsession_use_pbvh_draw(const struct Object *ob, const struct RegionView3D *rv3d)
void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
A BVH for high poly meshes.
bool BKE_pbvh_node_fully_masked_get(PBVHNode *node)
void BKE_pbvh_node_free_proxies(PBVHNode *node)
void BKE_pbvh_node_mark_update(PBVHNode *node)
BLI_bitmap ** BKE_pbvh_get_grid_visibility(const PBVH *pbvh)
void BKE_pbvh_node_get_bm_orco_data(PBVHNode *node, int(**r_orco_tris)[3], int *r_orco_tris_num, float(**r_orco_coords)[3])
#define BKE_pbvh_vertex_iter_begin(pbvh, node, vi, mode)
void BKE_pbvh_node_get_original_BB(PBVHNode *node, float bb_min[3], float bb_max[3])
struct CCGElem ** BKE_pbvh_get_grids(const PBVH *pbvh)
void BKE_pbvh_node_mark_update_color(PBVHNode *node)
void BKE_pbvh_raycast_project_ray_root(PBVH *pbvh, bool original, float ray_start[3], float ray_end[3], float ray_normal[3])
void BKE_pbvh_gather_proxies(PBVH *pbvh, PBVHNode ***r_array, int *r_tot)
void BKE_pbvh_redraw_BB(PBVH *pbvh, float bb_min[3], float bb_max[3])
void BKE_pbvh_find_nearest_to_ray(PBVH *pbvh, BKE_pbvh_HitOccludedCallback cb, void *data, const float ray_start[3], const float ray_normal[3], bool original)
void BKE_pbvh_bmesh_node_save_orig(struct BMesh *bm, PBVHNode *node)
float(* BKE_pbvh_vert_coords_alloc(struct PBVH *pbvh))[3]
void BKE_pbvh_node_get_BB(PBVHNode *node, float bb_min[3], float bb_max[3])
void BKE_pbvh_node_color_buffer_free(PBVH *pbvh)
PBVHType BKE_pbvh_type(const PBVH *pbvh)
float BKE_pbvh_node_get_tmin(PBVHNode *node)
bool BKE_pbvh_bmesh_update_topology(PBVH *pbvh, PBVHTopologyUpdateMode mode, const float center[3], const float view_normal[3], float radius, bool use_frontface, bool use_projected)
struct BMesh * BKE_pbvh_get_bmesh(PBVH *pbvh)
bool BKE_pbvh_node_raycast(PBVH *pbvh, PBVHNode *node, float(*origco)[3], bool use_origco, const float ray_start[3], const float ray_normal[3], struct IsectRayPrecalc *isect_precalc, float *depth, int *active_vertex_index, int *active_face_grid_index, float *face_normal)
void BKE_pbvh_raycast(PBVH *pbvh, BKE_pbvh_HitOccludedCallback cb, void *data, const float ray_start[3], const float ray_normal[3], bool original)
#define BKE_pbvh_vertex_iter_end
void BKE_pbvh_vert_tag_update_normal(PBVH *pbvh, int index)
const float(* BKE_pbvh_get_vert_normals(const PBVH *pbvh))[3]
int BKE_pbvh_get_grid_num_vertices(const PBVH *pbvh)
const struct CCGKey * BKE_pbvh_get_grid_key(const PBVH *pbvh)
void BKE_pbvh_build_pixels(PBVH *pbvh, struct Mesh *mesh, struct Image *image, struct ImageUser *image_user)
bool BKE_pbvh_node_find_nearest_to_ray(PBVH *pbvh, PBVHNode *node, float(*origco)[3], bool use_origco, const float ray_start[3], const float ray_normal[3], float *depth, float *dist_sq)
void BKE_pbvh_ensure_node_loops(PBVH *pbvh)
PBVHProxyNode * BKE_pbvh_node_add_proxy(PBVH *pbvh, PBVHNode *node)
void BKE_pbvh_vertex_color_set(PBVH *pbvh, int vertex, const float color[4])
bool BKE_pbvh_node_fully_hidden_get(PBVHNode *node)
void BKE_pbvh_parallel_range_settings(struct TaskParallelSettings *settings, bool use_threading, int totnode)
struct MVert * BKE_pbvh_get_verts(const PBVH *pbvh)
void BKE_pbvh_update_vertex_data(PBVH *pbvh, int flags)
void BKE_pbvh_bmesh_after_stroke(PBVH *pbvh)
void BKE_pbvh_vertex_color_get(const PBVH *pbvh, int vertex, float r_color[4])
void BKE_pbvh_node_mark_update_mask(PBVHNode *node)
void BKE_pbvh_update_bounds(PBVH *pbvh, int flags)
void BKE_pbvh_bounding_box(const PBVH *pbvh, float min[3], float max[3])
void BKE_pbvh_node_mark_redraw(PBVHNode *node)
void BKE_pbvh_bmesh_detail_size_set(PBVH *pbvh, float detail_size)
void BKE_pbvh_node_get_proxies(PBVHNode *node, PBVHProxyNode **proxies, int *proxy_count)
void BKE_pbvh_node_mark_topology_update(PBVHNode *node)
void BKE_pbvh_search_gather(PBVH *pbvh, BKE_pbvh_SearchCallback scb, void *search_data, PBVHNode ***array, int *tot)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_subdiv_ccg_neighbor_coords_get(const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
void BKE_subdiv_ccg_eval_limit_point(const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, float r_point[3])
SubdivCCGAdjacencyType BKE_subdiv_ccg_coarse_mesh_adjacency_info_get(const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const struct MLoop *mloop, const struct MPoly *mpoly, int *r_v1, int *r_v2)
@ SUBDIV_CCG_ADJACENT_EDGE
@ SUBDIV_CCG_ADJACENT_VERTEX
@ SUBDIV_CCG_ADJACENT_NONE
int BKE_subdiv_ccg_grid_to_face_index(const SubdivCCG *subdiv_ccg, int grid_index)
@ MULTIRES_COORDS_MODIFIED
#define BLI_assert_msg(a, msg)
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_SET(_bitmap, _index, _set)
Dial * BLI_dial_init(const float start_position[2], float threshold)
float BLI_dial_angle(Dial *dial, const float current_position[2])
void BLI_gsqueue_free(GSQueue *queue)
GSQueue * BLI_gsqueue_new(size_t elem_size)
void BLI_gsqueue_push(GSQueue *queue, const void *item)
void BLI_gsqueue_pop(GSQueue *queue, void *r_item)
bool BLI_gsqueue_is_empty(const GSQueue *queue)
#define LISTBASE_FOREACH(type, var, list)
MINLINE float max_ff(float a, float b)
MINLINE float pow2f(float x)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float min_ff(float a, float b)
MINLINE float square_f(float a)
MINLINE float pow3f(float x)
MINLINE float pow4f(float x)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
void isect_ray_tri_watertight_v3_precalc(struct IsectRayPrecalc *isect_precalc, const float ray_direction[3])
MINLINE float plane_point_side_v3(const float plane[4], const float co[3])
void closest_to_plane_normalized_v3(float r_close[3], const float plane[4], const float pt[3])
void dist_squared_ray_to_aabb_v3_precalc(struct DistRayAABB_Precalc *neasrest_precalc, const float ray_origin[3], const float ray_direction[3])
void closest_on_tri_to_point_v3(float r[3], const float p[3], const float v1[3], const float v2[3], const float v3[3])
float dist_squared_ray_to_aabb_v3(const struct DistRayAABB_Precalc *data, const float bb_min[3], const float bb_max[3], float r_point[3], float *r_depth)
float normal_tri_v3(float n[3], const float v1[3], const float v2[3], const float v3[3])
void mul_m3_v3(const float M[3][3], float r[3])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void unit_m4(float m[4][4])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void scale_m4_fl(float R[4][4], float scale)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
float mat4_to_scale(const float M[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void rotate_m4(float mat[4][4], char axis, float angle)
void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3])
void normalize_m4(float R[4][4]) ATTR_NONNULL()
void axis_angle_to_mat3_single(float R[3][3], char axis, float angle)
void rotation_between_vecs_to_quat(float q[4], const float v1[3], const float v2[3])
void axis_angle_normalized_to_quat(float r[4], const float axis[3], float angle)
void quat_to_axis_angle(float axis[3], float *angle, const float q[4])
void rotate_v3_v3v3fl(float r[3], const float p[3], const float axis[3], float angle)
MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3_int(int r[3], const int a[3])
void project_plane_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void zero_v4(float r[4])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void zero_v2(float r[2])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE float len_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void zero_v3(float r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v2_v2_int(int r[2], const int a[2])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void BLI_rcti_union(struct rcti *rct_a, const struct rcti *rct_b)
bool BLI_rcti_is_empty(const struct rcti *rect)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
int BLI_task_parallel_thread_id(const TaskParallelTLS *tls)
#define UNUSED_FUNCTION(x)
#define ARRAY_SET_ITEMS(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
#define ID_REAL_USERS(id)
#define SCULPT_TOOL_HAS_DYNTOPO(t)
#define SCULPT_TOOL_HAS_ACCUMULATE(t)
@ BRUSH_DEFORM_TARGET_CLOTH_SIM
@ BRUSH_DEFORM_TARGET_GEOMETRY
#define SCULPT_TOOL_HAS_TOPOLOGY_RAKE(t)
@ BRUSH_GRAB_ACTIVE_VERTEX
@ BRUSH_INVERSE_SMOOTH_PRESSURE
@ BRUSH_INVERT_TO_SCRAPE_FILL
@ BRUSH_CLOTH_DEFORM_EXPAND
@ BRUSH_CLOTH_DEFORM_GRAB
@ BRUSH_CLOTH_DEFORM_SNAKE_HOOK
@ SCULPT_TOOL_DRAW_FACE_SETS
@ SCULPT_TOOL_DISPLACEMENT_ERASER
@ SCULPT_TOOL_SLIDE_RELAX
@ SCULPT_TOOL_DISPLACEMENT_SMEAR
@ SCULPT_TOOL_MULTIPLANE_SCRAPE
@ SCULPT_TOOL_ELASTIC_DEFORM
@ SCULPT_TOOL_CLAY_STRIPS
@ PAINT_FALLOFF_SHAPE_SPHERE
@ PAINT_FALLOFF_SHAPE_TUBE
@ BRUSH_SMOOTH_DEFORM_SURFACE
@ BRUSH_SMOOTH_DEFORM_LAPLACIAN
@ BRUSH_PAINT_WET_MIX_PRESSURE
@ BRUSH_PAINT_HARDNESS_PRESSURE
@ BRUSH_PAINT_FLOW_PRESSURE
@ BRUSH_PAINT_DENSITY_PRESSURE
@ BRUSH_PAINT_WET_PERSISTENCE_PRESSURE
@ BRUSH_PAINT_WET_MIX_PRESSURE_INVERT
@ BRUSH_PAINT_HARDNESS_PRESSURE_INVERT
@ BRUSH_PAINT_FLOW_PRESSURE_INVERT
@ BRUSH_PAINT_DENSITY_PRESSURE_INVERT
@ BRUSH_PAINT_WET_PERSISTENCE_PRESSURE_INVERT
@ BRUSH_AREA_RADIUS_PRESSURE
#define SCULPT_TOOL_HAS_NORMAL_WEIGHT(t)
#define SCULPT_TOOL_HAS_RAKE(t)
Object is a sort of wrapper for general info.
@ SCULPT_DYNTOPO_SUBDIVIDE
@ SCULPT_DYNTOPO_DETAIL_MANUAL
@ SCULPT_DYNTOPO_DETAIL_CONSTANT
@ SCULPT_DYNTOPO_COLLAPSE
@ SCULPT_DYNTOPO_DETAIL_BRUSH
#define MTEX_MAP_MODE_AREA
@ V3D_SHADING_VERTEX_COLOR
#define RV3D_CLIPPING_ENABLED(v3d, rv3d)
#define OPERATOR_RETVAL_CHECK(ret)
void ED_paint_tool_update_sticky_shading_color(struct bContext *C, struct Object *ob)
void ED_image_undo_push_begin(const char *name, int paint_mode)
void ED_image_undo_push_end(void)
void ED_region_tag_redraw_partial(struct ARegion *region, const struct rcti *rct, bool rebuild)
void ED_area_tag_redraw_regiontype(ScrArea *area, int type)
void ED_region_tag_redraw(struct ARegion *region)
bool ED_view3d_win_to_segment_clipped(const struct Depsgraph *depsgraph, const struct ARegion *region, const struct View3D *v3d, const float mval[2], float r_ray_start[3], float r_ray_end[3], bool do_clip_planes)
void ED_view3d_win_to_delta(const struct ARegion *region, const float xy_delta[2], float zfac, float r_out[3])
void ED_view3d_viewcontext_init(struct bContext *C, struct ViewContext *vc, struct Depsgraph *depsgraph)
void ED_view3d_ob_project_mat_get(const struct RegionView3D *v3d, const struct Object *ob, float r_pmat[4][4])
bool ED_view3d_clipping_test(const struct RegionView3D *rv3d, const float co[3], bool is_local)
void ED_view3d_project_float_v2_m4(const struct ARegion *region, const float co[3], float r_co[2], const float mat[4][4])
float ED_view3d_calc_zfac(const struct RegionView3D *rv3d, const float co[3])
void ED_view3d_win_to_3d(const struct View3D *v3d, const struct ARegion *region, const float depth_pt[3], const float mval[2], float r_out[3])
void view3d_operator_needs_opengl(const struct bContext *C)
void ED_view3d_init_mats_rv3d(const struct Object *ob, struct RegionView3D *rv3d)
NSNotificationCenter * center
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble x2
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture TEX_NOISE
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
void ntreeTexEndExecTree(struct bNodeTreeExec *exec)
struct bNodeTreeExec * ntreeTexBeginExecTree(struct bNodeTree *ntree)
Platform independent time functions.
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_elem_index_get(ele)
#define BM_elem_flag_set(ele, hflag, val)
#define BM_elem_flag_test(ele, hflag)
#define BM_ITER_ELEM(ele, iter, data, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_log_original_vert_data(BMLog *log, BMVert *v, const float **r_co, const float **r_no)
float BM_log_original_mask(BMLog *log, BMVert *v)
const float * BM_log_original_vert_co(BMLog *log, BMVert *v)
int BM_mesh_elem_count(BMesh *bm, const char htype)
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
bool BM_vert_is_boundary(const BMVert *v)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
const Depsgraph * depsgraph
SyclQueue void void size_t num_bytes void
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
IconTextureDrawCall normal
CCL_NAMESPACE_BEGIN ccl_device float invert(float color, float factor)
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_reallocN_id)(void *vmemh, size_t len, const char *str)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
ccl_device_inline float frac(float x, int *ix)
static void area(int d1, int d2, int e1, int e2, float weights[2])
T distance_squared(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
thread_local int thread_id
std::atomic< int > next_id
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
static const pxr::TfToken rgba("rgba", pxr::TfToken::Immortal)
CCL_NAMESPACE_BEGIN ccl_device float fade(float t)
void paint_stroke_cancel(struct bContext *C, struct wmOperator *op, struct PaintStroke *stroke)
int paint_stroke_modal(struct bContext *C, struct wmOperator *op, const struct wmEvent *event, struct PaintStroke **stroke_p)
int paint_stroke_exec(struct bContext *C, struct wmOperator *op, struct PaintStroke *stroke)
struct PaintStroke * paint_stroke_new(struct bContext *C, struct wmOperator *op, StrokeGetLocation get_location, StrokeTestStart test_start, StrokeUpdateStep update_step, StrokeRedraw redraw, StrokeDone done, int event_type)
BLI_INLINE void flip_v3(float v[3], const ePaintSymmetryFlags symm)
bool paint_convert_bb_to_rect(struct rcti *rect, const float bb_min[3], const float bb_max[3], const struct ARegion *region, struct RegionView3D *rv3d, struct Object *ob)
float paint_calc_object_space_radius(struct ViewContext *vc, const float center[3], float pixel_radius)
void paint_stroke_free(struct bContext *C, struct wmOperator *op, struct PaintStroke *stroke)
BLI_INLINE void flip_qt(float quat[4], const ePaintSymmetryFlags symm)
void paint_calc_redraw_planes(float planes[4][4], const struct ARegion *region, struct Object *ob, const struct rcti *screen_rect)
bool paint_supports_dynamic_size(struct Brush *br, enum ePaintMode mode)
BLI_INLINE void flip_qt_qt(float out[4], const float in[4], const ePaintSymmetryFlags symm)
float paint_get_tex_pixel(const struct MTex *mtex, float u, float v, struct ImagePool *pool, int thread)
struct ViewContext * paint_stroke_view_context(struct PaintStroke *stroke)
bool PAINT_brush_tool_poll(struct bContext *C)
void paint_stroke_operator_properties(struct wmOperatorType *ot)
BLI_INLINE void flip_v3_v3(float out[3], const float in[3], const ePaintSymmetryFlags symm)
float paint_stroke_distance_get(struct PaintStroke *stroke)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
static const char * sculpt_tool_name(Sculpt *sd)
const float * SCULPT_vertex_co_get(SculptSession *ss, int index)
bool SCULPT_brush_test_sphere(SculptBrushTest *test, const float co[3])
int SCULPT_vertex_count_get(SculptSession *ss)
static void sculpt_pbvh_update_pixels(PaintModeSettings *paint_mode_settings, SculptSession *ss, Object *ob)
void SCULPT_orig_vert_data_update(SculptOrigVertData *orig_data, PBVHVertexIter *iter)
void SCULPT_floodfill_add_and_skip_initial(SculptFloodFill *flood, int index)
void SCULPT_OT_brush_stroke(wmOperatorType *ot)
void SCULPT_floodfill_add_initial_with_symmetry(Sculpt *sd, Object *ob, SculptSession *ss, SculptFloodFill *flood, int index, float radius)
void SCULPT_orig_vert_data_init(SculptOrigVertData *data, Object *ob, PBVHNode *node, SculptUndoType type)
void SCULPT_boundary_info_ensure(Object *object)
static bool sculpt_needs_pbvh_pixels(PaintModeSettings *paint_mode_settings, const Brush *brush, Object *ob)
void SCULPT_vertcos_to_key(Object *ob, KeyBlock *kb, const float(*vertCos)[3])
void ED_sculpt_redraw_planes_get(float planes[4][4], ARegion *region, Object *ob)
static void sculpt_extend_redraw_rect_previous(Object *ob, rcti *rect)
int SCULPT_active_vertex_get(SculptSession *ss)
bool SCULPT_cursor_geometry_info_update(bContext *C, SculptCursorGeometryInfo *out, const float mval[2], bool use_sampled_normal)
int SCULPT_nearest_vertex_get(Sculpt *sd, Object *ob, const float co[3], float max_distance, bool use_original)
static void do_gravity(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float bstrength)
bool SCULPT_pbvh_calc_area_normal(const Brush *brush, Object *ob, PBVHNode **nodes, int totnode, bool use_threading, float r_area_no[3])
void SCULPT_floodfill_init(SculptSession *ss, SculptFloodFill *flood)
int SCULPT_plane_point_side(const float co[3], const float plane[4])
void SCULPT_face_set_visibility_set(SculptSession *ss, int face_set, bool visible)
static int SCULPT_fake_neighbor_search(Sculpt *sd, Object *ob, const int index, float max_distance)
void SCULPT_fake_neighbors_ensure(Sculpt *sd, Object *ob, const float max_dist)
static void fake_neighbor_search_reduce(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
bool SCULPT_vertex_has_face_set(SculptSession *ss, int index, int face_set)
void SCULPT_vertex_persistent_normal_get(SculptSession *ss, int index, float no[3])
static void calc_area_normal_and_center_reduce(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
static int SCULPT_vertex_get_connected_component(SculptSession *ss, int index)
bool SCULPT_stroke_get_location(bContext *C, float out[3], const float mval[2], bool force_original)
struct NearestVertexTLSData NearestVertexTLSData
static bool sculpt_brush_use_topology_rake(const SculptSession *ss, const Brush *brush)
static void sculpt_combine_proxies(Sculpt *sd, Object *ob)
static int sculpt_brush_needs_normal(const SculptSession *ss, const Brush *brush)
bool SCULPT_vertex_has_unique_face_set(SculptSession *ss, int index)
static int sculpt_brush_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event)
void SCULPT_cache_calc_brushdata_symm(StrokeCache *cache, const char symm, const char axis, const float angle)
const float * SCULPT_brush_frontface_normal_from_falloff_shape(SculptSession *ss, char falloff_shape)
static void do_nearest_vertex_get_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
SculptBrushTestFn SCULPT_brush_test_init_with_falloff_shape(SculptSession *ss, SculptBrushTest *test, char falloff_shape)
void SCULPT_tilt_effective_normal_get(const SculptSession *ss, const Brush *brush, float r_no[3])
struct NearestVertexFakeNeighborTLSData NearestVertexFakeNeighborTLSData
static void do_brush_action_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
void SCULPT_fake_neighbors_free(Object *ob)
bool SCULPT_vertex_any_face_set_visible_get(SculptSession *ss, int index)
const float * SCULPT_vertex_co_for_grab_active_get(SculptSession *ss, int index)
BLI_INLINE bool sculpt_brush_test_clipping(const SculptBrushTest *test, const float co[3])
static void sculpt_vertex_neighbor_add(SculptVertexNeighborIter *iter, int neighbor_index)
void SCULPT_vertex_face_set_set(SculptSession *ss, int index, int face_set)
bool SCULPT_brush_test_circle_sq(SculptBrushTest *test, const float co[3])
void SCULPT_floodfill_add_initial(SculptFloodFill *flood, int index)
void SCULPT_calc_area_normal_and_center(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3], float r_area_co[3])
bool SCULPT_is_symmetry_iteration_valid(char i, char symm)
static void sculpt_flush_pbvhvert_deform(Object *ob, PBVHVertexIter *vd)
float SCULPT_brush_strength_factor(SculptSession *ss, const Brush *br, const float brush_point[3], const float len, const float vno[3], const float fno[3], const float mask, const int vertex_index, const int thread_id)
void SCULPT_connected_components_ensure(Object *ob)
const float * SCULPT_active_vertex_co_get(SculptSession *ss)
static void calc_area_normal_and_center_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
void SCULPT_vertex_random_access_ensure(SculptSession *ss)
static void do_symmetrical_brush_actions(Sculpt *sd, Object *ob, BrushActionFunc action, UnifiedPaintSettings *ups, PaintModeSettings *paint_mode_settings)
void SCULPT_flush_update_done(const bContext *C, Object *ob, SculptUpdateType update_flags)
static void do_tiled(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups, PaintModeSettings *paint_mode_settings, BrushActionFunc action)
static int sculpt_brush_stroke_exec(bContext *C, wmOperator *op)
bool SCULPT_brush_test_cube(SculptBrushTest *test, const float co[3], const float local[4][4], const float roundness)
bool SCULPT_search_sphere_cb(PBVHNode *node, void *data_v)
static void sculpt_combine_proxies_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
void SCULPT_stroke_modifiers_check(const bContext *C, Object *ob, const Brush *brush)
void SCULPT_vertex_visible_set(SculptSession *ss, int index, bool visible)
static void sculpt_vertex_neighbors_get_grids(SculptSession *ss, const int index, const bool include_duplicates, SculptVertexNeighborIter *iter)
bool SCULPT_vertex_visible_get(SculptSession *ss, int index)
static void SCULPT_flush_stroke_deform_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
void SCULPT_vertex_color_set(SculptSession *ss, int index, const float color[4])
static void UNUSED_FUNCTION() sculpt_visibility_sync_vertex_to_face_sets(SculptSession *ss, int index)
void SCULPT_combine_transform_proxies(Sculpt *sd, Object *ob)
void SCULPT_face_sets_visibility_all_set(SculptSession *ss, bool visible)
static void paint_mesh_restore_co_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
float * SCULPT_brush_deform_target_vertex_co_get(SculptSession *ss, const int deform_target, PBVHVertexIter *iter)
static bool sculpt_check_unique_face_set_for_edge_in_base_mesh(SculptSession *ss, int v1, int v2)
static void sculpt_raycast_cb(PBVHNode *node, void *data_v, float *tmin)
void SCULPT_face_sets_visibility_invert(SculptSession *ss)
static void sculpt_restore_mesh(Sculpt *sd, Object *ob)
static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, PointerRNA *ptr)
void SCULPT_orig_vert_data_unode_init(SculptOrigVertData *data, Object *ob, SculptUndoNode *unode)
static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void SCULPT_flush_update_step(bContext *C, SculptUpdateType update_flags)
void SCULPT_vertex_color_get(const SculptSession *ss, int index, float r_color[4])
void SCULPT_vertex_normal_get(SculptSession *ss, int index, float no[3])
static void sculpt_update_keyblock(Object *ob)
void(* BrushActionFunc)(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups, PaintModeSettings *paint_mode_settings)
void SCULPT_vertex_limit_surface_get(SculptSession *ss, int index, float r_co[3])
static PBVHNode ** sculpt_pbvh_gather_cursor_update(Object *ob, Sculpt *sd, bool use_original, int *r_totnode)
float SCULPT_raycast_init(ViewContext *vc, const float mval[2], float ray_start[3], float ray_end[3], float ray_normal[3], bool original)
struct SculptTopologyIDFloodFillData SculptTopologyIDFloodFillData
static bool sculpt_stroke_test_start(bContext *C, struct wmOperator *op, const float mval[2])
bool SCULPT_stroke_is_dynamic_topology(const SculptSession *ss, const Brush *brush)
bool SCULPT_vertex_is_boundary(const SculptSession *ss, const int index)
static void sculpt_fix_noise_tear(Sculpt *sd, Object *ob)
void SCULPT_flip_v3_by_symm_area(float v[3], const ePaintSymmetryFlags symm, const ePaintSymmetryAreas symmarea, const float pivot[3])
static void smooth_brush_toggle_off(const bContext *C, Paint *paint, StrokeCache *cache)
static bool sculpt_tool_is_proxy_used(const char sculpt_tool)
static void sculpt_brush_stroke_cancel(bContext *C, wmOperator *op)
bool SCULPT_mode_poll_view3d(bContext *C)
float SCULPT_brush_plane_offset_get(Sculpt *sd, SculptSession *ss)
void SCULPT_floodfill_free(SculptFloodFill *flood)
static float calc_radial_symmetry_feather(Sculpt *sd, StrokeCache *cache, const char symm, const char axis)
bool SCULPT_mode_poll(bContext *C)
void SCULPT_fake_neighbors_enable(Object *ob)
bool SCULPT_stroke_is_main_symmetry_pass(StrokeCache *cache)
static void sculpt_update_cache_paint_variants(StrokeCache *cache, const Brush *brush)
#define SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY
void SCULPT_active_vertex_normal_get(SculptSession *ss, float normal[3])
static bool sculpt_needs_delta_from_anchored_origin(Brush *brush)
static void SCULPT_fake_neighbor_add(SculptSession *ss, int v_index_a, int v_index_b)
bool SCULPT_vertex_all_face_sets_visible_get(const SculptSession *ss, int index)
#define SCULPT_TILT_SENSITIVITY
static void calc_brush_local_mat(const Brush *brush, Object *ob, float local_mat[4][4])
static bool sculpt_needs_connectivity_info(const Sculpt *sd, const Brush *brush, SculptSession *ss, int stroke_mode)
void SCULPT_brush_test_init(SculptSession *ss, SculptBrushTest *test)
bool SCULPT_brush_test_sphere_sq(SculptBrushTest *test, const float co[3])
void SCULPT_tilt_apply_to_normal(float r_normal[3], StrokeCache *cache, const float tilt_strength)
int SCULPT_vertex_face_set_get(SculptSession *ss, int index)
static void calc_local_y(ViewContext *vc, const float center[3], float y[3])
static PBVHNode ** sculpt_pbvh_gather_generic(Object *ob, Sculpt *sd, const Brush *brush, bool use_original, float radius_scale, int *r_totnode)
static void paint_mesh_restore_co(Sculpt *sd, Object *ob)
bool SCULPT_has_loop_colors(const Object *ob)
static void sculpt_stroke_update_step(bContext *C, wmOperator *UNUSED(op), struct PaintStroke *stroke, PointerRNA *itemptr)
static bool sculpt_needs_delta_for_tip_orientation(Brush *brush)
static void smooth_brush_toggle_on(const bContext *C, Paint *paint, StrokeCache *cache)
static void sculpt_pose_fake_neighbors_free(SculptSession *ss)
void SCULPT_visibility_sync_all_vertex_to_face_sets(SculptSession *ss)
bool SCULPT_stroke_is_first_brush_step_of_symmetry_pass(StrokeCache *cache)
static void sculpt_rake_data_update(struct SculptRakeData *srd, const float co[3])
static void sculpt_vertex_neighbors_get_bmesh(SculptSession *ss, int index, SculptVertexNeighborIter *iter)
float SCULPT_vertex_mask_get(SculptSession *ss, int index)
static void update_brush_local_mat(Sculpt *sd, Object *ob)
static void sculpt_update_brush_delta(UnifiedPaintSettings *ups, Object *ob, Brush *brush)
static float calc_symmetry_feather(Sculpt *sd, StrokeCache *cache)
void SCULPT_fake_neighbors_disable(Object *ob)
@ SCULPT_TOPOLOGY_ID_DEFAULT
@ SCULPT_TOPOLOGY_ID_NONE
bool SCULPT_handles_colors_report(SculptSession *ss, ReportList *reports)
static void sculpt_find_nearest_to_ray_cb(PBVHNode *node, void *data_v, float *tmin)
static void sculpt_topology_update(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *UNUSED(ups), PaintModeSettings *UNUSED(paint_mode_settings))
int SCULPT_face_set_next_available_get(SculptSession *ss)
static bool sculpt_check_unique_face_set_in_base_mesh(SculptSession *ss, int index)
static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups, PaintModeSettings *paint_mode_settings)
static void SCULPT_fake_neighbor_init(SculptSession *ss, const float max_dist)
static void sculpt_init_mirror_clipping(Object *ob, SculptSession *ss)
int SCULPT_plane_trim(const StrokeCache *cache, const Brush *brush, const float val[3])
static void sculpt_brush_exit_tex(Sculpt *sd)
static bool sculpt_tool_has_cube_tip(const char sculpt_tool)
char SCULPT_mesh_symmetry_xyz_get(Object *object)
void SCULPT_calc_brush_plane(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3], float r_area_co[3])
static bool sculpt_tool_needs_original(const char sculpt_tool)
bool SCULPT_is_vertex_inside_brush_radius_symm(const float vertex[3], const float br_co[3], float radius, char symm)
void SCULPT_vertex_neighbors_get(SculptSession *ss, const int index, const bool include_duplicates, SculptVertexNeighborIter *iter)
bool SCULPT_search_circle_cb(PBVHNode *node, void *data_v)
void SCULPT_update_object_bounding_box(Object *ob)
static void do_radial_symmetry(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups, PaintModeSettings *paint_mode_settings, BrushActionFunc action, const char symm, const int axis, const float UNUSED(feather))
bool SCULPT_check_vertex_pivot_symmetry(const float vco[3], const float pco[3], const char symm)
static void do_fake_neighbor_search_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
static void update_sculpt_normal(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_cache_free(StrokeCache *cache)
void SCULPT_floodfill_add_active(Sculpt *sd, Object *ob, SculptSession *ss, SculptFloodFill *flood, float radius)
void SCULPT_flush_stroke_deform(Sculpt *sd, Object *ob, bool is_proxy_used)
static float sculpt_brush_dynamic_size_get(Brush *brush, StrokeCache *cache, float initial_size)
void SCULPT_calc_area_normal(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3])
bool SCULPT_stroke_is_first_brush_step(StrokeCache *cache)
static void sculpt_update_cache_invariants(bContext *C, Sculpt *sd, SculptSession *ss, wmOperator *op, const float mval[2])
const float * SCULPT_vertex_persistent_co_get(SculptSession *ss, int index)
bool SCULPT_get_redraw_rect(ARegion *region, RegionView3D *rv3d, Object *ob, rcti *rect)
MVert * SCULPT_mesh_deformed_mverts_get(SculptSession *ss)
static void nearest_vertex_get_reduce(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
bool SCULPT_poll_view3d(bContext *C)
static bool sculpt_brush_needs_rake_rotation(const Brush *brush)
bool SCULPT_poll(bContext *C)
ePaintSymmetryAreas SCULPT_get_vertex_symm_area(const float co[3])
static float calc_overlap(StrokeCache *cache, const char symm, const char axis, const float angle)
static void do_gravity_task_cb_ex(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
static bool over_mesh(bContext *C, struct wmOperator *UNUSED(op), const float mval[2])
int SCULPT_active_face_set_get(SculptSession *ss)
static bool SCULPT_connected_components_floodfill_cb(SculptSession *ss, int from_v, int to_v, bool UNUSED(is_duplicate), void *userdata)
static void sculpt_brush_init_tex(Sculpt *sd, SculptSession *ss)
void SCULPT_floodfill_execute(SculptSession *ss, SculptFloodFill *flood, bool(*func)(SculptSession *ss, int from_v, int to_v, bool is_duplicate, void *userdata), void *userdata)
static void sculpt_stroke_done(const bContext *C, struct PaintStroke *UNUSED(stroke))
void SCULPT_flip_quat_by_symm_area(float quat[4], const ePaintSymmetryFlags symm, const ePaintSymmetryAreas symmarea, const float pivot[3])
void SCULPT_clip(Sculpt *sd, SculptSession *ss, float co[3], const float val[3])
static bool sculpt_check_boundary_vertex_in_base_mesh(const SculptSession *ss, const int index)
void SCULPT_visibility_sync_all_face_sets_to_vertices(Object *ob)
bool SCULPT_has_colors(const SculptSession *ss)
static void sculpt_brush_stroke_init(bContext *C, wmOperator *op)
static float brush_strength(const Sculpt *sd, const StrokeCache *cache, const float feather, const UnifiedPaintSettings *ups, const PaintModeSettings *UNUSED(paint_mode_settings))
void SCULPT_calc_area_center(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_co[3])
static void calc_sculpt_normal(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3])
struct AreaNormalCenterTLSData AreaNormalCenterTLSData
#define PIXEL_INPUT_THRESHHOLD
void SCULPT_tag_update_overlays(bContext *C)
bool SCULPT_brush_test_sphere_fast(const SculptBrushTest *test, const float co[3])
static float frontface(const Brush *br, const float sculpt_normal[3], const float no[3], const float fno[3])
static void sculpt_vertex_neighbors_get_faces(SculptSession *ss, int index, SculptVertexNeighborIter *iter)
void SCULPT_automasking_cache_free(AutomaskingCache *automasking)
float SCULPT_automasking_factor_get(AutomaskingCache *automasking, SculptSession *ss, int vert)
AutomaskingCache * SCULPT_automasking_cache_init(Sculpt *sd, Brush *brush, Object *ob)
bool SCULPT_is_automasking_enabled(const Sculpt *sd, const SculptSession *ss, const Brush *br)
void SCULPT_boundary_data_free(SculptBoundary *boundary)
void SCULPT_do_boundary_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_clay_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_scrape_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_flatten_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_nudge_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_clay_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_displacement_eraser_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_displacement_smear_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_inflate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_slide_relax_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_grab_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_elastic_deform_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_mask_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_draw_sharp_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_clay_strips_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_bmesh_topology_rake(Sculpt *sd, Object *ob, PBVHNode **nodes, const int totnode, float bstrength)
float SCULPT_clay_thumb_get_stabilized_pressure(StrokeCache *cache)
void SCULPT_do_pinch_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_fill_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_cloth_brush_ensure_nodes_constraints(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, SculptClothSimulation *cloth_sim, float initial_location[3], const float radius)
PBVHNode ** SCULPT_cloth_brush_affected_nodes_gather(SculptSession *ss, Brush *brush, int *r_totnode)
void SCULPT_cloth_sim_activate_nodes(SculptClothSimulation *cloth_sim, PBVHNode **nodes, int totnode)
SculptClothSimulation * SCULPT_cloth_brush_simulation_create(Object *ob, const float cloth_mass, const float cloth_damping, const float cloth_softbody_strength, const bool use_collisions, const bool needs_deform_coords)
void SCULPT_cloth_simulation_free(struct SculptClothSimulation *cloth_sim)
void SCULPT_cloth_brush_store_simulation_state(SculptSession *ss, SculptClothSimulation *cloth_sim)
void SCULPT_cloth_brush_do_simulation_step(Sculpt *sd, Object *ob, SculptClothSimulation *cloth_sim, PBVHNode **nodes, int totnode)
void SCULPT_cloth_brush_simulation_init(SculptSession *ss, SculptClothSimulation *cloth_sim)
void SCULPT_do_cloth_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_draw_face_sets_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_undo_push_begin(struct Object *ob, const char *name)
#define SCULPT_RAKE_BRUSH_FACTOR
BLI_INLINE bool SCULPT_tool_is_paint(int tool)
void SCULPT_undo_push_end(struct Object *ob)
#define FAKE_NEIGHBOR_NONE
void SCULPT_do_smear_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
bool SCULPT_use_image_paint_brush(struct PaintModeSettings *settings, Object *ob) ATTR_NONNULL()
void SCULPT_pose_brush_init(struct Sculpt *sd, struct Object *ob, struct SculptSession *ss, struct Brush *br)
void SCULPT_do_paint_brush(struct PaintModeSettings *paint_mode_settings, Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) ATTR_NONNULL()
BLI_INLINE bool SCULPT_is_cloth_deform_brush(const Brush *brush)
BLI_INLINE bool SCULPT_tool_needs_all_pbvh_nodes(const Brush *brush)
void SCULPT_do_smooth_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
void SCULPT_do_multiplane_scrape_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
bool(* SculptBrushTestFn)(SculptBrushTest *test, const float co[3])
SculptUndoNode * SCULPT_undo_get_first_node(void)
#define SCULPT_CLAY_STABILIZER_LEN
#define SCULPT_VERTEX_NEIGHBORS_ITER_END(neighbor_iterator)
void SCULPT_do_pose_brush(struct Sculpt *sd, struct Object *ob, struct PBVHNode **nodes, int totnode)
void SCULPT_do_surface_smooth_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
SculptUndoNode * SCULPT_undo_push_node(Object *ob, PBVHNode *node, SculptUndoType type)
SculptUndoNode * SCULPT_undo_get_node(PBVHNode *node, SculptUndoType type)
#define SCULPT_VERTEX_DUPLICATES_AND_NEIGHBORS_ITER_BEGIN(ss, v_index, neighbor_iterator)
void SCULPT_smooth(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float bstrength, bool smooth_mask)
void SCULPT_pose_ik_chain_free(struct SculptPoseIKChain *ik_chain)
bool SCULPT_paint_image_canvas_get(struct PaintModeSettings *paint_mode_settings, struct Object *ob, struct Image **r_image, struct ImageUser **r_image_user) ATTR_NONNULL()
Get the image canvas for painting on the given object.
float topology_rake_factor
struct CurveMapping * curve
float texture_sample_bias
float tilt_strength_factor
struct Object * mirror_ob
struct ModifierData * next
float nearest_vertex_distance_squared
float nearest_vertex_distance_squared
struct SculptSession * sculpt
struct ToolSettings * toolsettings
struct RegionView3D * clip_rv3d
float symm_rot_mat_inv[4][4]
float(* deformation_pos)[3]
int * fake_neighbor_index
float current_max_distance
BLI_bitmap * visited_vertices
struct SculptUndoNode * unode
int active_face_grid_index
struct IsectRayPrecalc isect_precalc
struct SubdivCCG * subdiv_ccg
struct ImagePool * tex_pool
float cursor_view_normal[3]
SculptVertexInfo vertex_info
struct RegionView3D * rv3d
struct KeyBlock * shapekey_active
struct MeshElemMap * pmap
struct SculptSession::@52 multires
struct MultiresModifierData * modifier
float(* deform_imats)[3][3]
float cursor_sampled_normal[3]
struct StrokeCache * cache
SculptFakeNeighbors fake_neighbors
SculptPersistentBase * persistent_base
bool deform_modifiers_active
float nearest_vertex_search_co[3]
struct BMLogEntry * bm_entry
int * connected_component
int neighbors_fixed[SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY]
struct Object * gravity_object
float orig_grab_location[3]
float old_grab_location[3]
const struct Brush * brush
float brush_local_mat[4][4]
float symm_rot_mat_inv[4][4]
float initial_location[3]
float clip_mirror_mtx[4][4]
float true_view_normal[3]
float projection_mat[4][4]
void * prev_colors_vpaint
float anchored_location[3]
char saved_active_brush_name[MAX_ID_NAME]
struct SculptPoseIKChain * pose_ik_chain
struct SculptBoundary * boundaries[PAINT_SYMM_AREAS]
struct StrokeCache::@514 paint_brush
float sculpt_normal_symm[3]
float(* limit_surface_co)[3]
struct SculptRakeData rake_data
float(* surface_smooth_laplacian_disp)[3]
float true_initial_location[3]
float grab_delta_symmetry[3]
AutomaskingCache * automasking
struct SculptClothSimulation * cloth_sim
float true_last_location[3]
float true_initial_normal[3]
float(* prev_displacement)[3]
bool is_rake_rotation_valid
float gravity_direction[3]
float(* detail_directions)[3]
float true_gravity_direction[3]
float * layer_displacement_factor
char saved_mask_brush_tool
float clay_pressure_stabilizer[SCULPT_CLAY_STABILIZER_LEN]
int clay_pressure_stabilizer_index
float rake_rotation_symmetry[4]
float dyntopo_pixel_radius
SubdivCCGCoord coords_fixed[256]
TaskParallelReduceFunc func_reduce
size_t userdata_chunk_size
struct bNodeTree * nodetree
float average_stroke_accum[3]
float anchored_initial_mouse[2]
float initial_pixel_radius
int average_stroke_counter
struct Depsgraph * depsgraph
struct RegionView3D * rv3d
struct bNodeTreeExec * execdata
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
int(* modal)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
void(* cancel)(struct bContext *, struct wmOperator *)
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
struct wmOperatorType * type
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
bScreen * WM_window_get_active_screen(const wmWindow *win)