Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2013-03-19 18:25:12 +0400
committerAntony Riakiotakis <kalast@gmail.com>2013-03-19 18:25:12 +0400
commit526d79d6883ec3589e821780c69cb22e0a2206dc (patch)
tree8ec1c051131163af6676c4fc23a6687f754daa32
parent8fe0c0eb45fae46acd3325a5101d4c7bea3c17b5 (diff)
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.
-rw-r--r--source/blender/blenkernel/BKE_brush.h5
-rw-r--r--source/blender/blenkernel/intern/blender.c3
-rw-r--r--source/blender/blenkernel/intern/brush.c16
-rw-r--r--source/creator/creator.c3
4 files changed, 25 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index 4dfc70db952..e0afb1929a5 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -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);
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index fa6aafabe05..b3c94beba93 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -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();
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index c594e19b960..819d20d4770 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -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);
diff --git a/source/creator/creator.c b/source/creator/creator.c
index d7b2d87ffe8..ba6cc728eca 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -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