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:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-03-10 20:03:03 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-03-10 20:03:03 +0300
commit814fa068514a6e9f3e84553310f1d0b0b7918435 (patch)
tree9457ee2264e868443bce8891f352db0760a32ad3 /intern/cycles/kernel/kernel_projection.h
parent59a7204797a426f6ca36cbeb6fcff13e4b717863 (diff)
Cycles: Optimize spherical stereo position when no spherical stereo is used
Diffstat (limited to 'intern/cycles/kernel/kernel_projection.h')
-rw-r--r--intern/cycles/kernel/kernel_projection.h42
1 files changed, 25 insertions, 17 deletions
diff --git a/intern/cycles/kernel/kernel_projection.h b/intern/cycles/kernel/kernel_projection.h
index fa06b937e61..aedcbddbd98 100644
--- a/intern/cycles/kernel/kernel_projection.h
+++ b/intern/cycles/kernel/kernel_projection.h
@@ -222,33 +222,41 @@ ccl_device float2 direction_to_panorama(KernelGlobals *kg, float3 dir)
}
}
-ccl_device float3 spherical_stereo_position(KernelGlobals *kg, float3 dir, float3 pos)
+ccl_device float3 spherical_stereo_position(KernelGlobals *kg,
+ float3 dir,
+ float3 pos)
{
- float3 up, side;
+ const float interocular_offset = kernel_data.cam.interocular_offset;
- /* Interocular_offset of zero means either non stereo, or stereo without spherical stereo. */
+ /* Interocular offset of zero means either non stereo, or stereo without
+ * spherical stereo.
+ */
+ if(interocular_offset == 0.0f) {
+ return pos;
+ }
- up = make_float3(0.0f, 0.0f, 1.0f);
- side = normalize(cross(dir, up));
+ float3 up = make_float3(0.0f, 0.0f, 1.0f);
+ float3 side = normalize(cross(dir, up));
- return pos + (side * kernel_data.cam.interocular_offset);
+ return pos + (side * interocular_offset);
}
-ccl_device float3 spherical_stereo_direction(KernelGlobals *kg, float3 dir, float3 pos, float3 newpos)
+ccl_device float3 spherical_stereo_direction(KernelGlobals *kg,
+ float3 dir,
+ float3 pos,
+ float3 newpos)
{
- float3 screenpos, dirnew;
-
- /* Interocular_distance of zero means either no stereo, or stereo without spherical stereo. */
- if(kernel_data.cam.interocular_offset == 0.0f)
+ /* Interocular offset of zero means either no stereo, or stereo without
+ * spherical stereo.
+ */
+ if(kernel_data.cam.interocular_offset == 0.0f) {
return dir;
+ }
- screenpos = pos + (normalize(dir) * kernel_data.cam.convergence_distance);
- dirnew = screenpos - newpos;
-
- return dirnew;
+ float3 screenpos = pos + (normalize(dir) * kernel_data.cam.convergence_distance);
+ return screenpos - newpos;
}
CCL_NAMESPACE_END
-#endif /* __KERNEL_PROJECTION_CL__ */
-
+#endif /* __KERNEL_PROJECTION_CL__ */