Cleanup: Remove some underlying code for the BVH disk cache.
[blender-staging.git] / intern / cycles / bvh / bvh.h
index ef4575ad7ee33646ae74415ca7aeb4127bde0583..0ee5a309dc8f219c1bedf295a596a47874b4b289 100644 (file)
@@ -20,7 +20,6 @@
 
 #include "bvh_params.h"
 
-#include "util_string.h"
 #include "util_types.h"
 #include "util_vector.h"
 
@@ -36,7 +35,9 @@ class Object;
 class Progress;
 
 #define BVH_NODE_SIZE  4
+#define BVH_NODE_LEAF_SIZE     1
 #define BVH_QNODE_SIZE 7
+#define BVH_QNODE_LEAF_SIZE    1
 #define BVH_ALIGN              4096
 #define TRI_NODE_SIZE  3
 
@@ -47,7 +48,9 @@ class Progress;
 struct PackedBVH {
        /* BVH nodes storage, one node is 4x int4, and contains two bounding boxes,
         * and child, triangle or object indexes depending on the node type */
-       array<int4> nodes; 
+       array<int4> nodes;
+       /* BVH leaf nodes storage. */
+       array<int4> leaf_nodes;
        /* object index to BVH node index mapping for instances */
        array<int> object_node; 
        /* precomputed triangle intersection data, one triangle is 4x float4 */
@@ -61,9 +64,6 @@ struct PackedBVH {
        array<int> prim_index;
        /* mapping from BVH primitive index, to the object id of that primitive. */
        array<int> prim_object;
-       /* quick array to lookup if a node is a leaf, not used for traversal, only
-        * for instance BVH merging  */
-       array<int> is_leaf;
 
        /* index of the root node. */
        int root_index;
@@ -86,7 +86,6 @@ public:
        PackedBVH pack;
        BVHParams params;
        vector<Object*> objects;
-       string cache_filename;
 
        static BVH *create(const BVHParams& params, const vector<Object*>& objects);
        virtual ~BVH() {}
@@ -94,8 +93,6 @@ public:
        void build(Progress& progress);
        void refit(Progress& progress);
 
-       void clear_cache_except();
-
 protected:
        BVH(const BVHParams& params, const vector<Object*>& objects);
 
@@ -106,13 +103,12 @@ protected:
        /* triangles and strands*/
        void pack_primitives();
        void pack_triangle(int idx, float4 woop[3]);
-       void pack_curve_segment(int idx, float4 woop[3]);
 
        /* merge instance BVH's */
-       void pack_instances(size_t nodes_size);
+       void pack_instances(size_t nodes_size, size_t leaf_nodes_size);
 
        /* for subclasses to implement */
-       virtual void pack_nodes(const array<int>& prims, const BVHNode *root) = 0;
+       virtual void pack_nodes(const BVHNode *root) = 0;
        virtual void refit_nodes() = 0;
 };
 
@@ -127,7 +123,7 @@ protected:
        RegularBVH(const BVHParams& params, const vector<Object*>& objects);
 
        /* pack */
-       void pack_nodes(const array<int>& prims, const BVHNode *root);
+       void pack_nodes(const BVHNode *root);
        void pack_leaf(const BVHStackEntry& e, const LeafNode *leaf);
        void pack_inner(const BVHStackEntry& e, const BVHStackEntry& e0, const BVHStackEntry& e1);
        void pack_node(int idx, const BoundBox& b0, const BoundBox& b1, int c0, int c1, uint visibility0, uint visibility1);
@@ -148,7 +144,7 @@ protected:
        QBVH(const BVHParams& params, const vector<Object*>& objects);
 
        /* pack */
-       void pack_nodes(const array<int>& prims, const BVHNode *root);
+       void pack_nodes(const BVHNode *root);
        void pack_leaf(const BVHStackEntry& e, const LeafNode *leaf);
        void pack_inner(const BVHStackEntry& e, const BVHStackEntry *en, int num);