Blender V4.5
rand.cc File Reference
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <random>
#include "MEM_guardedalloc.h"
#include "BLI_bitmap.h"
#include "BLI_compiler_compat.h"
#include "BLI_math_vector.h"
#include "BLI_noise.h"
#include "BLI_rand.h"
#include "BLI_rand.hh"
#include "BLI_sys_types.h"
#include "BLI_threads.h"
#include "BLI_strict_flags.h"

Go to the source code of this file.

Classes

struct  RNG
struct  RNG_THREAD_ARRAY

Namespaces

namespace  blender

Macros

#define hash   BLI_noise_hash_uchar_512

Functions

RNGBLI_rng_new (uint seed)
RNGBLI_rng_new_srandom (uint seed)
void BLI_rng_free (RNG *rng)
void BLI_rng_seed (RNG *rng, uint seed)
void BLI_rng_srandom (RNG *rng, uint seed)
void BLI_rng_get_char_n (RNG *rng, char *bytes, size_t bytes_len)
int BLI_rng_get_int (RNG *rng)
uint BLI_rng_get_uint (RNG *rng)
double BLI_rng_get_double (RNG *rng)
float BLI_rng_get_float (RNG *rng)
void BLI_rng_get_tri_sample_float_v2 (RNG *rng, const float v1[2], const float v2[2], const float v3[2], float r_pt[2])
void BLI_rng_shuffle_array (RNG *rng, void *data, uint elem_size_i, uint elem_num)
void BLI_rng_shuffle_bitmap (RNG *rng, BLI_bitmap *bitmap, uint bits_num)
void BLI_rng_skip (RNG *rng, int n)
float BLI_hash_frand (uint seed)
void BLI_array_randomize (void *data, uint elem_size, uint elem_num, uint seed)
void BLI_bitmap_randomize (BLI_bitmap *bitmap, uint bits_num, uint seed)
RNG_THREAD_ARRAYBLI_rng_threaded_new ()
void BLI_rng_threaded_free (RNG_THREAD_ARRAY *rngarr)
int BLI_rng_thread_rand (RNG_THREAD_ARRAY *rngarr, int thread)
BLI_INLINE double halton_ex (double invprimes, double *offset)
void BLI_halton_1d (uint prime, double offset, int n, double *r)
void BLI_halton_2d (const uint prime[2], double offset[2], int n, double *r)
void BLI_halton_3d (const uint prime[3], double offset[3], int n, double *r)
BLI_INLINE double radical_inverse (uint n)
void BLI_hammersley_1d (uint n, double *r)

Macro Definition Documentation

◆ hash

#define hash   BLI_noise_hash_uchar_512

Definition at line 28 of file rand.cc.

Function Documentation

◆ BLI_array_randomize()

void BLI_array_randomize ( void * data,
unsigned int elem_size,
unsigned int elem_num,
unsigned int seed )

◆ BLI_bitmap_randomize()

void BLI_bitmap_randomize ( BLI_bitmap * bitmap,
uint bits_num,
uint seed )

◆ BLI_halton_1d()

void BLI_halton_1d ( unsigned int prime,
double offset,
int n,
double * r )

Return the _n_th number of the given low-discrepancy sequence.

Definition at line 226 of file rand.cc.

References BLI_halton_1d(), and halton_ex().

Referenced by BLI_halton_1d(), and BLI_rng_shuffle_bitmap().

◆ BLI_halton_2d()

void BLI_halton_2d ( const uint prime[2],
double offset[2],
int n,
double * r )

◆ BLI_halton_3d()

void BLI_halton_3d ( const uint prime[3],
double offset[3],
int n,
double * r )

◆ BLI_hammersley_1d()

void BLI_hammersley_1d ( uint n,
double * r )

Definition at line 281 of file rand.cc.

References BLI_hammersley_1d(), and radical_inverse().

Referenced by BLI_hammersley_1d(), BLI_rng_shuffle_bitmap(), and hammersley_create().

◆ BLI_hash_frand()

float BLI_hash_frand ( unsigned int seed)

Return a pseudo-random (hash) float from an integer value

Definition at line 148 of file rand.cc.

References BLI_hash_frand(), BLI_rng_get_float(), and BLI_rng_srandom().

Referenced by BLI_hash_frand(), BLI_rng_shuffle_bitmap(), and modify_mesh().

◆ BLI_rng_free()

◆ BLI_rng_get_char_n()

void BLI_rng_get_char_n ( RNG * rng,
char * bytes,
size_t bytes_len )

◆ BLI_rng_get_double()

double BLI_rng_get_double ( struct RNG * rng)
Returns
Random value (0..1), but never 1.0.

Definition at line 83 of file rand.cc.

References BLI_rng_get_double(), blender::RandomNumberGenerator::get_double(), and RNG::rng.

Referenced by BLI_jitter_init(), BLI_rng_get_char_n(), BLI_rng_get_double(), hammersley_create(), and particles_fluid_step().

◆ BLI_rng_get_float()

◆ BLI_rng_get_int()

◆ BLI_rng_get_tri_sample_float_v2()

void BLI_rng_get_tri_sample_float_v2 ( struct RNG * rng,
const float v1[2],
const float v2[2],
const float v3[2],
float r_pt[2] )

◆ BLI_rng_get_uint()

◆ BLI_rng_new()

◆ BLI_rng_new_srandom()

◆ BLI_rng_seed()

void BLI_rng_seed ( RNG * rng,
uint seed )

◆ BLI_rng_shuffle_array()

void BLI_rng_shuffle_array ( RNG * rng,
void * data,
uint elem_size_i,
uint elem_num )

Definition at line 99 of file rand.cc.

References BLI_rng_get_uint(), BLI_rng_shuffle_array(), data, free(), and i.

◆ BLI_rng_shuffle_bitmap()

void BLI_rng_shuffle_bitmap ( RNG * rng,
BLI_bitmap * bitmap,
uint bits_num )

Definition at line 123 of file rand.cc.

References BLI_BITMAP_SET, BLI_BITMAP_TEST, BLI_rng_get_uint(), BLI_rng_shuffle_bitmap(), and i.

◆ BLI_rng_skip()

void BLI_rng_skip ( struct RNG * rng,
int n )

Note that skipping is as slow as generating n numbers! Simulate getting n random values.

Note
Useful when threaded code needs consistent values, independent of task division.

Definition at line 141 of file rand.cc.

References BLI_rng_skip(), RNG::rng, and blender::RandomNumberGenerator::skip().

Referenced by BLI_rng_shuffle_bitmap(), BLI_rng_skip(), distribute_children_exec(), distribute_from_faces_exec(), distribute_from_verts_exec(), distribute_from_volume_exec(), exec_distribute_child(), and exec_distribute_parent().

◆ BLI_rng_srandom()

void BLI_rng_srandom ( struct RNG * rng,
unsigned int seed )

Use a hash table to create better seed.

Definition at line 63 of file rand.cc.

References BLI_rng_srandom(), RNG::rng, and blender::RandomNumberGenerator::seed_random().

Referenced by BKE_brush_system_init(), BLI_hash_frand(), BLI_rng_srandom(), and BLI_rng_threaded_new().

◆ BLI_rng_thread_rand()

int BLI_rng_thread_rand ( RNG_THREAD_ARRAY * rngarr,
int thread )

◆ BLI_rng_threaded_free()

void BLI_rng_threaded_free ( RNG_THREAD_ARRAY * rngarr)

Definition at line 190 of file rand.cc.

References BLI_rng_threaded_free().

Referenced by BLI_rng_shuffle_bitmap(), BLI_rng_threaded_free(), and RE_texture_rng_exit().

◆ BLI_rng_threaded_new()

RNG_THREAD_ARRAY * BLI_rng_threaded_new ( void )

array versions for thread safe random generation

Definition at line 178 of file rand.cc.

References BLENDER_MAX_THREADS, BLI_rng_srandom(), BLI_rng_threaded_new(), i, and RNG_THREAD_ARRAY::rng_tab.

Referenced by BLI_rng_shuffle_bitmap(), BLI_rng_threaded_new(), and RE_texture_rng_init().

◆ halton_ex()

BLI_INLINE double halton_ex ( double invprimes,
double * offset )

Definition at line 204 of file rand.cc.

References BLI_INLINE, e, fabs(), and halton_ex().

Referenced by BLI_halton_1d(), BLI_halton_2d(), BLI_halton_3d(), and halton_ex().

◆ radical_inverse()

BLI_INLINE double radical_inverse ( uint n)

Definition at line 266 of file rand.cc.

References BLI_INLINE, and radical_inverse().

Referenced by BLI_hammersley_1d(), and radical_inverse().