14#define DNA_DEPRECATED_ALLOW
80 std::optional<Library *> ,
85 Brush *brush_dst =
reinterpret_cast<Brush *
>(id_dst);
86 const Brush *brush_src =
reinterpret_cast<const Brush *
>(id_src);
187 bool force_local, force_copy;
197 else if (force_copy) {
482 constexpr std::array mode_map{
483 std::tuple{
"use_paint_sculpt",
OB_MODE_SCULPT,
"sculpt_brush_type"},
488 std::tuple{
"use_paint_uv_sculpt",
OB_MODE_EDIT,
"image_brush_type"},
499 for (
const auto &[prop_name, mode, tool_prop_name] : mode_map) {
501 if (!(
brush->ob_mode & mode)) {
576#define FROM_DEFAULT(member) \
577 memcpy((void *)&brush->member, (void *)&brush_def->member, sizeof(brush->member))
578#define FROM_DEFAULT_PTR(member) memcpy(brush->member, brush_def->member, sizeof(brush->member))
622#undef FROM_DEFAULT_PTR
631 brush->ob_mode = ob_mode;
636 else if (
ELEM(ob_mode,
650 if (
brush->gpencil_settings ==
nullptr) {
654 brush->gpencil_settings->draw_smoothlvl = 1;
655 brush->gpencil_settings->flag = 0;
657 brush->gpencil_settings->draw_strength = 1.0f;
658 brush->gpencil_settings->draw_jitter = 0.0f;
693 uint duplicate_options)
700 if (!is_subprocess) {
728 if (!is_subprocess) {
750 if (
brush->curves_sculpt_settings ==
nullptr) {
767 brush->has_unsaved_changes =
true;
774 if (
brush->ob_mode & ob_mode) {
784 Brush def = blender::dna::shallow_zero_initialize();
787#define BR_TEST(field, t) \
788 if (br->field != def.field) { \
789 printf("br->" #field " = %" #t ";\n", br->field); \
793#define BR_TEST_FLAG(_f) \
794 if ((br->flag & _f) && !(def.flag & _f)) { \
795 printf("br->flag |= " #_f ";\n"); \
797 else if (!(br->flag & _f) && (def.flag & _f)) { \
798 printf("br->flag &= ~" #_f ";\n"); \
802#define BR_TEST_FLAG_OVERLAY(_f) \
803 if ((br->overlay_flags & _f) && !(def.overlay_flags & _f)) { \
804 printf("br->overlay_flags |= " #_f ";\n"); \
806 else if (!(br->overlay_flags & _f) && (def.overlay_flags & _f)) { \
807 printf("br->overlay_flags &= ~" #_f ";\n"); \
850 BR_TEST(smooth_stroke_radius, d);
851 BR_TEST(smooth_stroke_factor, f);
862 BR_TEST(topology_rake_factor, f);
864 BR_TEST(crease_pinch_factor, f);
868 BR_TEST(texture_sample_bias, f);
869 BR_TEST(texture_overlay_alpha, d);
891 if (!
b->curve_distance_falloff) {
894 cumap =
b->curve_distance_falloff;
898 cuma =
b->curve_distance_falloff->cm;
909 return &
brush->mask_mtex;
915 return &
brush->mask_mtex;
923 const float point[3],
929 float intensity = 1.0;
932 if (mtex ==
nullptr || mtex->
tex ==
nullptr) {
941 float rotation = -mtex->
rot;
942 const float point_2d[2] = {point[0], point[1]};
949 if (rotation > 0.001f || rotation < -0.001f) {
971 float rotation = -mtex->
rot;
972 const float point_2d[2] = {point[0], point[1]};
973 float x = 0.0f,
y = 0.0f;
974 float invradius = 1.0f;
982 x = point_2d[0] - paint_runtime->
tex_mouse[0];
983 y = point_2d[1] - paint_runtime->
tex_mouse[1];
1000 x = point_2d[0] - paint_runtime->
tex_mouse[0];
1001 y = point_2d[1] - paint_runtime->
tex_mouse[1];
1012 if (rotation > 0.001f || rotation < -0.001f) {
1014 const float flen =
sqrtf(
x *
x +
y *
y);
1030 rgba[0] = intensity;
1031 rgba[1] = intensity;
1032 rgba[2] = intensity;
1048 float rgba[4], intensity;
1054 float rotation = -mtex->
rot;
1055 const float point_2d[2] = {point[0], point[1]};
1062 if (rotation > 0.001f || rotation < -0.001f) {
1064 const float flen =
sqrtf(
x *
x +
y *
y);
1084 float rotation = -mtex->
rot;
1085 const float point_2d[2] = {point[0], point[1]};
1086 float x = 0.0f,
y = 0.0f;
1087 float invradius = 1.0f;
1125 if (rotation > 0.001f || rotation < -0.001f) {
1127 const float flen =
sqrtf(
x *
x +
y *
y);
1140 CLAMP(intensity, 0.0f, 1.0f);
1164 return paint->unified_paint_settings.color;
1166 return brush->color;
1175 return std::nullopt;
1191 return std::nullopt;
1195 brush->color_jitter_flag,
1196 brush->hsv_jitter[0],
1197 brush->hsv_jitter[1],
1198 brush->hsv_jitter[2],
1199 brush->curve_rand_hue,
1200 brush->curve_rand_saturation,
1201 brush->curve_rand_value,
1208 return paint->unified_paint_settings.secondary_color;
1210 return brush->secondary_color;
1279 const short us_flag =
paint->unified_paint_settings.flag;
1303 brush->unprojected_size = unprojected_size;
1324 float scale = new_brush_size;
1326 if (old_brush_size != 0) {
1327 scale /=
float(old_brush_size);
1329 (*unprojected_size) *= scale;
1333 float new_unprojected_size,
1334 float old_unprojected_size)
1336 float scale = new_unprojected_size;
1338 if (old_unprojected_size != 0) {
1339 scale /= new_unprojected_size;
1341 (*r_brush_size) = int(
float(*r_brush_size) * scale);
1352 brush->alpha = alpha;
1379 brush->weight = value;
1399 brush->input_samples = value;
1421 diameter = 2 *
brush.jitter_absolute;
1426 spread =
brush.jitter;
1429 jitterpos[0] =
pos[0] + 2 * rand_pos[0] * diameter * spread;
1430 jitterpos[1] =
pos[1] + 2 * rand_pos[1] * diameter * spread;
1451 const float brush_radius,
1476 const float factor = 1.0f -
distance * radius_rcp;
1477 factors[
i] *= factor * factor;
1488 const float factor = 1.0f -
distance * radius_rcp;
1489 factors[
i] *= 3.0f * factor * factor - 2.0f * factor * factor * factor;
1500 const float factor = 1.0f -
distance * radius_rcp;
1501 factors[
i] *=
pow3f(factor) * (factor * (factor * 6.0f - 15.0f) + 10.0f);
1512 const float factor = 1.0f -
distance * radius_rcp;
1513 factors[
i] *=
sqrtf(factor);
1524 const float factor = 1.0f -
distance * radius_rcp;
1525 factors[
i] *= factor;
1545 const float factor = 1.0f -
distance * radius_rcp;
1546 factors[
i] *=
sqrtf(2 * factor - factor * factor);
1557 const float factor = 1.0f -
distance * radius_rcp;
1558 factors[
i] *= factor * factor * factor * factor;
1569 const float factor = 1.0f -
distance * radius_rcp;
1570 factors[
i] *= factor * (2.0f - factor);
1580 const float brush_radius)
1586 float strength = 1.0f;
1588 if (p >= brush_radius) {
1592 p = p / brush_radius;
1603 strength = 3.0f * p * p - 2.0f * p * p * p;
1606 strength =
pow3f(p) * (p * (p * 6.0f - 15.0f) + 10.0f);
1609 strength =
sqrtf(p);
1618 strength =
sqrtf(2 * p - p * p);
1621 strength = p * p * p * p;
1624 strength = p * (2.0f - p);
1641 CLAMP(strength, 0.0f, 1.0f);
1649 const bool use_secondary,
1653 if (mtex->
tex ==
nullptr) {
1657 const float step = 2.0 / side;
1662 for (
y = -1.0, iy = 0; iy < side; iy++,
y +=
step) {
1663 for (
x = -1.0, ix = 0; ix < side; ix++,
x +=
step) {
1664 const float co[3] = {
x,
y, 0.0f};
1667 float rgba_dummy[4];
1670 rect[iy * side + ix] = intensity;
1681 int half = side / 2;
1688 im->
x = im->
y = side;
1692 if (display_gradient || have_texture) {
1693 for (
int i = 0;
i < side;
i++) {
1694 for (
int j = 0; j < side; j++) {
1709 switch (paint_mode) {
1716 (
brush->tip_roundness < 1.0f ||
brush->tip_scale_x != 1.0f))
void BKE_asset_metadata_idprop_ensure(AssetMetaData *asset_data, IDProperty *prop)
void BKE_colorband_foreach_working_space_color(ColorBand *coba, const IDTypeForeachColorFunctionCallback &fn)
Low-level operations for grease pencil.
@ IDTYPE_FLAGS_NO_ANIMDATA
@ IDTYPE_FLAGS_NO_MEMFILE_UNDO
ID * BKE_id_copy_for_duplicate(Main *bmain, ID *id, eDupli_ID_Flags duplicate_flags, int copy_flags)
void BKE_id_delete(Main *bmain, void *idv) ATTR_NONNULL()
@ LIB_ID_MAKELOCAL_FULL_LIBRARY
void BKE_lib_id_expand_local(Main *bmain, ID *id, int flags)
void id_fake_user_set(ID *id)
void BKE_main_id_newptr_and_tag_clear(Main *bmain)
void BKE_lib_id_make_local_generic_action_define(Main *bmain, ID *id, int flags, bool *r_force_local, bool *r_force_copy)
ID * BKE_id_copy(Main *bmain, const ID *id)
void * BKE_id_new(Main *bmain, short type, const char *name)
void BKE_lib_id_clear_library_data(Main *bmain, ID *id, int flags)
@ LIB_ID_DUPLICATE_IS_ROOT_ID
@ LIB_ID_DUPLICATE_IS_SUBPROCESS
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(data_, func_call_)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv)
@ IDWALK_CB_EMBEDDED_NOT_OWNING
void BKE_library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef< LibraryIDLinkCallback > callback, void *user_data, LibraryForeachIDFlag flag)
void BKE_libblock_relink_to_newid(Main *bmain, ID *id, int remap_flag) ATTR_NONNULL()
void void BKE_libblock_remap(Main *bmain, void *old_idv, void *new_idv, int remap_flags) ATTR_NONNULL(1
@ ID_REMAP_SKIP_USER_CLEAR
@ ID_REMAP_SKIP_INDIRECT_USAGE
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
General operations, lookup, etc. for materials.
CurveMapping * BKE_sculpt_default_cavity_curve()
CurveMapping * BKE_paint_default_curve()
bool BKE_paint_use_unified_color(const Paint *paint)
std::optional< int > BKE_paint_get_brush_type_from_obmode(const Brush *brush, eObjectMode ob_mode)
void BKE_previewimg_blend_write(BlendWriter *writer, const PreviewImage *prv)
void BKE_previewimg_free(PreviewImage **prv)
void BKE_previewimg_blend_read(BlendDataReader *reader, PreviewImage *prv)
void BKE_previewimg_id_copy(ID *new_id, const ID *old_id)
void BKE_texture_mtex_foreach_id(struct LibraryForeachIDData *data, struct MTex *mtex)
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
MINLINE float pow2f(float x)
MINLINE float square_f(float a)
MINLINE float pow3f(float x)
void linearrgb_to_srgb_v3_v3(float srgb[3], const float linear[3])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void zero_v4(float r[4])
struct RNG * BLI_rng_new(unsigned int seed)
void BLI_rng_srandom(struct RNG *rng, unsigned int seed) ATTR_NONNULL(1)
void BLI_rng_free(struct RNG *rng) ATTR_NONNULL(1)
float BLI_rng_get_float(struct RNG *rng) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define BLT_I18NCONTEXT_ID_BRUSH
ID and Library types, which are fundamental for SDNA.
#define ID_EXTRA_USERS(id)
#define ID_IS_LINKED(_id)
#define ID_REAL_USERS(id)
#define ID_NEW_SET(_id, _idn)
@ SCULPT_BRUSH_TYPE_DRAW_SHARP
@ SCULPT_BRUSH_TYPE_THUMB
@ SCULPT_BRUSH_TYPE_BOUNDARY
@ SCULPT_BRUSH_TYPE_DISPLACEMENT_SMEAR
@ SCULPT_BRUSH_TYPE_DRAW_FACE_SETS
@ SCULPT_BRUSH_TYPE_CLOTH
@ SCULPT_BRUSH_TYPE_PINCH
@ SCULPT_BRUSH_TYPE_SMEAR
@ SCULPT_BRUSH_TYPE_CLAY_THUMB
@ SCULPT_BRUSH_TYPE_MULTIPLANE_SCRAPE
@ SCULPT_BRUSH_TYPE_SIMPLIFY
@ SCULPT_BRUSH_TYPE_SNAKE_HOOK
@ SCULPT_BRUSH_TYPE_CREASE
@ SCULPT_BRUSH_TYPE_LAYER
@ SCULPT_BRUSH_TYPE_SLIDE_RELAX
@ SCULPT_BRUSH_TYPE_ELASTIC_DEFORM
@ SCULPT_BRUSH_TYPE_SMOOTH
@ SCULPT_BRUSH_TYPE_PAINT
@ SCULPT_BRUSH_TYPE_DISPLACEMENT_ERASER
@ SCULPT_BRUSH_TYPE_PLANE
@ SCULPT_BRUSH_TYPE_INFLATE
@ SCULPT_BRUSH_TYPE_ROTATE
@ SCULPT_BRUSH_TYPE_CLAY_STRIPS
@ GP_BRUSH_MATERIAL_PINNED
@ GP_BRUSH_USE_JITTER_PRESSURE
@ BRUSH_INVERSE_SMOOTH_PRESSURE
@ BRUSH_CLOTH_DEFORM_GRAB
@ BRUSH_MASK_PRESSURE_RAMP
@ BRUSH_MASK_PRESSURE_CUTOFF
@ BRUSH_CURVES_SCULPT_FLAG_INTERPOLATE_RADIUS
@ BRUSH_OVERLAY_SECONDARY_OVERRIDE_ON_STROKE
@ BRUSH_OVERLAY_PRIMARY_OVERRIDE_ON_STROKE
@ BRUSH_OVERLAY_SECONDARY
@ BRUSH_OVERLAY_CURSOR_OVERRIDE_ON_STROKE
#define MAX_BRUSH_PIXEL_DIAMETER
@ CUMA_EXTEND_EXTRAPOLATE
#define DNA_struct_default_get(struct_name)
@ OB_MODE_VERTEX_GREASE_PENCIL
@ OB_MODE_PAINT_GREASE_PENCIL
@ OB_MODE_SCULPT_GREASE_PENCIL
@ OB_MODE_WEIGHT_GREASE_PENCIL
@ UNIFIED_PAINT_COLOR_JITTER
@ UNIFIED_PAINT_BRUSH_LOCK_SIZE
@ UNIFIED_PAINT_INPUT_SAMPLES
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
void IMB_colormanagement_colorspace_to_scene_linear_v3(float pixel[3], const ColorSpace *colorspace)
void IMB_assign_float_buffer(ImBuf *ibuf, float *buffer_data, ImBufOwnership ownership)
@ IB_DO_NOT_TAKE_OWNERSHIP
Read Guarded memory(de)allocation.
BMesh const char void * data
void BKE_brush_scale_unprojected_size(float *unprojected_size, int new_brush_size, int old_brush_size)
float BKE_brush_unprojected_size_get(const Paint *paint, const Brush *brush)
const MTex * BKE_brush_mask_texture_get(const Brush *brush, const eObjectMode object_mode)
float BKE_brush_curve_strength_clamped(const Brush *br, float p, const float len)
static void brush_defaults(Brush *brush)
bool BKE_brush_use_alpha_pressure(const Brush *brush)
float BKE_brush_alpha_get(const Paint *paint, const Brush *brush)
float BKE_brush_curve_strength(const eBrushCurvePreset preset, const CurveMapping *cumap, const float distance, const float brush_radius)
void BKE_brush_color_sync_legacy(Brush *brush)
static void brush_blend_write(BlendWriter *writer, ID *id, const void *id_address)
#define BR_TEST(field, t)
static void brush_free_data(ID *id)
const float * BKE_brush_color_get(const Paint *paint, const Brush *brush)
static AssetTypeInfo AssetType_BR
void BKE_brush_input_samples_set(Paint *paint, Brush *brush, int value)
static void brush_blend_read_after_liblink(BlendLibReader *, ID *id)
float BKE_brush_sample_tex_3d(const Paint *paint, const Brush *br, const MTex *mtex, const float point[3], float rgba[4], const int thread, ImagePool *pool)
const MTex * BKE_brush_color_texture_get(const Brush *brush, const eObjectMode object_mode)
const float * BKE_brush_secondary_color_get(const Paint *paint, const Brush *brush)
Brush * BKE_brush_first_search(Main *bmain, const eObjectMode ob_mode)
void BKE_brush_scale_size(int *r_brush_size, float new_unprojected_size, float old_unprojected_size)
static void brush_foreach_id(ID *id, LibraryForeachIDData *data)
#define FROM_DEFAULT(member)
#define BR_TEST_FLAG_OVERLAY(_f)
bool BKE_brush_use_locked_size(const Paint *paint, const Brush *brush)
std::optional< BrushColorJitterSettings > BKE_brush_color_jitter_get_settings(const Paint *paint, const Brush *brush)
bool BKE_brush_use_size_pressure(const Brush *brush)
float BKE_brush_radius_get(const Paint *paint, const Brush *brush)
static void brush_init_data(ID *id)
bool BKE_brush_has_cube_tip(const Brush *brush, PaintMode paint_mode)
void BKE_brush_randomize_texture_coords(Paint *paint, bool mask)
static void brush_make_local(Main *bmain, ID *id, const int flags)
static void brush_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int flag)
void BKE_brush_init_curves_sculpt_settings(Brush *brush)
Brush * BKE_brush_add(Main *bmain, const char *name, const eObjectMode ob_mode)
void BKE_brush_system_init()
#define FROM_DEFAULT_PTR(member)
ImBuf * BKE_brush_gen_radial_control_imbuf(Brush *br, bool secondary, bool display_gradient)
static bool brush_gen_texture(const Brush *br, const int side, const bool use_secondary, float *rect)
void BKE_brush_curve_preset(Brush *b, eCurveMappingPreset preset)
static void brush_blend_read_data(BlendDataReader *reader, ID *id)
void BKE_brush_color_set(Paint *paint, Brush *brush, const float color[3])
float BKE_brush_unprojected_radius_get(const Paint *paint, const Brush *brush)
void BKE_brush_calc_curve_factors(const eBrushCurvePreset preset, const CurveMapping *cumap, const blender::Span< float > distances, const float brush_radius, const blender::MutableSpan< float > factors)
void BKE_brush_jitter_pos(const Paint &paint, const Brush &brush, const float pos[2], float jitterpos[2])
void BKE_brush_size_set(Paint *paint, Brush *brush, int size)
void BKE_brush_init_gpencil_settings(Brush *brush)
Brush * BKE_brush_duplicate(Main *bmain, Brush *brush, eDupli_ID_Flags, uint duplicate_options)
void BKE_brush_debug_print_state(Brush *br)
void BKE_brush_unprojected_size_set(Paint *paint, Brush *brush, float unprojected_size)
bool BKE_brush_delete(Main *bmain, Brush *brush)
void BKE_brush_weight_set(Paint *paint, Brush *brush, float value)
void BKE_brush_alpha_set(Paint *paint, Brush *brush, float alpha)
static void brush_asset_metadata_ensure(void *asset_ptr, AssetMetaData *asset_data)
int BKE_brush_input_samples_get(const Paint *paint, const Brush *brush)
void BKE_brush_tag_unsaved_changes(Brush *brush)
static void brush_foreach_working_space_color(ID *id, const IDTypeForeachColorFunctionCallback &fn)
int BKE_brush_size_get(const Paint *paint, const Brush *brush)
float BKE_brush_sample_masktex(const Paint *paint, Brush *br, const float point[2], const int thread, ImagePool *pool)
float BKE_brush_weight_get(const Paint *paint, const Brush *brush)
void BKE_brush_system_exit()
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
constexpr int64_t size() const
constexpr int64_t size() const
constexpr IndexRange index_range() const
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
float distance(VecOp< float, D >, VecOp< float, D >) RET
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool supports_sculpt_plane(const Brush &brush)
bool supports_secondary_cursor_color(const Brush &brush)
bool supports_auto_smooth(const Brush &brush)
bool supports_jitter(const Brush &brush)
bool supports_space_attenuation(const Brush &brush)
bool supports_size_pressure(const Brush &brush)
bool supports_persistence(const Brush &brush)
bool supports_tilt(const Brush &brush)
bool supports_inverted_direction(const Brush &brush)
bool supports_auto_smooth_pressure(const Brush &brush)
bool supports_rake_factor(const Brush &brush)
bool supports_plane_depth(const Brush &brush)
bool supports_accumulate(const Brush &brush)
static bool is_grab_tool(const Brush &brush)
bool supports_gravity(const Brush &brush)
bool supports_hardness_pressure(const Brush &brush)
bool supports_smooth_stroke(const Brush &brush)
bool supports_plane_offset(const Brush &brush)
bool supports_pinch_factor(const Brush &brush)
bool supports_color(const Brush &brush)
bool supports_random_texture_angle(const Brush &brush)
bool supports_strength_pressure(const Brush &brush)
bool supports_dyntopo(const Brush &brush)
bool supports_height(const Brush &brush)
bool supports_topology_rake(const Brush &brush)
bool supports_plane_height(const Brush &brush)
bool supports_normal_weight(const Brush &brush)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_bool(StringRef prop_name, bool value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_BOOLEAN, set its name and value.
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRef prop_name, int32_t value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_INT, set its name and value.
static ePaintOverlayControlFlags overlay_flags
struct CurveMapping * curve_parameter_falloff
struct CurveMapping * curve_sensitivity
struct CurveMapping * curve_strength
struct CurveMapping * curve_jitter
struct CurveMapping * curve_rand_pressure
struct CurveMapping * curve_rand_strength
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
struct CurveMapping * curve_rand_uv
struct Material * material
struct Material * material_alt
struct CurveMapping * curve_rand_value
struct ColorBand * gradient
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
float stencil_dimension[2]
struct CurveMapping * curve_jitter
float texture_sample_bias
struct CurveMapping * curve_rand_value
struct CurveMapping * curve_distance_falloff
float mask_stencil_pos[2]
struct BrushGpencilSettings * gpencil_settings
struct CurveMapping * automasking_cavity_curve
struct BrushCurvesSculptSettings * curves_sculpt_settings
float mask_stencil_dimension[2]
int curve_distance_falloff_preset
struct PaintCurve * paint_curve
struct CurveMapping * curve_size
struct CurveMapping * curve_strength
const blender::FunctionRef< void(float rgb[3])> single
ImBufFloatBuffer float_buffer
struct CurveMapping * curve_rand_value
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
blender::float2 tex_mouse
float size_pressure_value
const blender::ocio::ColorSpace * colorspace
blender::float2 mask_tex_mouse
bool do_linear_conversion
bool RE_texture_evaluate(const MTex *mtex, const float vec[3], const int thread, ImagePool *pool, const bool skip_load_image, const bool texnode_preview, float *r_intensity, float r_rgba[4])
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)