[Bf-blender-cvs] [516ec45d10b] lineart-object-load: LineArt: Object loading fixes for master
YimingWu
noreply at git.blender.org
Wed Apr 20 16:12:59 CEST 2022
Commit: 516ec45d10b867d54e614fc5c6952ead3a342d27
Author: YimingWu
Date: Tue Apr 12 19:50:46 2022 +0800
Branches: lineart-object-load
https://developer.blender.org/rB516ec45d10b867d54e614fc5c6952ead3a342d27
LineArt: Object loading fixes for master
===================================================================
M source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M source/blender/makesdna/DNA_lineart_types.h
M source/blender/makesrna/intern/rna_gpencil_modifier.c
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index 1058f861be3..0e7df2a136d 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -387,7 +387,6 @@ static void options_panel_draw(const bContext *UNUSED(C), Panel *panel)
uiLayout *col = uiLayoutColumn(layout, true);
- uiItemR(col, ptr, "use_remove_doubles", 0, NULL, ICON_NONE);
uiItemR(col, ptr, "use_edge_overlap", 0, IFACE_("Overlapping Edges As Contour"), ICON_NONE);
uiItemR(col, ptr, "use_object_instances", 0, NULL, ICON_NONE);
uiItemR(col, ptr, "use_clip_plane_boundaries", 0, NULL, ICON_NONE);
diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index a168873740a..830066ac0fb 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -140,7 +140,7 @@ typedef struct LineartEdge {
char min_occ;
/** Also for line type determination on chaining. */
- unsigned char flags;
+ short flags;
unsigned char intersection_mask;
/**
@@ -179,7 +179,7 @@ typedef struct LineartEdgeChainItem {
/** For restoring position to 3d space. */
float gpos[3];
float normal[3];
- unsigned char line_type;
+ short line_type;
char occlusion;
unsigned char material_mask_bits;
unsigned char intersection_mask;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 3419fa4e224..acc36062152 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -1429,19 +1429,6 @@ static void lineart_main_discard_out_of_frame_edges(LineartRenderBuffer *rb)
}
}
-/**
- * Transform a single vert to it's viewing position.
- */
-static void lineart_vert_transform(
- BMVert *v, int index, LineartVert *RvBuf, double (*mv_mat)[4], double (*mvp_mat)[4])
-{
- double co[4];
- LineartVert *vt = &RvBuf[index];
- copy_v3db_v3fl(co, v->co);
- mul_v3_m4v3_db(vt->gloc, mv_mat, co);
- mul_v4_m4v3_db(vt->fbcoord, mvp_mat, co);
-}
-
typedef struct VertData {
MVert *mvert;
LineartVert *v_arr;
@@ -1670,170 +1657,6 @@ static uint16_t lineart_identify_medge_feature_edges(
return edge_flag_result;
}
-static uint16_t lineart_identify_feature_line(LineartRenderBuffer *rb,
- BMEdge *e,
- LineartTriangle *rt_array,
- LineartVert *rv_array,
- float crease_threshold,
- bool use_auto_smooth,
- bool use_freestyle_edge,
- bool use_freestyle_face,
- BMesh *bm_if_freestyle)
-{
- BMLoop *ll, *lr = NULL;
-
- ll = e->l;
- if (ll) {
- lr = e->l->radial_next;
- }
-
- if (!ll && !lr) {
- return LRT_EDGE_FLAG_LOOSE;
- }
-
- FreestyleEdge *fel, *fer;
- bool face_mark_filtered = false;
- uint16_t edge_flag_result = 0;
- bool only_contour = false;
-
- if (use_freestyle_face && rb->filter_face_mark) {
- fel = CustomData_bmesh_get(&bm_if_freestyle->pdata, ll->f->head.data, CD_FREESTYLE_FACE);
- if (ll != lr && lr) {
- fer = CustomData_bmesh_get(&bm_if_freestyle->pdata, lr->f->head.data, CD_FREESTYLE_FACE);
- }
- else {
- /* Handles mesh boundary case */
- fer = fel;
- }
- if (rb->filter_face_mark_boundaries ^ rb->filter_face_mark_invert) {
- if ((fel->flag & FREESTYLE_FACE_MARK) || (fer->flag & FREESTYLE_FACE_MARK)) {
- face_mark_filtered = true;
- }
- }
- else {
- if ((fel->flag & FREESTYLE_FACE_MARK) && (fer->flag & FREESTYLE_FACE_MARK) && (fer != fel)) {
- face_mark_filtered = true;
- }
- }
- if (rb->filter_face_mark_invert) {
- face_mark_filtered = !face_mark_filtered;
- }
- if (!face_mark_filtered) {
- if (rb->filter_face_mark_keep_contour) {
- only_contour = true;
- }
- else {
- return 0;
- }
- }
- }
-
- /* Mesh boundary */
- if (!lr || ll == lr) {
- return (edge_flag_result | LRT_EDGE_FLAG_CONTOUR);
- }
-
- LineartTriangle *tri1, *tri2;
- LineartVert *l;
-
- /* The mesh should already be triangulated now, so we can assume each face is a triangle. */
- tri1 = lineart_triangle_from_index(rb, rt_array, BM_elem_index_get(ll->f));
- tri2 = lineart_triangle_from_index(rb, rt_array, BM_elem_index_get(lr->f));
-
- l = &rv_array[BM_elem_index_get(e->v1)];
-
- double vv[3];
- double *view_vector = vv;
- double dot_1 = 0, dot_2 = 0;
- double result;
- bool material_back_face = ((tri1->flags | tri2->flags) & LRT_TRIANGLE_MAT_BACK_FACE_CULLING);
-
- if (rb->use_contour || rb->use_back_face_culling || material_back_face) {
-
- if (rb->cam_is_persp) {
- sub_v3_v3v3_db(view_vector, rb->camera_pos, l->gloc);
- }
- else {
- view_vector = rb->view_vector;
- }
-
- dot_1 = dot_v3v3_db(view_vector, tri1->gn);
- dot_2 = dot_v3v3_db(view_vector, tri2->gn);
-
- if (rb->use_contour && (result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
- edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
- }
-
- /* Because the ray points towards the camera, so back-face is when dot value being negative. */
- if (rb->use_back_face_culling) {
- if (dot_1 < 0) {
- tri1->flags |= LRT_CULL_DISCARD;
- }
- if (dot_2 < 0) {
- tri2->flags |= LRT_CULL_DISCARD;
- }
- }
- if (material_back_face) {
- if (tri1->flags & LRT_TRIANGLE_MAT_BACK_FACE_CULLING && dot_1 < 0) {
- tri1->flags |= LRT_CULL_DISCARD;
- }
- if (tri2->flags & LRT_TRIANGLE_MAT_BACK_FACE_CULLING && dot_2 < 0) {
- tri2->flags |= LRT_CULL_DISCARD;
- }
- }
- }
- else {
- view_vector = rb->view_vector;
- }
-
- if ((result = dot_1 * dot_2) <= 0 && (fabs(dot_1) + fabs(dot_2))) {
- edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
- }
-
- /* For when face mark filtering decided that we discard the face but keep_contour option is on.
- * so we still have correct full contour around the object. */
- if (only_contour) {
- return edge_flag_result;
- }
-
- /* Do not show lines other than contour on back face (because contour has one adjacent face that
- * isn't a back face).
- * TODO(Yiming): Do we need separate option for this? */
- if (rb->use_back_face_culling ||
- ((tri1->flags & tri2->flags) & LRT_TRIANGLE_MAT_BACK_FACE_CULLING)) {
- if (dot_1 < 0 && dot_2 < 0) {
- return edge_flag_result;
- }
- }
-
- if (rb->use_crease) {
- if (rb->sharp_as_crease && !BM_elem_flag_test(e, BM_ELEM_SMOOTH)) {
- edge_flag_result |= LRT_EDGE_FLAG_CREASE;
- }
- else {
- bool do_crease = true;
- if (!rb->force_crease && !use_auto_smooth &&
- (BM_elem_flag_test(ll->f, BM_ELEM_SMOOTH) && BM_elem_flag_test(lr->f, BM_ELEM_SMOOTH))) {
- do_crease = false;
- }
- if (do_crease && (dot_v3v3_db(tri1->gn, tri2->gn) < crease_threshold)) {
- edge_flag_result |= LRT_EDGE_FLAG_CREASE;
- }
- }
- }
- if (rb->use_material && (ll->f->mat_nr != lr->f->mat_nr)) {
- edge_flag_result |= LRT_EDGE_FLAG_MATERIAL;
- }
- if (use_freestyle_edge && rb->use_edge_marks) {
- FreestyleEdge *fe;
- fe = CustomData_bmesh_get(&bm_if_freestyle->edata, e->head.data, CD_FREESTYLE_EDGE);
- if (fe->flag & FREESTYLE_EDGE_MARK) {
- edge_flag_result |= LRT_EDGE_FLAG_EDGE_MARK;
- }
- }
- return edge_flag_result;
-}
-
static void lineart_add_edge_to_list(LineartRenderBuffer *rb, LineartEdge *e)
{
switch (e->flags) {
@@ -2086,43 +1909,10 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
return;
}
- // TODO
- // if (re_buf->remove_doubles) {
- // BMEditMesh *em = BKE_editmesh_create(bm);
- // BMOperator findop, weldop;
-
- // /* See bmesh_opdefines.c and bmesh_operators.c for op names and argument formatting. */
- // BMO_op_initf(bm, &findop, BMO_FLAG_DEFAULTS, "find_doubles verts=%av dist=%f", 0.0001);
-
- // BMO_op_exec(bm, &findop);
-
- // /* Weld the vertices. */
- // BMO_op_init(bm, &weldop, BMO_FLAG_DEFAULTS, "weld_verts");
- // BMO_slot_copy(&findop, slots_out, "targetmap.out", &weldop, slots_in, "targetmap");
- // BMO_op_exec(bm, &weldop);
-
- // BMO_op_finish(bm, &findop);
- // BMO_op_finish(bm, &weldop);
-
- // MEM_freeN(em);
- //}
-
/* Triangulate. */
const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(me);
const int tot_tri = BKE_mesh_runtime_looptri_len(me);
- // float **normals = BKE_mesh_poly_normals_ensure(me);
-
- // TODO
- if (0) {
- MEdge *medge = NULL;
- FreestyleEdge *fed = CustomData_get(&me->edata, (int)(medge - me->medge), CD_FREESTYLE_EDGE);
- }
- if (0) {
- MPoly *mpoly = NULL;
- FreestyleFace *ffa = CustomData_get(&me->pdata, (int)(mpoly - me->mpoly), CD_FREESTYLE_FACE);
- }
-
/* Check if we should look for custom data tags like Freestyle edges or faces. */
bool can_find_freestyle_edge = false;
int layer_index = CustomData_get_active_layer_index(&me->edata, CD_FREESTYLE_EDGE);
@@ -2268,7 +2058,7 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
edge_feat_data.v_array = la_v_arr;
edge_feat_data.crease_threshold = use_crease;
edge_feat_data.use_auto_smooth = use_auto_smooth;
- edge_feat_data.use_freestyle_face = CustomData_has_layer(&me->pdata, CD_FREESTYLE_FACE);
+ edge_feat_data.use_freestyle_face = can_find_freestyle_face;
if (edge_feat_data.use_freestyle_face) {
edge_feat_data.freestyle_face_index = CustomData_get_layer_index(&me->pdata,
CD_FREESTYLE_FACE);
@@ -2435,288 +2225,6 @@ static void lineart_geometry_object_load_no_bmesh(Line
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list