Cycles: Make all #include statements relative to cycles source directory
[blender.git] / intern / cycles / bvh / bvh_unaligned.h
1 /*
2  * Copyright 2011-2016 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 __BVH_UNALIGNED_H__
18 #define __BVH_UNALIGNED_H__
19
20 #include "util/util_vector.h"
21
22 CCL_NAMESPACE_BEGIN
23
24 class BoundBox;
25 class BVHObjectBinning;
26 class BVHRange;
27 class BVHReference;
28 struct Transform;
29 class Object;
30
31 /* Helper class to perform calculations needed for unaligned nodes. */
32 class BVHUnaligned {
33 public:
34         BVHUnaligned(const vector<Object*>& objects);
35
36         /* Calculate alignment for the oriented node for a given range. */
37         Transform compute_aligned_space(
38                 const BVHObjectBinning& range,
39                 const BVHReference *references) const;
40         Transform compute_aligned_space(
41                 const BVHRange& range,
42                 const BVHReference *references) const;
43
44         /* Calculate alignment for the oriented node for a given reference.
45          *
46          * Return true when space was calculated successfully.
47          */
48         bool compute_aligned_space(const BVHReference& ref,
49                                    Transform *aligned_space) const;
50
51         /* Calculate primitive's bounding box in given space. */
52         BoundBox compute_aligned_prim_boundbox(
53                 const BVHReference& prim,
54                 const Transform& aligned_space) const;
55
56         /* Calculate bounding box in given space. */
57         BoundBox compute_aligned_boundbox(
58                 const BVHObjectBinning& range,
59                 const BVHReference *references,
60                 const Transform& aligned_space,
61                 BoundBox *cent_bounds = NULL) const;
62         BoundBox compute_aligned_boundbox(
63                 const BVHRange& range,
64                 const BVHReference *references,
65                 const Transform& aligned_space,
66                 BoundBox *cent_bounds = NULL) const;
67
68         /* Calculate affine transform for node packing.
69          * Bounds will be in the range of 0..1.
70          */
71         static Transform compute_node_transform(const BoundBox& bounds,
72                                                 const Transform& aligned_space);
73 protected:
74         /* List of objects BVH is being created for. */
75         const vector<Object*>& objects_;
76 };
77
78 CCL_NAMESPACE_END
79
80 #endif /* __BVH_UNALIGNED_H__ */
81