Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Basnett <cmbasnett@gmail.com>2022-09-17 03:50:37 +0300
committerColin Basnett <cmbasnett@gmail.com>2022-09-17 03:50:37 +0300
commit564bda241a973396da51d7c3ccd9efd97d51728a (patch)
tree4d9aa4cccd82e2e606b47774afa5e1015bf14768 /source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
parent0fff238150d076576053c25b646f653d6e3b0edb (diff)
parent48d7ff68f0df209c77bbb081ab46fbc109fd825a (diff)
Merge branch 'master' into feature-imformatfeature-imformat
Diffstat (limited to 'source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h')
-rw-r--r--source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h94
1 files changed, 90 insertions, 4 deletions
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
index 5e24061bd78..947586aaec4 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
@@ -66,14 +66,16 @@ int lineart_count_intersection_segment_count(struct LineartData *ld);
void lineart_count_and_print_render_buffer_memory(struct LineartData *ld);
#define LRT_ITER_ALL_LINES_BEGIN \
- LineartEdge *e; \
- for (int i = 0; i < ld->pending_edges.next; i++) { \
- e = ld->pending_edges.array[i];
+ { \
+ LineartEdge *e; \
+ for (int __i = 0; __i < ld->pending_edges.next; __i++) { \
+ e = ld->pending_edges.array[__i];
#define LRT_ITER_ALL_LINES_NEXT ; /* Doesn't do anything now with new array setup. */
#define LRT_ITER_ALL_LINES_END \
LRT_ITER_ALL_LINES_NEXT \
+ } \
}
#define LRT_BOUND_AREA_CROSSES(b1, b2) \
@@ -83,11 +85,95 @@ void lineart_count_and_print_render_buffer_memory(struct LineartData *ld);
* 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(ld, 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 LineartData *ld);
+void lineart_main_cull_triangles(struct LineartData *ld, bool clip_far);
+void lineart_main_free_adjacent_data(struct LineartData *ld);
+void lineart_main_perspective_division(struct LineartData *ld);
+void lineart_main_discard_out_of_frame_edges(struct LineartData *ld);
+void lineart_main_load_geometries(struct Depsgraph *depsgraph,
+ struct Scene *scene,
+ struct Object *camera,
+ struct LineartData *ld,
+ bool allow_duplicates,
+ bool do_shadow_casting,
+ struct ListBase *shadow_elns);
+void lineart_main_get_view_vector(struct LineartData *ld);
+void lineart_main_bounding_area_make_initial(struct LineartData *ld);
+void lineart_main_bounding_areas_connect_post(struct LineartData *ld);
+void lineart_main_clear_linked_edges(struct LineartData *ld);
+void lineart_main_link_lines(struct LineartData *ld);
+void lineart_main_add_triangles(struct LineartData *ld);
+bool lineart_main_try_generate_shadow(struct Depsgraph *depsgraph,
+ struct Scene *scene,
+ struct LineartData *original_ld,
+ struct LineartGpencilModifierData *lmd,
+ struct LineartStaticMemPool *shadow_data_pool,
+ struct LineartElementLinkNode **r_veln,
+ struct LineartElementLinkNode **r_eeln,
+ struct ListBase *r_calculated_edges_eln_list,
+ struct LineartData **r_shadow_ld_if_reproject);
+void lineart_main_make_enclosed_shapes(struct LineartData *ld, struct LineartData *shadow_ld);
+void lineart_main_transform_and_add_shadow(struct LineartData *ld,
+ struct LineartElementLinkNode *veln,
+ struct LineartElementLinkNode *eeln);
+
+LineartElementLinkNode *lineart_find_matching_eln(struct ListBase *shadow_elns, int obindex);
+LineartElementLinkNode *lineart_find_matching_eln_obj(struct ListBase *elns, struct Object *ob);
+LineartEdge *lineart_find_matching_edge(struct LineartElementLinkNode *shadow_eln,
+ uint64_t edge_identifier);
+void lineart_register_shadow_cuts(struct LineartData *ld,
+ struct LineartEdge *e,
+ struct LineartEdge *shadow_edge);
+void lineart_register_intersection_shadow_cuts(struct LineartData *ld,
+ 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 LineartData *ld,
+ 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 LineartData *ld,
+ struct LineartEdge *e,
+ double start,
+ double end,
+ uchar material_mask_bits,
+ uchar mat_occlusion,
+ uint32_t 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 LineartData *ld);
+
#ifdef __cplusplus
extern "C" {
#endif
-void lineart_sort_adjacent_items(LineartAdjacentEdge *ai, int length);
+void lineart_sort_adjacent_items(struct LineartAdjacentEdge *ai, int length);
#ifdef __cplusplus
}