[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