diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-08 08:48:14 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-10 06:54:05 +0300 |
commit | b66efbecf4780c65833f72ac8de5d18b5bca7e15 (patch) | |
tree | 58f258df9e797f55ad1a77082115989df147e6db /intern/cycles/kernel/geom/geom_object.h | |
parent | 623141f339d5066ed6b96ad70ab45fb294e3e612 (diff) |
Code refactor: make Transform always affine, dropping last row.
This save a little memory and copying in the kernel by storing only a 4x3
matrix instead of a 4x4 matrix. We already did this in a few places, and
those don't need to be special exceptions anymore now.
Diffstat (limited to 'intern/cycles/kernel/geom/geom_object.h')
-rw-r--r-- | intern/cycles/kernel/geom/geom_object.h | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/intern/cycles/kernel/geom/geom_object.h b/intern/cycles/kernel/geom/geom_object.h index cd330308e07..62bc46dc21b 100644 --- a/intern/cycles/kernel/geom/geom_object.h +++ b/intern/cycles/kernel/geom/geom_object.h @@ -28,12 +28,12 @@ CCL_NAMESPACE_BEGIN enum ObjectTransform { OBJECT_TRANSFORM = 0, - OBJECT_INVERSE_TRANSFORM = 4, + OBJECT_INVERSE_TRANSFORM = 1, }; enum ObjectVectorTransform { OBJECT_VECTOR_MOTION_PRE = 0, - OBJECT_VECTOR_MOTION_POST = 3 + OBJECT_VECTOR_MOTION_POST = 1 }; /* Object to world space transformation */ @@ -51,8 +51,6 @@ ccl_device_inline Transform object_fetch_transform(KernelGlobals *kg, int object tfm.y = kernel_tex_fetch(__objects, object).tfm.pre.y; tfm.z = kernel_tex_fetch(__objects, object).tfm.pre.z; } - tfm.w = make_float4(0.0f, 0.0f, 0.0f, 1.0f); - return tfm; } @@ -60,20 +58,12 @@ ccl_device_inline Transform object_fetch_transform(KernelGlobals *kg, int object ccl_device_inline Transform lamp_fetch_transform(KernelGlobals *kg, int lamp, bool inverse) { - Transform tfm; if(inverse) { - tfm.x = kernel_tex_fetch(__lights, lamp).itfm[0]; - tfm.y = kernel_tex_fetch(__lights, lamp).itfm[1]; - tfm.z = kernel_tex_fetch(__lights, lamp).itfm[2]; + return kernel_tex_fetch(__lights, lamp).itfm; } else { - tfm.x = kernel_tex_fetch(__lights, lamp).tfm[0]; - tfm.y = kernel_tex_fetch(__lights, lamp).tfm[1]; - tfm.z = kernel_tex_fetch(__lights, lamp).tfm[2]; + return kernel_tex_fetch(__lights, lamp).tfm; } - tfm.w = make_float4(0.0f, 0.0f, 0.0f, 1.0f); - - return tfm; } /* Object to world space transformation for motion vectors */ @@ -81,14 +71,7 @@ ccl_device_inline Transform lamp_fetch_transform(KernelGlobals *kg, int lamp, bo ccl_device_inline Transform object_fetch_vector_transform(KernelGlobals *kg, int object, enum ObjectVectorTransform type) { int offset = object*OBJECT_VECTOR_SIZE + (int)type; - - Transform tfm; - tfm.x = kernel_tex_fetch(__objects_vector, offset + 0); - tfm.y = kernel_tex_fetch(__objects_vector, offset + 1); - tfm.z = kernel_tex_fetch(__objects_vector, offset + 2); - tfm.w = make_float4(0.0f, 0.0f, 0.0f, 1.0f); - - return tfm; + return kernel_tex_fetch(__objects_vector, offset); } /* Motion blurred object transformations */ |