ClangFormat: apply to source, most of intern
[blender.git] / intern / cycles / bvh / bvh_embree.h
1 /*
2  * Copyright 2018, 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_EMBREE_H__
18 #define __BVH_EMBREE_H__
19
20 #ifdef WITH_EMBREE
21
22 #  include <embree3/rtcore.h>
23 #  include <embree3/rtcore_scene.h>
24
25 #  include "bvh/bvh.h"
26 #  include "bvh/bvh_params.h"
27
28 #  include "util/util_thread.h"
29 #  include "util/util_types.h"
30 #  include "util/util_vector.h"
31
32 CCL_NAMESPACE_BEGIN
33
34 class Mesh;
35
36 class BVHEmbree : public BVH {
37  public:
38   virtual void build(Progress &progress, Stats *stats) override;
39   virtual ~BVHEmbree();
40   RTCScene scene;
41   static void destroy(RTCScene);
42
43   /* Building process. */
44   virtual BVHNode *widen_children_nodes(const BVHNode *root) override;
45
46  protected:
47   friend class BVH;
48   BVHEmbree(const BVHParams &params, const vector<Object *> &objects);
49
50   virtual void pack_nodes(const BVHNode *) override;
51   virtual void refit_nodes() override;
52
53   void add_object(Object *ob, int i);
54   void add_instance(Object *ob, int i);
55   void add_curves(Object *ob, int i);
56   void add_triangles(Object *ob, int i);
57
58   ssize_t mem_used;
59
60   void add_delayed_delete_scene(RTCScene scene)
61   {
62     delayed_delete_scenes.push_back(scene);
63   }
64   BVHEmbree *top_level;
65
66  private:
67   void delete_rtcScene();
68   void update_tri_vertex_buffer(RTCGeometry geom_id, const Mesh *mesh);
69   void update_curve_vertex_buffer(RTCGeometry geom_id, const Mesh *mesh);
70
71   static RTCDevice rtc_shared_device;
72   static int rtc_shared_users;
73   static thread_mutex rtc_shared_mutex;
74
75   Stats *stats;
76   vector<RTCScene> delayed_delete_scenes;
77   int curve_subdivisions;
78   enum RTCBuildQuality build_quality;
79   bool use_curves, use_ribbons, dynamic_scene;
80 };
81
82 CCL_NAMESPACE_END
83
84 #endif /* WITH_EMBREE */
85
86 #endif /* __BVH_EMBREE_H__ */