1d8099f85103b1c25839f11da8d38a53c072f0d5
[blender.git] / intern / cycles / render / object.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16
17 #ifndef __OBJECT_H__
18 #define __OBJECT_H__
19
20 #include "util_boundbox.h"
21 #include "util_param.h"
22 #include "util_transform.h"
23 #include "util_types.h"
24
25 CCL_NAMESPACE_BEGIN
26
27 class Device;
28 class DeviceScene;
29 class Mesh;
30 class Progress;
31 class Scene;
32 struct Transform;
33
34 /* Object */
35
36 class Object {
37 public:
38         Mesh *mesh;
39         Transform tfm;
40         BoundBox bounds;
41         ustring name;
42         uint random_id;
43         int pass_id;
44         vector<ParamValue> attributes;
45         uint visibility;
46         MotionTransform motion;
47         bool use_motion;
48         bool use_holdout;
49         bool curverender;
50
51         float3 dupli_generated;
52         float2 dupli_uv;
53
54         int particle_id;
55
56         Object();
57         ~Object();
58
59         void tag_update(Scene *scene);
60
61         void compute_bounds(bool motion_blur, float shuttertime);
62         void apply_transform();
63 };
64
65 /* Object Manager */
66
67 class ObjectManager {
68 public:
69         bool need_update;
70
71         ObjectManager();
72         ~ObjectManager();
73
74         void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
75         void device_update_transforms(Device *device, DeviceScene *dscene, Scene *scene, uint *object_flag, Progress& progress);
76         void device_free(Device *device, DeviceScene *dscene);
77
78         void tag_update(Scene *scene);
79
80         void apply_static_transforms(DeviceScene *dscene, Scene *scene, uint *object_flag, Progress& progress);
81 };
82
83 CCL_NAMESPACE_END
84
85 #endif /* __OBJECT_H__ */
86