[Bf-blender-cvs] [83f5606b697] greasepencil-object: Fix random number functions after merge

Antonio Vazquez noreply at git.blender.org
Wed Jun 20 16:00:27 CEST 2018


Commit: 83f5606b6974fd54233e6ad6c7f5f0af3398df60
Author: Antonio Vazquez
Date:   Wed Jun 20 16:00:14 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB83f5606b6974fd54233e6ad6c7f5f0af3398df60

Fix random number functions after merge

===================================================================

M	source/blender/editors/gpencil/gpencil_brush.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_utils.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/modifiers/intern/MOD_gpencilnoise.c

===================================================================

diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index d6bec58dfe6..43dec78e749 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -843,7 +843,7 @@ static bool gp_brush_randomize_apply(
 	}
 	/* apply random to UV (use pressure) */
 	if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_UV) {
-		if (BLI_frand() > 0.5f) {
+		if (BLI_rng_get_float(gso->rng) > 0.5f) {
 			pt->uv_rot += fac;
 		}
 		else {
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 41228bb5f3b..ecbb012b29c 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -434,7 +434,7 @@ static void gp_brush_jitter(bGPdata *gpd, Brush *brush, tGPspoint *pt, const int
 		tmp_pressure = curvef * brush->gpencil_settings->draw_sensitivity;
 	}
 	const float exfactor = (brush->gpencil_settings->draw_jitter + 2.0f) * (brush->gpencil_settings->draw_jitter + 2.0f); /* exponential value */
-	const float fac = BLI_frand() * exfactor * tmp_pressure;
+	const float fac = BLI_rng_get_float(rng) * exfactor * tmp_pressure;
 	/* Jitter is applied perpendicular to the mouse movement vector (2D space) */
 	float mvec[2], svec[2];
 	/* mouse movement in ints -> floats */
@@ -645,22 +645,22 @@ static short gp_stroke_addpoint(
 		{
 			float curvef = curvemapping_evaluateF(brush->gpencil_settings->curve_sensitivity, 0, pressure);
 			float tmp_pressure = curvef * brush->gpencil_settings->draw_sensitivity;
-			if (BLI_frand() > 0.5f) {
-				pt->pressure -= tmp_pressure * brush->gpencil_settings->draw_random_press * BLI_frand();
+			if (BLI_rng_get_float(p->rng) > 0.5f) {
+				pt->pressure -= tmp_pressure * brush->gpencil_settings->draw_random_press * BLI_rng_get_float(p->rng);
 			}
 			else {
-				pt->pressure += tmp_pressure * brush->gpencil_settings->draw_random_press * BLI_frand();
+				pt->pressure += tmp_pressure * brush->gpencil_settings->draw_random_press * BLI_rng_get_float(p->rng);
 			}
 			CLAMP(pt->pressure, GPENCIL_STRENGTH_MIN, 1.0f);
 		}
 
 		/* apply randomness to uv texture rotation */
 		if ((brush->gpencil_settings->flag & GP_BRUSH_GROUP_RANDOM) && (brush->gpencil_settings->uv_random > 0.0f)) {
-			if (BLI_frand() > 0.5f) {
-				pt->uv_rot = (BLI_frand() * M_PI * -1) * brush->gpencil_settings->uv_random;
+			if (BLI_rng_get_float(p->rng) > 0.5f) {
+				pt->uv_rot = (BLI_rng_get_float(p->rng) * M_PI * -1) * brush->gpencil_settings->uv_random;
 			}
 			else {
-				pt->uv_rot = (BLI_frand() * M_PI) * brush->gpencil_settings->uv_random;
+				pt->uv_rot = (BLI_rng_get_float(p->rng) * M_PI) * brush->gpencil_settings->uv_random;
 			}
 			CLAMP(pt->uv_rot, -M_PI_2, M_PI_2);
 		}
@@ -691,11 +691,11 @@ static short gp_stroke_addpoint(
 		if ((brush->gpencil_settings->flag & GP_BRUSH_GROUP_RANDOM) &&
 			(brush->gpencil_settings->draw_random_strength > 0.0f))
 		{
-			if (BLI_frand() > 0.5f) {
-				pt->strength -= pt->strength * brush->gpencil_settings->draw_random_strength * BLI_frand();
+			if (BLI_rng_get_float(p->rng) > 0.5f) {
+				pt->strength -= pt->strength * brush->gpencil_settings->draw_random_strength * BLI_rng_get_float(p->rng);
 			}
 			else {
-				pt->strength += pt->strength * brush->gpencil_settings->draw_random_strength * BLI_frand();
+				pt->strength += pt->strength * brush->gpencil_settings->draw_random_strength * BLI_rng_get_float(p->rng);
 			}
 			CLAMP(pt->strength, GPENCIL_STRENGTH_MIN, 1.0f);
 		}
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 51836ebf8ae..da785792367 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -1018,7 +1018,7 @@ void gp_randomize_stroke(bGPDstroke *gps, Brush *brush, RNG *rng)
 	for (int i = 1; i < gps->totpoints - 1; i++) {
 		bGPDspoint *pt = &gps->points[i];
 		/* get vector with shift (apply a division because random is too sensitive */
-		const float fac = BLI_frand() * (brush->gpencil_settings->draw_random_sub / 10.0f);
+		const float fac = BLI_rng_get_float(rng) * (brush->gpencil_settings->draw_random_sub / 10.0f);
 		float svec[3];
 		copy_v3_v3(svec, ortho);
 		if (BLI_rng_get_float(rng) > 0.5f) {
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 530c0a9f7ea..8092b9de658 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -33,6 +33,7 @@
  */
 
 struct Mesh;
+struct RNG;
 
 typedef enum ModifierType {
 	eModifierType_None              = 0,
@@ -1664,6 +1665,7 @@ typedef struct NoiseGpencilModifierData {
 	int gp_frame;                /* last gp frame used */
 	int scene_frame;             /* last scene frame used */
 	float vrand1, vrand2;        /* random values */
+	struct RNG *rng;
 } NoiseGpencilModifierData;
 
 typedef enum eNoiseGpencil_Flag {
diff --git a/source/blender/modifiers/intern/MOD_gpencilnoise.c b/source/blender/modifiers/intern/MOD_gpencilnoise.c
index d79fcdf570f..d6e4c98a4b3 100644
--- a/source/blender/modifiers/intern/MOD_gpencilnoise.c
+++ b/source/blender/modifiers/intern/MOD_gpencilnoise.c
@@ -35,6 +35,8 @@
 #include "BLI_math_vector.h"
 #include "BLI_rand.h"
 
+#include "PIL_time.h"
+
 #include "DNA_meshdata_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_object_types.h"
@@ -66,10 +68,25 @@ static void initData(ModifierData *md)
 	gpmd->step = 1;
 	gpmd->scene_frame = -999999;
 	gpmd->gp_frame = -999999;
+
+	/* Random generator, only init once. */
+	uint rng_seed = (uint)(PIL_check_seconds_timer_i() & UINT_MAX);
+	rng_seed ^= GET_UINT_FROM_POINTER(gpmd);
+	gpmd->rng = BLI_rng_new(rng_seed);
+
 	gpmd->vrand1 = 1.0;
 	gpmd->vrand2 = 1.0;
 }
 
+static void freeData(ModifierData *md)
+{
+	NoiseGpencilModifierData *mmd = (NoiseGpencilModifierData *)md;
+
+	if (mmd->rng) {
+		BLI_rng_free(mmd->rng);
+	}
+}
+
 static void copyData(const ModifierData *md, ModifierData *target)
 {
 	modifier_copyData_generic(md, target);
@@ -151,8 +168,8 @@ static void gp_deformStroke(
 			if ((!gpl->actframe) || (mmd->gp_frame != gpl->actframe->framenum) ||
 			    (sc_diff >= mmd->step))
 			{
-				vran = mmd->vrand1 = BLI_frand();
-				vdir = mmd->vrand2 = BLI_frand();
+				vran = mmd->vrand1 = BLI_rng_get_float(mmd->rng);
+				vdir = mmd->vrand2 = BLI_rng_get_float(mmd->rng);
 				mmd->gp_frame = gpl->actframe->framenum;
 				mmd->scene_frame = sc_frame;
 			}
@@ -269,7 +286,7 @@ ModifierTypeInfo modifierType_Gpencil_Noise = {
 
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
-	/* freeData */          NULL,
+	/* freeData */          freeData,
 	/* isDisabled */        NULL,
 	/* updateDepsgraph */   NULL,
 	/* dependsOnTime */     dependsOnTime,



More information about the Bf-blender-cvs mailing list