diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-12-20 23:26:57 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-12-20 23:26:57 +0400 |
commit | abd3c876637d8bf870d83364ed194fabae7eea85 (patch) | |
tree | 213ff8325cb62f1233aaa00b3260f59071669965 /intern/cycles/kernel/kernel_object.h | |
parent | e7731cbede93af16a9cd5ceef9f6a222fc3a6772 (diff) |
Cycles: reduce memory usage of instanced objects by about 40%, as long as the
motion vector pass is not enabled.
Diffstat (limited to 'intern/cycles/kernel/kernel_object.h')
-rw-r--r-- | intern/cycles/kernel/kernel_object.h | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/intern/cycles/kernel/kernel_object.h b/intern/cycles/kernel/kernel_object.h index 2b38544e527..40aa4753daa 100644 --- a/intern/cycles/kernel/kernel_object.h +++ b/intern/cycles/kernel/kernel_object.h @@ -20,11 +20,16 @@ CCL_NAMESPACE_BEGIN enum ObjectTransform { OBJECT_TRANSFORM = 0, - OBJECT_INVERSE_TRANSFORM = 3, - OBJECT_PROPERTIES = 6, - OBJECT_TRANSFORM_MOTION_PRE = 8, - OBJECT_TRANSFORM_MOTION_POST = 12, - OBJECT_DUPLI = 16 + OBJECT_TRANSFORM_MOTION_PRE = 0, + OBJECT_INVERSE_TRANSFORM = 4, + OBJECT_TRANSFORM_MOTION_POST = 4, + OBJECT_PROPERTIES = 8, + OBJECT_DUPLI = 9 +}; + +enum ObjectVectorTransform { + OBJECT_VECTOR_MOTION_PRE = 0, + OBJECT_VECTOR_MOTION_POST = 3 }; __device_inline Transform object_fetch_transform(KernelGlobals *kg, int object, enum ObjectTransform type) @@ -40,6 +45,19 @@ __device_inline Transform object_fetch_transform(KernelGlobals *kg, int object, return tfm; } +__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; +} + #ifdef __OBJECT_MOTION__ __device_inline Transform object_fetch_transform_motion(KernelGlobals *kg, int object, float time) { |