Cleanup: commas at the end of enums
[blender.git] / source / blender / blenkernel / intern / pbvh_intern.h
index bae323dedefe835d528e56442c513d6105d123d5..1f85b4b227bcca89dd52bf448e909219554bcbd4 100644 (file)
@@ -83,12 +83,11 @@ struct PBVHNode {
         * array. The array is sized to match 'totprim', and each of
         * the face's corners gets an index into the vert_indices
         * array, in the same order as the corners in the original
-        * MFace. The fourth value should not be used if the original
-        * face is a triangle.
+        * MLoopTri.
         *
         * Used for leaf nodes in a mesh-based PBVH (not multires.)
         */
-       const int (*face_vert_indices)[4];
+       const int (*face_vert_indices)[3];
 
        /* Indicates whether this node is a leaf or not; also used for
         * marking various updates that need to be applied. */
@@ -113,7 +112,7 @@ struct PBVHNode {
 };
 
 typedef enum {
-       PBVH_DYNTOPO_SMOOTH_SHADING = 1
+       PBVH_DYNTOPO_SMOOTH_SHADING = 1,
 } PBVHFlags;
 
 typedef struct PBVHBMeshLog PBVHBMeshLog;
@@ -145,6 +144,11 @@ struct PBVH {
        const DMFlagMat *grid_flag_mats;
        int totgrid;
        BLI_bitmap **grid_hidden;
+       /* index_buf of GPU_PBVH_Buffers can be the same for all 'fully drawn' nodes (same size).
+        * Previously was stored in a static var in gpu_buffer.c, but this breaks in case we handle several different
+        * objects in sculpt mode with different sizes at the same time, so now storing that common gpu buffer
+        * in an opaque pointer per pbvh. See T47637. */
+       struct GridCommonGPUBuffer *grid_common_gpu_buffer;
 
        /* Only used during BVH build and update,
         * don't need to remain valid after */
@@ -158,6 +162,7 @@ struct PBVH {
        bool deformed;
 
        bool show_diffuse_color;
+       bool show_mask;
 
        /* Dynamic topology */
        BMesh *bm;
@@ -179,11 +184,21 @@ void pbvh_grow_nodes(PBVH *bvh, int totnode);
 bool ray_face_intersection_quad(
         const float ray_start[3], const float ray_normal[3],
         const float *t0, const float *t1, const float *t2, const float *t3,
-        float *r_dist);
+        float *depth);
 bool ray_face_intersection_tri(
         const float ray_start[3], const float ray_normal[3],
         const float *t0, const float *t1, const float *t2,
-        float *r_dist);
+        float *depth);
+
+bool ray_face_nearest_quad(
+        const float ray_start[3], const float ray_normal[3],
+        const float *t0, const float *t1, const float *t2, const float *t3,
+        float *r_depth, float *r_dist_sq);
+bool ray_face_nearest_tri(
+        const float ray_start[3], const float ray_normal[3],
+        const float *t0, const float *t1, const float *t2,
+        float *r_depth, float *r_dist_sq);
+
 void pbvh_update_BB_redraw(PBVH *bvh, PBVHNode **nodes, int totnode, int flag);
 
 /* pbvh_bmesh.c */
@@ -191,6 +206,10 @@ bool pbvh_bmesh_node_raycast(
         PBVHNode *node, const float ray_start[3],
         const float ray_normal[3], float *dist,
         bool use_original);
+bool pbvh_bmesh_node_nearest_to_ray(
+        PBVHNode *node, const float ray_start[3],
+        const float ray_normal[3], float *depth, float *dist_sq,
+        bool use_original);
 
 void pbvh_bmesh_normals_update(PBVHNode **nodes, int totnode);