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>2012-12-20 23:26:57 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-12-20 23:26:57 +0400
commitabd3c876637d8bf870d83364ed194fabae7eea85 (patch)
tree213ff8325cb62f1233aaa00b3260f59071669965 /intern/cycles/kernel/kernel_object.h
parente7731cbede93af16a9cd5ceef9f6a222fc3a6772 (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.h28
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)
{