[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32998] branches/particles-2010/source/ blender/nodes/intern: Replaced the use of BLI random functions in the " Random" node by a straightforward pseudo-random number generation based on randomized arrays .
Lukas Toenne
lukas.toenne at googlemail.com
Thu Nov 11 10:19:06 CET 2010
Revision: 32998
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32998
Author: lukastoenne
Date: 2010-11-11 10:19:06 +0100 (Thu, 11 Nov 2010)
Log Message:
-----------
Replaced the use of BLI random functions in the "Random" node by a straightforward pseudo-random number generation based on randomized arrays. This is a thread-safe implementation (the arrays are constant), the disadvantage is that the static arrays (one for ints, one for floats) are rather large (65536 entries) and still have a much shorter period than "real" RNGs. An alternative would be using a separate RNG for each thread, but that requires passing thread info to kernel functions.
Modified Paths:
--------------
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_vectormath.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodetree.c
branches/particles-2010/source/blender/nodes/intern/SIM_util.c
branches/particles-2010/source/blender/nodes/intern/SIM_util.h
Added Paths:
-----------
branches/particles-2010/source/blender/nodes/intern/SIM_util_random.h
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c 2010-11-11 07:51:12 UTC (rev 32997)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c 2010-11-11 09:19:06 UTC (rev 32998)
@@ -104,19 +104,19 @@
}
return sim_kernel_source_end(source);
}
-static void kernel_add_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_float(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = SIM_INPUT_FLOAT(0, global_id) + SIM_INPUT_FLOAT(1, global_id);
}
-static void kernel_add_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_int(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_INT(0, global_id) = SIM_INPUT_INT(0, global_id) + SIM_INPUT_INT(1, global_id);
}
-static void kernel_add_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
{
add_v3_v3v3(SIM_OUTPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(1, global_id));
}
-static void kernel_add_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float *res=SIM_OUTPUT_RGBA(0, global_id);
const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -201,19 +201,19 @@
}
return sim_kernel_source_end(source);
}
-static void kernel_subtract_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_float(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = SIM_INPUT_FLOAT(0, global_id) - SIM_INPUT_FLOAT(1, global_id);
}
-static void kernel_subtract_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_int(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_INT(0, global_id) = SIM_INPUT_INT(0, global_id) - SIM_INPUT_INT(1, global_id);
}
-static void kernel_subtract_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
{
sub_v3_v3v3(SIM_OUTPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(1, global_id));
}
-static void kernel_subtract_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float *res=SIM_OUTPUT_RGBA(0, global_id);
const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -298,19 +298,19 @@
}
return sim_kernel_source_end(source);
}
-static void kernel_multiply_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_float(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = SIM_INPUT_FLOAT(0, global_id) * SIM_INPUT_FLOAT(1, global_id);
}
-static void kernel_multiply_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_int(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_INT(0, global_id) = SIM_INPUT_INT(0, global_id) * SIM_INPUT_INT(1, global_id);
}
-static void kernel_multiply_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
{
mul_v3_v3v3(SIM_OUTPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(1, global_id));
}
-static void kernel_multiply_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float *res=SIM_OUTPUT_RGBA(0, global_id);
const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -400,15 +400,15 @@
}
return sim_kernel_source_end(source);
}
-static void kernel_divide_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_float(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = (SIM_INPUT_FLOAT(1, global_id) != 0.0f ? SIM_INPUT_FLOAT(0, global_id) / SIM_INPUT_FLOAT(1, global_id) : 0.0f);
}
-static void kernel_divide_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_int(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_INT(0, global_id) = (SIM_INPUT_INT(1, global_id) != 0 ? SIM_INPUT_INT(0, global_id) / SIM_INPUT_INT(1, global_id) : 0);
}
-static void kernel_divide_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float *res=SIM_OUTPUT_VECTOR(0, global_id);
const float *a=SIM_INPUT_VECTOR(0, global_id);
@@ -417,7 +417,7 @@
res[1] = (b[1] != 0.0f ? a[1] / b[1] : 0.0f);
res[2] = (b[2] != 0.0f ? a[2] / b[2] : 0.0f);
}
-static void kernel_divide_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float *res=SIM_OUTPUT_RGBA(0, global_id);
const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -486,7 +486,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_sine(int global_id, void **args, SimNodeStack *node)
+static void kernel_sine(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = sin(SIM_INPUT_FLOAT(0, global_id));
}
@@ -534,7 +534,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_cosine(int global_id, void **args, SimNodeStack *node)
+static void kernel_cosine(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = cos(SIM_INPUT_FLOAT(0, global_id));
}
@@ -582,7 +582,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_tangent(int global_id, void **args, SimNodeStack *node)
+static void kernel_tangent(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = tan(SIM_INPUT_FLOAT(0, global_id));
}
@@ -631,7 +631,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_arcsine(int global_id, void **args, SimNodeStack *node)
+static void kernel_arcsine(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float x = SIM_INPUT_FLOAT(0, global_id);
*SIM_OUTPUT_FLOAT(0, global_id) = (x <= 1.0f && x >= -1.0f ? asin(x) : 0.0f);
@@ -681,7 +681,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_arccosine(int global_id, void **args, SimNodeStack *node)
+static void kernel_arccosine(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float x = SIM_INPUT_FLOAT(0, global_id);
*SIM_OUTPUT_FLOAT(0, global_id) = (x <= 1.0f && x >= -1.0f ? acos(x) : 0.0f);
@@ -730,7 +730,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_arctangent(int global_id, void **args, SimNodeStack *node)
+static void kernel_arctangent(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_FLOAT(0, global_id) = atan(SIM_INPUT_FLOAT(0, global_id));
}
@@ -783,7 +783,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_power(int global_id, void **args, SimNodeStack *node)
+static void kernel_power(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float x = SIM_INPUT_FLOAT(0, global_id);
*SIM_OUTPUT_FLOAT(0, global_id) = (x >= 0.0f ? pow(x, SIM_INPUT_FLOAT(1, global_id)) : 0.0f);
@@ -834,7 +834,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_logarithm(int global_id, void **args, SimNodeStack *node)
+static void kernel_logarithm(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float x = SIM_INPUT_FLOAT(0, global_id);
float y = SIM_INPUT_FLOAT(1, global_id);
@@ -902,13 +902,13 @@
}
return sim_kernel_source_end(source);
}
-static void kernel_minimum_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_minimum_float(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float a = SIM_INPUT_FLOAT(0, global_id);
float b = SIM_INPUT_FLOAT(1, global_id);
*SIM_OUTPUT_FLOAT(0, global_id) = (a < b ? a : b);
}
-static void kernel_minimum_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_minimum_int(int global_id, void **UNUSED(args), SimNodeStack *node)
{
int a = SIM_INPUT_INT(0, global_id);
int b = SIM_INPUT_INT(1, global_id);
@@ -982,13 +982,13 @@
}
return sim_kernel_source_end(source);
}
-static void kernel_maximum_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_maximum_float(int global_id, void **UNUSED(args), SimNodeStack *node)
{
float a = SIM_INPUT_FLOAT(0, global_id);
float b = SIM_INPUT_FLOAT(1, global_id);
*SIM_OUTPUT_FLOAT(0, global_id) = (a > b ? a : b);
}
-static void kernel_maximum_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_maximum_int(int global_id, void **UNUSED(args), SimNodeStack *node)
{
int a = SIM_INPUT_INT(0, global_id);
int b = SIM_INPUT_INT(1, global_id);
@@ -1048,7 +1048,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_round(int global_id, void **args, SimNodeStack *node)
+static void kernel_round(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_INT(0, global_id) = (int)(SIM_INPUT_FLOAT(0, global_id) + 0.5f);
}
@@ -1096,7 +1096,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_lessthan(int global_id, void **args, SimNodeStack *node)
+static void kernel_lessthan(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_BOOL(0, global_id) = (SIM_INPUT_FLOAT(0, global_id) < SIM_INPUT_FLOAT(1, global_id));
}
@@ -1144,7 +1144,7 @@
));
return sim_kernel_source_end(source);
}
-static void kernel_greaterthan(int global_id, void **args, SimNodeStack *node)
+static void kernel_greaterthan(int global_id, void **UNUSED(args), SimNodeStack *node)
{
*SIM_OUTPUT_BOOL(0, global_id) = (SIM_INPUT_FLOAT(0, global_id) > SIM_INPUT_FLOAT(1, global_id));
}
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c 2010-11-11 07:51:12 UTC (rev 32997)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list