[Bf-blender-cvs] [2eaf5ec2280] lanpr-under-gp: LineArt: Prevent lines showing inside text object surface, disable crease.

YimingWu noreply at git.blender.org
Fri Aug 14 13:10:56 CEST 2020


Commit: 2eaf5ec2280d3061156b2dc79f4df91a28e63d0a
Author: YimingWu
Date:   Fri Aug 14 19:10:07 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB2eaf5ec2280d3061156b2dc79f4df91a28e63d0a

LineArt: Prevent lines showing inside text object surface, disable crease.

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

M	source/blender/editors/include/ED_lineart.h
M	source/blender/editors/lineart/lineart_cpu.c

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

diff --git a/source/blender/editors/include/ED_lineart.h b/source/blender/editors/include/ED_lineart.h
index 48e8cb80b58..f48de24a487 100644
--- a/source/blender/editors/include/ED_lineart.h
+++ b/source/blender/editors/include/ED_lineart.h
@@ -72,12 +72,17 @@ typedef struct LineartRenderTriangleThread {
   struct LineartRenderLine *testing[127];
 } LineartRenderTriangleThread;
 
+typedef enum eLineArtElementNodeFlag {
+  LRT_ELEMENT_IS_ADDITIONAL = (1 << 0),
+  LRT_ELEMENT_BORDER_ONLY = (1 << 1),
+} eLineArtElementNodeFlag;
+
 typedef struct LineartRenderElementLinkNode {
   struct LineartRenderElementLinkNode *next, *prev;
   void *pointer;
   int element_count;
   void *object_ref;
-  char additional;
+  eLineArtElementNodeFlag flags;
 } LineartRenderElementLinkNode;
 
 typedef struct LineartRenderLineSegment {
diff --git a/source/blender/editors/lineart/lineart_cpu.c b/source/blender/editors/lineart/lineart_cpu.c
index 8f39fd75bec..3bcbf8dff96 100644
--- a/source/blender/editors/lineart/lineart_cpu.c
+++ b/source/blender/editors/lineart/lineart_cpu.c
@@ -623,7 +623,7 @@ static LineartRenderElementLinkNode *lineart_memory_get_triangle_space(LineartRe
                                                   render_triangles,
                                                   sizeof(LineartRenderElementLinkNode));
   reln->element_count = 64;
-  reln->additional = 1;
+  reln->flags |= LRT_ELEMENT_IS_ADDITIONAL;
 
   return reln;
 }
@@ -640,7 +640,7 @@ static LineartRenderElementLinkNode *lineart_memory_get_vert_space(LineartRender
                                                   render_vertices,
                                                   sizeof(LineartRenderElementLinkNode));
   reln->element_count = 64;
-  reln->additional = 1;
+  reln->flags |= LRT_ELEMENT_IS_ADDITIONAL;
 
   return reln;
 }
@@ -711,7 +711,7 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb)
   rt1 = (void *)(((unsigned char *)teln->pointer) + rb->triangle_size * t_count);
 
   LISTBASE_FOREACH (LineartRenderElementLinkNode *, reln, &rb->triangle_buffer_pointers) {
-    if (reln->additional) {
+    if (reln->flags & LRT_ELEMENT_IS_ADDITIONAL) {
       continue;
     }
     ob = reln->object_ref;
@@ -1382,6 +1382,11 @@ static void lineart_geometry_object_load(Object *ob,
       use_mesh = BKE_mesh_new_from_object(NULL, ob, false);
     }
 
+    /* In case curve object is empty */
+    if (!use_mesh) {
+      return;
+    }
+
     mul_m4db_m4db_m4fl_uniq(new_mvp, mvp_mat, ob->obmat);
     mul_m4db_m4db_m4fl_uniq(new_mv, mv_mat, ob->obmat);
 
@@ -1430,6 +1435,11 @@ static void lineart_geometry_object_load(Object *ob,
     reln->element_count = bm->totedge;
     reln->object_ref = orig_ob;
 
+    /* Temp solution for getting clean 2D text, future configuration will allow customizations. */
+    if (ob->type == OB_FONT) {
+      reln->flags |= LRT_ELEMENT_BORDER_ONLY;
+    }
+
     reln = lineart_list_append_pointer_static_sized(&rb->triangle_buffer_pointers,
                                                     &rb->render_data_pool,
                                                     ort,
@@ -2264,11 +2274,16 @@ static void lineart_compute_scene_contours(LineartRenderBuffer *rb, const float
     }
 
     if (!add) {
-      if ((result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
+      if ((result = dot_1 * dot_2) < 0 && (dot_1 + dot_2)) {
         add = 1;
       }
       else if (rb->use_crease && (dot_v3v3_db(rl->tl->gn, rl->tr->gn) < threshold)) {
-        add = 2;
+        if (rl->object_ref && rl->object_ref->type == OB_FONT) {
+          /* No internal lines in a text object. */
+        }
+        else {
+          add = 2;
+        }
       }
       else if (rb->use_material &&
                (rl->tl && rl->tr && rl->tl->material_id != rl->tr->material_id)) {
@@ -2467,7 +2482,7 @@ void ED_lineart_modifier_sync_flag_set(eLineartModifierSyncStatus flag,
 {
   BLI_spin_lock(&lineart_share.lock_render_status);
 
-  if (flag != LRT_RENDER_IDLE) {
+  if (flag != LRT_SYNC_IDLE) {
     while (lineart_share.flag_sync_staus == LRT_SYNC_CLEARING) {
       /* Waiting, no double clearing in a new call. */
     }



More information about the Bf-blender-cvs mailing list