[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