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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-31 19:18:13 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-31 19:18:13 +0400
commitb5595298d36a5023cc33ed41463fd6c032f2ec7b (patch)
treee3a404393ff4a8e39a991f9a3d8ca78c0d3033a7 /intern/cycles/kernel/kernel_displace.h
parent1b4487e813edac9c5b57b6d5c6175c46c4a54b1c (diff)
Cycles code refactoring: change displace kernel into more generic shader
evaluate kernel, added background shader evaluate.
Diffstat (limited to 'intern/cycles/kernel/kernel_displace.h')
-rw-r--r--intern/cycles/kernel/kernel_displace.h48
1 files changed, 41 insertions, 7 deletions
diff --git a/intern/cycles/kernel/kernel_displace.h b/intern/cycles/kernel/kernel_displace.h
index ef6c3810a75..c39e5e43dbb 100644
--- a/intern/cycles/kernel/kernel_displace.h
+++ b/intern/cycles/kernel/kernel_displace.h
@@ -18,17 +18,51 @@
CCL_NAMESPACE_BEGIN
-__device void kernel_displace(KernelGlobals *kg, uint4 *input, float3 *offset, int i)
+__device void kernel_shader_evaluate(KernelGlobals *kg, uint4 *input, float3 *output, ShaderEvalType type, int i)
{
- /* setup shader data */
ShaderData sd;
uint4 in = input[i];
- shader_setup_from_displace(kg, &sd, in.x, in.y, __int_as_float(in.z), __int_as_float(in.w));
+ float3 out;
- /* evaluate */
- float3 P = sd.P;
- shader_eval_displacement(kg, &sd);
- offset[i] = sd.P - P;
+ if(type == SHADER_EVAL_DISPLACE) {
+ /* setup shader data */
+ int object = in.x;
+ int prim = in.y;
+ float u = __int_as_float(in.z);
+ float v = __int_as_float(in.w);
+
+ shader_setup_from_displace(kg, &sd, object, prim, u, v);
+
+ /* evaluate */
+ float3 P = sd.P;
+ shader_eval_displacement(kg, &sd);
+ out = sd.P - P;
+ }
+ else { // SHADER_EVAL_BACKGROUND
+ /* setup ray */
+ Ray ray;
+
+ ray.P = make_float3(0.0f, 0.0f, 0.0f);
+ ray.D = make_float3(__int_as_float(in.x), __int_as_float(in.y), __int_as_float(in.z));
+ ray.t = 0.0f;
+
+#ifdef __RAY_DIFFERENTIALS__
+ ray.dD.dx = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dD.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dP.dx = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+#endif
+
+ /* setup shader data */
+ shader_setup_from_background(kg, &sd, &ray);
+
+ /* evaluate */
+ int flag = 0; /* we can't know which type of BSDF this is for */
+ out = shader_eval_background(kg, &sd, flag);
+ }
+
+ /* write output */
+ output[i] = out;
}
CCL_NAMESPACE_END