diff options
Diffstat (limited to 'source/blender/blenkernel/intern/brush.c')
-rw-r--r-- | source/blender/blenkernel/intern/brush.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 888426735c5..2f666bf5922 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -525,21 +525,16 @@ float BKE_brush_sample_tex_3D(const Scene *scene, Brush *br, float radius = 1.0f; /* Quite warnings */ float co[3]; - if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW || - mtex->brush_map_mode == MTEX_MAP_MODE_RANDOM) - { + if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW) { /* keep coordinates relative to mouse */ rotation += ups->brush_rotation; - point_2d[0] -= ups->tex_mouse[0]; - point_2d[1] -= ups->tex_mouse[1]; + x = point_2d[0] - ups->tex_mouse[0]; + y = point_2d[1] - ups->tex_mouse[1]; /* use pressure adjusted size for fixed mode */ radius = ups->pixel_radius; - - x = point_2d[0]; - y = point_2d[1]; } else if (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) { /* leave the coordinates relative to the screen */ @@ -550,6 +545,14 @@ float BKE_brush_sample_tex_3D(const Scene *scene, Brush *br, x = point_2d[0]; y = point_2d[1]; } + else if (mtex->brush_map_mode == MTEX_MAP_MODE_RANDOM) { + rotation += ups->brush_rotation; + /* these contain a random coordinate */ + x = point_2d[0] - ups->tex_mouse[0]; + y = point_2d[1] - ups->tex_mouse[1]; + + radius = ups->pixel_radius; + } x /= radius; y /= radius; @@ -661,6 +664,14 @@ float BKE_brush_sample_tex_2D(const Scene *scene, Brush *brush, const float xy[2 rotation += ups->brush_rotation; radius = ups->pixel_radius; } + else if (mtex->brush_map_mode == MTEX_MAP_MODE_RANDOM) { + rotation += ups->brush_rotation; + /* these contain a random coordinate */ + x -= ups->tex_mouse[0]; + y -= ups->tex_mouse[1]; + + radius = ups->pixel_radius; + } x /= radius; y /= radius; @@ -981,6 +992,14 @@ void BKE_brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2], } } +void BKE_brush_randomize_texture_coordinates(UnifiedPaintSettings *ups) +{ + /* we multiply with brush radius as an optimization for the brush + * texture sampling functions */ + ups->tex_mouse[0] = BLI_rng_get_float(brush_rng) * ups->pixel_radius; + ups->tex_mouse[1] = BLI_rng_get_float(brush_rng) * ups->pixel_radius; +} + /* Uses the brush curve control to find a strength value between 0 and 1 */ float BKE_brush_curve_strength_clamp(Brush *br, float p, const float len) { @@ -1021,7 +1040,7 @@ unsigned int *BKE_brush_gen_texture_cache(Brush *br, int half_side) texcache = MEM_callocN(sizeof(int) * side * side, "Brush texture cache"); - /*do normalized cannonical view coords for texture*/ + /* do normalized cannonical view coords for texture */ for (y = -1.0, iy = 0; iy < side; iy++, y += step) { for (x = -1.0, ix = 0; ix < side; ix++, x += step) { co[0] = x; |