/* initialize with some non-zero seed */
static RNG theBLI_rng = {611330372042337130};
-void BLI_srandom(unsigned int seed)
+static void ensure_rng_thread_safe(void)
{
- BLI_rng_srandom(&theBLI_rng, seed);
-}
-
-int BLI_rand(void)
-{
- return BLI_rng_get_int(&theBLI_rng);
+ /* TODO(sergey): Ideally we will get rid of all rng functions which
+ * are using global generator. But for until then we need some way to
+ * catch "bad" calls at runtime.
+ *
+ * NOTE: Lots of areas are not ported, so we keep check disabled for now.
+ */
+ // BLI_assert(BLI_thread_is_main());
}
float BLI_frand(void)
{
+ ensure_rng_thread_safe();
return BLI_rng_get_float(&theBLI_rng);
}
-void BLI_frand_unit_v3(float v[3])
-{
- BLI_rng_get_float_unit_v3(&theBLI_rng, v);
-}
-
float BLI_hash_frand(unsigned int seed)
{
RNG rng;
{
const double invprime = 1.0 / (double)prime;
+ *r = 0.0;
+
for (int s = 0; s < n; s++) {
*r = halton_ex(invprime, &offset);
}
{
const double invprimes[2] = {1.0 / (double)prime[0], 1.0 / (double)prime[1]};
+ r[0] = r[1] = 0.0;
+
for (int s = 0; s < n; s++) {
for (int i = 0; i < 2; i++) {
r[i] = halton_ex(invprimes[i], &offset[i]);
{
const double invprimes[3] = {1.0 / (double)prime[0], 1.0 / (double)prime[1], 1.0 / (double)prime[2]};
+ r[0] = r[1] = r[2] = 0.0;
+
for (int s = 0; s < n; s++) {
for (int i = 0; i < 3; i++) {
r[i] = halton_ex(invprimes[i], &offset[i]);