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

YimingWu noreply at git.blender.org
Thu Apr 7 15:00:39 CEST 2022


Commit: 9b3407c1bcd6955c117d295560c9ed8e4da75663
Author: YimingWu
Date:   Tue Apr 5 22:20:16 2022 +0800
Branches: lineart-shadow
https://developer.blender.org/rB9b3407c1bcd6955c117d295560c9ed8e4da75663

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

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



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

diff --cc source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index 4490bf8b5ab,fc2b9fff709..7549362baf2
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@@ -236,11 -210,12 +244,17 @@@ enum eLineArtTileRecursiveLimit 
  #define LRT_TILE_SPLITTING_TRIANGLE_LIMIT 100
  #define LRT_TILE_EDGE_COUNT_INITIAL 32
  
 +enum eLineartShadowCameraType {
 +  LRT_SHADOW_CAMERA_DIRECTIONAL = 1,
 +  LRT_SHADOW_CAMERA_POINT = 2,
 +};
 +
+ typedef struct LineartPendingEdges {
+   LineartEdge **array;
+   int max;
+   int next;
+ } LineartPendingEdges;
+ 
  typedef struct LineartRenderBuffer {
    struct LineartRenderBuffer *prev, *next;
  
@@@ -305,13 -273,13 +319,17 @@@
    ListBase edge_mark;
    ListBase floating;
    ListBase light_contour;
 +  ListBase shadow;
  
+   /* Note: Data here are allocated with MEM_xxx call instead of in pool. */
+   struct LineartPendingEdges pending_edges;
+   int scheduled_count;
+ 
    ListBase chains;
  
 +  /* Intermediate shadow results, list of LineartShadowSegmentContainer */
 +  ListBase shadow_containers;
 +
    /* For managing calculation tasks for multiple threads. */
    SpinLock lock_task;
  
@@@ -433,13 -395,13 +451,17 @@@ typedef struct LineartRenderTaskInfo 
    ListBase edge_mark;
    ListBase floating;
    ListBase light_contour;
 +  ListBase shadow;
  
+   /* Here it doesn't really hold memory, it just stores a refernce to a portion in
+    * rb->pending_edges. */
+   struct LineartPendingEdges pending_edges;
+ 
  } LineartRenderTaskInfo;
  
 +#define LRT_OBINDEX_SHIFT 20
 +#define LRT_OBINDEX_LOWER 0x0fffff /* Lower 20 bits. */
 +
  typedef struct LineartObjectInfo {
    struct LineartObjectInfo *next;
    struct Object *original_ob;
@@@ -466,8 -425,10 +488,11 @@@
    ListBase edge_mark;
    ListBase floating;
    ListBase light_contour;
 +  ListBase shadow;
  
+   /* Note: Data here are allocated with MEM_xxx call instead of in pool. */
+   struct LineartPendingEdges pending_edges;
+ 
  } LineartObjectInfo;
  
  typedef struct LineartObjectLoadTaskInfo {
diff --cc source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index b2a109f9b48,a7153e7abde..0937035ac42
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@@ -487,38 -475,10 +478,14 @@@ static void lineart_occlusion_worker(Ta
    LineartEdge *eip;
  
    while (lineart_occlusion_make_task_info(rb, rti)) {
- 
-     for (eip = rti->contour.first; eip && eip != rti->contour.last; eip = eip->next) {
-       lineart_occlusion_single_line(rb, eip, rti->thread_id);
-     }
- 
-     for (eip = rti->crease.first; eip && eip != rti->crease.last; eip = eip->next) {
-       lineart_occlusion_single_line(rb, eip, rti->thread_id);
-     }
- 
-     for (eip = rti->intersection.first; eip && eip != rti->intersection.last; eip = eip->next) {
-       lineart_occlusion_single_line(rb, eip, rti->thread_id);
-     }
- 
-     for (eip = rti->material.first; eip && eip != rti->material.last; eip = eip->next) {
-       lineart_occlusion_single_line(rb, eip, rti->thread_id);
-     }
- 
-     for (eip = rti->edge_mark.first; eip && eip != rti->edge_mark.last; eip = eip->next) {
-       lineart_occlusion_single_line(rb, eip, rti->thread_id);
-     }
- 
-     for (eip = rti->floating.first; eip && eip != rti->floating.last; eip = eip->next) {
-       lineart_occlusion_single_line(rb, eip, rti->thread_id);
-     }
- 
-     for (eip = rti->light_contour.first; eip && eip != rti->light_contour.last; eip = eip->next) {
+     for (int i = 0; i < rti->pending_edges.max; i++) {
+       eip = rti->pending_edges.array[i];
        lineart_occlusion_single_line(rb, eip, rti->thread_id);
      }
 +
 +    for (eip = rti->shadow.first; eip && eip != rti->shadow.last; eip = eip->next) {
 +      lineart_occlusion_single_line(rb, eip, rti->thread_id);
 +    }
    }
  }



More information about the Bf-blender-cvs mailing list