Fix: jittered brushes are not jittered, reported by kursad karatas.

Issue is sharing using global random generator which is shared with
particle system which resets the seed due to some scene/option
combination. Since it may be desirable to get predictable results with
particles, made sure brushes allocate their own random number generator
on startup and use that for jittering.
This commit is contained in:
Antony Riakiotakis 2013-03-19 14:25:12 +00:00
parent 8fe0c0eb45
commit 526d79d688
4 changed files with 25 additions and 2 deletions

@ -42,6 +42,11 @@ struct Scene;
struct wmOperator;
// enum CurveMappingPreset;
/* globals for brush execution */
void BKE_brush_system_init(void);
void BKE_brush_system_exit(void);
/* datablock functions */
struct Brush *BKE_brush_add(struct Main *bmain, const char *name);
struct Brush *BKE_brush_copy(struct Brush *brush);

@ -66,6 +66,7 @@
#include "BKE_blender.h"
#include "BKE_bpath.h"
#include "BKE_brush.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_displist.h"
@ -120,6 +121,8 @@ void free_blender(void)
IMB_exit();
BKE_images_exit();
BKE_brush_system_exit();
BLI_callback_global_finalize();
BKE_sequencer_cache_destruct();

@ -55,6 +55,18 @@
#include "RE_render_ext.h" /* externtex */
#include "RE_shader_ext.h"
static RNG *brush_rng;
void BKE_brush_system_init(void) {
brush_rng = BLI_rng_new(0);
BLI_rng_srandom(brush_rng, 31415682);
}
void BKE_brush_system_exit(void) {
BLI_rng_free(brush_rng);
}
static void brush_defaults(Brush *brush)
{
brush->blend = 0;
@ -877,8 +889,8 @@ void BKE_brush_jitter_pos(const Scene *scene, Brush *brush, const float pos[2],
int diameter;
do {
rand_pos[0] = BLI_frand() - 0.5f;
rand_pos[1] = BLI_frand() - 0.5f;
rand_pos[0] = BLI_rng_get_float(brush_rng) - 0.5f;
rand_pos[1] = BLI_rng_get_float(brush_rng) - 0.5f;
} while (len_v2(rand_pos) > 0.5f);

@ -84,6 +84,7 @@
#include "BLI_blenlib.h"
#include "BKE_blender.h"
#include "BKE_brush.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h" /* for DAG_on_visible_update */
#include "BKE_font.h"
@ -1486,6 +1487,8 @@ int main(int argc, const char **argv)
IMB_init();
BKE_images_init();
BKE_brush_system_init();
#ifdef WITH_FFMPEG
IMB_ffmpeg_init();
#endif