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 _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs