[Bf-blender-cvs] [fb8aa8d54c1] lineart-shadow: Merge branch 'temp-lineart-contained' into lineart-shadow

Yiming Wu noreply at git.blender.org
Thu Jun 2 15:35:47 CEST 2022


Commit: fb8aa8d54c13880e4b3157603e92507c9613c646
Author: Yiming Wu
Date:   Thu Jun 2 21:35:33 2022 +0800
Branches: lineart-shadow
https://developer.blender.org/rBfb8aa8d54c13880e4b3157603e92507c9613c646

Merge branch 'temp-lineart-contained' into lineart-shadow

===================================================================



===================================================================

diff --cc source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 75d93dc2204,9d5cf608c5a..a24acff57bc
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@@ -109,14 -120,16 +107,14 @@@ static bool lineart_triangle_edge_image
                                                          double *from,
                                                          double *to);
  
- static void lineart_bounding_area_link_triangle_cas(LineartRenderBuffer *rb,
-                                                     LineartBoundingArea *root_ba,
-                                                     LineartTriangle *tri,
-                                                     double *LRUB,
-                                                     int recursive,
-                                                     int recursive_level,
-                                                     bool do_intersection,
-                                                     struct LineartIsecThread *th);
 -static void lineart_add_edge_to_array(LineartPendingEdges *pe, LineartEdge *e);
 -
+ static void lineart_bounding_area_link_triangle(LineartRenderBuffer *rb,
+                                                 LineartBoundingArea *root_ba,
+                                                 LineartTriangle *tri,
+                                                 double *LRUB,
+                                                 int recursive,
+                                                 int recursive_level,
+                                                 bool do_intersection,
+                                                 struct LineartIsecThread *th);
  
  static void lineart_free_bounding_area_memory(LineartBoundingArea *ba, bool recursive);
  
diff --cc source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
index 1a9990d1e33,778bb8d0ae5..551ac1fda8d
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
@@@ -84,93 -85,9 +84,93 @@@ void lineart_count_and_print_render_buf
    ((b1)[0] < (b2)[1] && (b1)[1] > (b2)[0] && (b1)[3] < (b2)[2] && (b1)[2] > (b2)[3])
  
  /* Initial bounding area row/column count, setting 10 is tested to be realitvely optimal for the
-  * performance under current CAS algorithm. */
+  * performance under current algorithm. */
  #define LRT_BA_ROWS 10
  
 +#define LRT_EDGE_BA_MARCHING_BEGIN(fb1, fb2) \
 +  double x = fb1[0], y = fb1[1]; \
 +  LineartBoundingArea *ba = lineart_edge_first_bounding_area(rb, fb1, fb2); \
 +  LineartBoundingArea *nba = ba; \
 +  double k = (fb2[1] - fb1[1]) / (fb2[0] - fb1[0] + 1e-30); \
 +  int positive_x = (fb2[0] - fb1[0]) > 0 ? 1 : (fb2[0] == fb1[0] ? 0 : -1); \
 +  int positive_y = (fb2[1] - fb1[1]) > 0 ? 1 : (fb2[1] == fb1[1] ? 0 : -1); \
 +  while (nba)
 +
 +#define LRT_EDGE_BA_MARCHING_NEXT(fb1, fb2) \
 +  /* Marching along `e->v1` to `e->v2`, searching each possible bounding areas it may touch. */ \
 +  nba = lineart_bounding_area_next(nba, fb1, fb2, x, y, k, positive_x, positive_y, &x, &y);
 +
 +#define LRT_EDGE_BA_MARCHING_END
 +
 +void lineart_main_occlusion_begin(struct LineartRenderBuffer *rb);
 +void lineart_main_cull_triangles(struct LineartRenderBuffer *rb, bool clip_far);
 +void lineart_main_free_adjacent_data(struct LineartRenderBuffer *rb);
 +void lineart_main_perspective_division(struct LineartRenderBuffer *rb);
 +void lineart_main_discard_out_of_frame_edges(struct LineartRenderBuffer *rb);
 +void lineart_main_load_geometries(struct Depsgraph *depsgraph,
 +                                  struct Scene *scene,
 +                                  struct Object *camera,
 +                                  struct LineartRenderBuffer *rb,
 +                                  bool allow_duplicates,
 +                                  bool do_shadow_casting,
 +                                  struct ListBase *shadow_elns);
 +void lineart_main_get_view_vector(struct LineartRenderBuffer *rb);
 +void lineart_main_bounding_area_make_initial(struct LineartRenderBuffer *rb);
 +void lineart_main_bounding_areas_connect_post(struct LineartRenderBuffer *rb);
 +void lineart_main_clear_linked_edges(struct LineartRenderBuffer *rb);
 +void lineart_main_link_lines(struct LineartRenderBuffer *rb);
 +void lineart_main_add_triangles(struct LineartRenderBuffer *rb);
 +bool lineart_main_try_generate_shadow(struct Depsgraph *depsgraph,
 +                                      struct Scene *scene,
 +                                      struct LineartRenderBuffer *original_rb,
 +                                      struct LineartGpencilModifierData *lmd,
 +                                      struct LineartStaticMemPool *shadow_data_pool,
 +                                      struct LineartElementLinkNode **r_veln,
 +                                      struct LineartElementLinkNode **r_eeln,
 +                                      struct ListBase *r_calculated_edges_eln_list,
 +                                      struct LineartRenderBuffer **r_shadow_rb_if_reproject);
 +void lineart_main_make_enclosed_shapes(struct LineartRenderBuffer *rb,
 +                                       struct LineartRenderBuffer *shadow_rb);
 +void lineart_main_transform_and_add_shadow(struct LineartRenderBuffer *rb,
 +                                           struct LineartElementLinkNode *veln,
 +                                           struct LineartElementLinkNode *eeln);
 +
 +LineartElementLinkNode *lineart_find_matching_eln(struct ListBase *shadow_elns, int obindex);
 +LineartEdge *lineart_find_matching_edge(struct LineartElementLinkNode *shadow_eln,
 +                                        uint64_t edge_identifier);
 +void lineart_register_shadow_cuts(struct LineartRenderBuffer *rb,
 +                                  struct LineartEdge *e,
 +                                  struct LineartEdge *shadow_edge);
 +void lineart_register_intersection_shadow_cuts(struct LineartRenderBuffer *rb,
 +                                               struct ListBase *shadow_elns);
 +
 +bool lineart_edge_from_triangle(const struct LineartTriangle *tri,
 +                                const struct LineartEdge *e,
 +                                bool allow_overlapping_edges);
 +LineartBoundingArea *lineart_edge_first_bounding_area(struct LineartRenderBuffer *rb,
 +                                                      double *fbcoord1,
 +                                                      double *fbcoord2);
 +LineartBoundingArea *lineart_bounding_area_next(struct LineartBoundingArea *_this,
 +                                                double *fbcoord1,
 +                                                double *fbcoord2,
 +                                                double x,
 +                                                double y,
 +                                                double k,
 +                                                int positive_x,
 +                                                int positive_y,
 +                                                double *next_x,
 +                                                double *next_y);
 +void lineart_edge_cut(struct LineartRenderBuffer *rb,
 +                      struct LineartEdge *e,
 +                      double start,
 +                      double end,
 +                      uchar material_mask_bits,
 +                      uchar mat_occlusion,
 +                      uchar shadow_bits);
 +void lineart_add_edge_to_array(struct LineartPendingEdges *pe, struct LineartEdge *e);
 +void lineart_finalize_object_edge_array_reserve(struct LineartPendingEdges *pe, int count);
 +void lineart_destroy_render_data_keep_init(struct LineartRenderBuffer *rb);
 +
  #ifdef __cplusplus
  extern "C" {
  #endif



More information about the Bf-blender-cvs mailing list