Blender V4.3
MOD_lineart.hh File Reference
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math_matrix_types.hh"
#include "BLI_math_vector.h"
#include "BLI_set.hh"
#include "BLI_threads.h"
#include "ED_grease_pencil.hh"
#include <algorithm>
#include <math.h>

Go to the source code of this file.

Classes

struct  LineartModifierRuntime
 
struct  LineartStaticMemPoolNode
 
struct  LineartStaticMemPool
 
struct  LineartTriangleAdjacent
 
struct  LineartTriangle
 
struct  LineartTriangleThread
 
struct  LineartElementLinkNode
 
struct  LineartEdgeSegment
 
struct  LineartShadowEdge
 
struct  LineartShadowSegment
 
struct  LineartVert
 
struct  LineartEdge
 
struct  LineartEdgeChain
 
struct  LineartEdgeChainItem
 
struct  LineartChainRegisterEntry
 
struct  LineartAdjacentEdge
 
struct  LineartPendingEdges
 
struct  LineartData
 
struct  LineartData::_qtree
 
struct  LineartData::_geom
 
struct  LineartData::_conf
 
struct  LineartCache
 
struct  LineartRenderTaskInfo
 
struct  LineartObjectInfo
 
struct  LineartObjectLoadTaskInfo
 
struct  LineartBoundingArea
 

Namespaces

namespace  blender
 
namespace  blender::bke
 
namespace  blender::bke::greasepencil
 

Macros

#define LRT_TILE_SPLITTING_TRIANGLE_LIMIT   100
 
#define LRT_TILE_EDGE_COUNT_INITIAL   32
 
#define DBL_TRIANGLE_LIM   1e-8
 
#define DBL_EDGE_LIM   1e-9
 
#define LRT_MEMORY_POOL_1MB   (1 << 20)
 
#define LRT_SHADOW_MASK_UNDEFINED   0
 
#define LRT_SHADOW_MASK_ILLUMINATED   (1 << 0)
 
#define LRT_SHADOW_MASK_SHADED   (1 << 1)
 
#define LRT_SHADOW_MASK_ENCLOSED_SHAPE   (1 << 2)
 
#define LRT_SHADOW_MASK_INHIBITED   (1 << 3)
 
#define LRT_SHADOW_SILHOUETTE_ERASED_GROUP   (1 << 4)
 
#define LRT_SHADOW_SILHOUETTE_ERASED_OBJECT   (1 << 5)
 
#define LRT_SHADOW_MASK_ILLUMINATED_SHAPE   (1 << 6)
 
#define LRT_SHADOW_TEST_SHAPE_BITS
 
#define LRT_THREAD_EDGE_COUNT   1000
 
#define LRT_OBINDEX_SHIFT   20
 
#define LRT_OBINDEX_LOWER   0x0FFFFF /* Lower 20 bits. */
 
#define LRT_OBINDEX_HIGHER   0xFFF00000 /* Higher 12 bits. */
 
#define LRT_EDGE_IDENTIFIER(obi, e)
 
#define LRT_LIGHT_CONTOUR_TARGET   0xFFFFFFFF
 
#define LRT_TILE(tile, r, c, CCount)   tile[r * CCount + c]
 
#define LRT_CLAMP(a, Min, Max)   a = a < Min ? Min : (a > Max ? Max : a)
 
#define LRT_MAX3_INDEX(a, b, c)   (a > b ? (a > c ? 0 : (b > c ? 1 : 2)) : (b > c ? 1 : 2))
 
#define LRT_MIN3_INDEX(a, b, c)   (a < b ? (a < c ? 0 : (b < c ? 1 : 2)) : (b < c ? 1 : 2))
 
#define LRT_MAX3_INDEX_ABC(x, y, z)   (x > y ? (x > z ? a : (y > z ? b : c)) : (y > z ? b : c))
 
#define LRT_MIN3_INDEX_ABC(x, y, z)   (x < y ? (x < z ? a : (y < z ? b : c)) : (y < z ? b : c))
 
#define DBL_LOOSER   1e-5
 
#define LRT_DOUBLE_CLOSE_LOOSER(a, b)   (((a) + DBL_LOOSER) >= (b) && ((a)-DBL_LOOSER) <= (b))
 
#define LRT_DOUBLE_CLOSE_ENOUGH(a, b)   (((a) + DBL_EDGE_LIM) >= (b) && ((a)-DBL_EDGE_LIM) <= (b))
 
#define LRT_DOUBLE_CLOSE_ENOUGH_TRI(a, b)    (((a) + DBL_TRIANGLE_LIM) >= (b) && ((a)-DBL_TRIANGLE_LIM) <= (b))
 
#define LRT_CLOSE_LOOSER_v3(a, b)
 
#define USE_VECTOR_LINE_INTERSECTION_IGN
 

Typedefs

typedef struct LineartModifierRuntime LineartModifierRuntime
 
typedef struct LineartStaticMemPoolNode LineartStaticMemPoolNode
 
typedef struct LineartStaticMemPool LineartStaticMemPool
 
typedef struct LineartTriangleAdjacent LineartTriangleAdjacent
 
typedef struct LineartTriangle LineartTriangle
 
typedef struct LineartTriangleThread LineartTriangleThread
 
typedef enum eLineArtElementNodeFlag eLineArtElementNodeFlag
 
typedef struct LineartElementLinkNode LineartElementLinkNode
 
typedef struct LineartEdgeSegment LineartEdgeSegment
 
typedef struct LineartShadowEdge LineartShadowEdge
 
typedef struct LineartShadowSegment LineartShadowSegment
 
typedef struct LineartVert LineartVert
 
typedef struct LineartEdge LineartEdge
 
typedef struct LineartEdgeChain LineartEdgeChain
 
typedef struct LineartEdgeChainItem LineartEdgeChainItem
 
typedef struct LineartChainRegisterEntry LineartChainRegisterEntry
 
typedef struct LineartAdjacentEdge LineartAdjacentEdge
 
typedef struct LineartPendingEdges LineartPendingEdges
 
typedef struct LineartData LineartData
 
typedef struct LineartCache LineartCache
 
typedef enum eLineartTriangleFlags eLineartTriangleFlags
 
typedef struct LineartRenderTaskInfo LineartRenderTaskInfo
 
typedef struct LineartObjectInfo LineartObjectInfo
 
typedef struct LineartObjectLoadTaskInfo LineartObjectLoadTaskInfo
 
typedef struct LineartBoundingArea LineartBoundingArea
 

Enumerations

enum  eLineArtElementNodeFlag { LRT_ELEMENT_IS_ADDITIONAL = (1 << 0) , LRT_ELEMENT_BORDER_ONLY = (1 << 1) , LRT_ELEMENT_NO_INTERSECTION = (1 << 2) , LRT_ELEMENT_INTERSECTION_DATA = (1 << 3) }
 
enum  eLineartShadowSegmentFlag { LRT_SHADOW_CASTED = 1 , LRT_SHADOW_FACING_LIGHT = 2 }
 
enum  eLineArtTileRecursiveLimit { LRT_TILE_RECURSIVE_PERSPECTIVE = 16 , LRT_TILE_RECURSIVE_ORTHO = 10 }
 
enum  eLineartShadowCameraType { LRT_SHADOW_CAMERA_DIRECTIONAL = 1 , LRT_SHADOW_CAMERA_POINT = 2 }
 
enum  eLineartTriangleFlags {
  LRT_CULL_DONT_CARE = 0 , LRT_CULL_USED = (1 << 0) , LRT_CULL_DISCARD = (1 << 1) , LRT_CULL_GENERATED = (1 << 2) ,
  LRT_TRIANGLE_INTERSECTION_ONLY = (1 << 3) , LRT_TRIANGLE_NO_INTERSECTION = (1 << 4) , LRT_TRIANGLE_MAT_BACK_FACE_CULLING = (1 << 5) , LRT_TRIANGLE_FORCE_INTERSECTION = (1 << 6)
}
 

Functions

 ENUM_OPERATORS (eLineArtElementNodeFlag, LRT_ELEMENT_INTERSECTION_DATA)
 
BLI_INLINE int lineart_intersect_seg_seg (const double a1[2], const double a2[2], const double b1[2], const double b2[2], double *r_ratio, bool *r_aligned)
 
BLI_INLINE int lineart_line_isec_2d_ignore_line2pos (const double a1[2], const double a2[2], const double b1[2], const double b2[2], double *r_a_ratio)
 
void MOD_lineart_destroy_render_data_v3 (struct GreasePencilLineartModifierData *lmd)
 
void MOD_lineart_chain_feature_lines (LineartData *ld)
 
void MOD_lineart_chain_split_for_fixed_occlusion (LineartData *ld)
 
void MOD_lineart_chain_connect (LineartData *ld)
 
void MOD_lineart_chain_discard_unused (LineartData *ld, float threshold, uint8_t max_occlusion)
 
void MOD_lineart_chain_clip_at_border (LineartData *ld)
 
void MOD_lineart_chain_split_angle (LineartData *ld, float angle_threshold_rad)
 
void MOD_lineart_smooth_chains (LineartData *ld, float tolerance)
 
void MOD_lineart_chain_offset_towards_camera (LineartData *ld, float dist, bool use_custom_camera)
 
void MOD_lineart_chain_find_silhouette_backdrop_objects (LineartData *ld)
 
int MOD_lineart_chain_count (const LineartEdgeChain *ec)
 
void MOD_lineart_chain_clear_picked_flag (LineartCache *lc)
 
void MOD_lineart_finalize_chains (LineartData *ld)
 
bool MOD_lineart_compute_feature_lines_v3 (struct Depsgraph *depsgraph, struct GreasePencilLineartModifierData &lmd, struct LineartCache **cached_result, bool enable_stroke_depth_offset)
 
LineartBoundingAreaMOD_lineart_get_parent_bounding_area (LineartData *ld, double x, double y)
 
LineartBoundingAreaMOD_lineart_get_bounding_area (LineartData *ld, double x, double y)
 
void MOD_lineart_gpencil_generate_v3 (const LineartCache *cache, const blender::float4x4 &mat, Depsgraph *depsgraph, blender::bke::greasepencil::Drawing &drawing, int8_t source_type, Object *source_object, struct Collection *source_collection, int level_start, int level_end, int mat_nr, int16_t edge_types, uchar mask_switches, uchar material_mask_bits, uchar intersection_mask, float thickness, float opacity, uchar shadow_selection, uchar silhouette_mode, const char *source_vgname, const char *vgname, int modifier_flags, int modifier_calculation_flags)
 
float MOD_lineart_chain_compute_length (LineartEdgeChain *ec)
 
LineartCacheMOD_lineart_init_cache ()
 
void MOD_lineart_clear_cache (struct LineartCache **lc)
 

Macro Definition Documentation

◆ DBL_EDGE_LIM

#define DBL_EDGE_LIM   1e-9

◆ DBL_LOOSER

#define DBL_LOOSER   1e-5

Definition at line 609 of file MOD_lineart.hh.

◆ DBL_TRIANGLE_LIM

#define DBL_TRIANGLE_LIM   1e-8

◆ LRT_CLAMP

#define LRT_CLAMP ( a,
Min,
Max )   a = a < Min ? Min : (a > Max ? Max : a)

Definition at line 599 of file MOD_lineart.hh.

◆ LRT_CLOSE_LOOSER_v3

#define LRT_CLOSE_LOOSER_v3 ( a,
b )
Value:
(LRT_DOUBLE_CLOSE_LOOSER(a[0], b[0]) && LRT_DOUBLE_CLOSE_LOOSER(a[1], b[1]) && \
LRT_DOUBLE_CLOSE_LOOSER(a[2], b[2]))
#define LRT_DOUBLE_CLOSE_LOOSER(a, b)
local_group_size(16, 16) .push_constant(Type b

Definition at line 615 of file MOD_lineart.hh.

Referenced by lineart_shadow_finalize_shadow_edges_task().

◆ LRT_DOUBLE_CLOSE_ENOUGH

◆ LRT_DOUBLE_CLOSE_ENOUGH_TRI

#define LRT_DOUBLE_CLOSE_ENOUGH_TRI ( a,
b )    (((a) + DBL_TRIANGLE_LIM) >= (b) && ((a)-DBL_TRIANGLE_LIM) <= (b))

Definition at line 612 of file MOD_lineart.hh.

Referenced by lineart_intersect_seg_seg().

◆ LRT_DOUBLE_CLOSE_LOOSER

#define LRT_DOUBLE_CLOSE_LOOSER ( a,
b )   (((a) + DBL_LOOSER) >= (b) && ((a)-DBL_LOOSER) <= (b))

Definition at line 610 of file MOD_lineart.hh.

◆ LRT_EDGE_IDENTIFIER

#define LRT_EDGE_IDENTIFIER ( obi,
e )
Value:
(((uint64_t)(obi->obindex | (e->v1->index & LRT_OBINDEX_LOWER)) << 32) | \
(obi->obindex | (e->v2->index & LRT_OBINDEX_LOWER)))
#define LRT_OBINDEX_LOWER
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
unsigned __int64 uint64_t
Definition stdint.h:90

Definition at line 506 of file MOD_lineart.hh.

Referenced by lineart_geometry_object_load().

◆ LRT_LIGHT_CONTOUR_TARGET

#define LRT_LIGHT_CONTOUR_TARGET   0xFFFFFFFF

◆ LRT_MAX3_INDEX

#define LRT_MAX3_INDEX ( a,
b,
c )   (a > b ? (a > c ? 0 : (b > c ? 1 : 2)) : (b > c ? 1 : 2))

Definition at line 601 of file MOD_lineart.hh.

◆ LRT_MAX3_INDEX_ABC

#define LRT_MAX3_INDEX_ABC ( x,
y,
z )   (x > y ? (x > z ? a : (y > z ? b : c)) : (y > z ? b : c))

Definition at line 605 of file MOD_lineart.hh.

◆ LRT_MEMORY_POOL_1MB

#define LRT_MEMORY_POOL_1MB   (1 << 20)

◆ LRT_MIN3_INDEX

#define LRT_MIN3_INDEX ( a,
b,
c )   (a < b ? (a < c ? 0 : (b < c ? 1 : 2)) : (b < c ? 1 : 2))

Definition at line 603 of file MOD_lineart.hh.

◆ LRT_MIN3_INDEX_ABC

#define LRT_MIN3_INDEX_ABC ( x,
y,
z )   (x < y ? (x < z ? a : (y < z ? b : c)) : (y < z ? b : c))

Definition at line 607 of file MOD_lineart.hh.

◆ LRT_OBINDEX_HIGHER

◆ LRT_OBINDEX_LOWER

#define LRT_OBINDEX_LOWER   0x0FFFFF /* Lower 20 bits. */

◆ LRT_OBINDEX_SHIFT

#define LRT_OBINDEX_SHIFT   20

Definition at line 503 of file MOD_lineart.hh.

Referenced by lineart_object_load_single_instance().

◆ LRT_SHADOW_MASK_ENCLOSED_SHAPE

#define LRT_SHADOW_MASK_ENCLOSED_SHAPE   (1 << 2)

Definition at line 473 of file MOD_lineart.hh.

Referenced by lineart_edge_cut(), and lineart_shadow_register_enclosed_shapes().

◆ LRT_SHADOW_MASK_ILLUMINATED

#define LRT_SHADOW_MASK_ILLUMINATED   (1 << 0)

◆ LRT_SHADOW_MASK_ILLUMINATED_SHAPE

#define LRT_SHADOW_MASK_ILLUMINATED_SHAPE   (1 << 6)

Definition at line 477 of file MOD_lineart.hh.

Referenced by lineart_edge_cut(), and MOD_lineart_gpencil_generate_v3().

◆ LRT_SHADOW_MASK_INHIBITED

#define LRT_SHADOW_MASK_INHIBITED   (1 << 3)

Definition at line 474 of file MOD_lineart.hh.

Referenced by lineart_edge_cut().

◆ LRT_SHADOW_MASK_SHADED

#define LRT_SHADOW_MASK_SHADED   (1 << 1)

◆ LRT_SHADOW_MASK_UNDEFINED

#define LRT_SHADOW_MASK_UNDEFINED   0

Definition at line 470 of file MOD_lineart.hh.

Referenced by MOD_lineart_gpencil_generate_v3().

◆ LRT_SHADOW_SILHOUETTE_ERASED_GROUP

#define LRT_SHADOW_SILHOUETTE_ERASED_GROUP   (1 << 4)

◆ LRT_SHADOW_SILHOUETTE_ERASED_OBJECT

#define LRT_SHADOW_SILHOUETTE_ERASED_OBJECT   (1 << 5)

Definition at line 476 of file MOD_lineart.hh.

◆ LRT_SHADOW_TEST_SHAPE_BITS

#define LRT_SHADOW_TEST_SHAPE_BITS
Value:
#define LRT_SHADOW_MASK_INHIBITED
#define LRT_SHADOW_MASK_ILLUMINATED_SHAPE
#define LRT_SHADOW_MASK_ILLUMINATED
#define LRT_SHADOW_MASK_SHADED

Definition at line 479 of file MOD_lineart.hh.

Referenced by MOD_lineart_gpencil_generate_v3().

◆ LRT_THREAD_EDGE_COUNT

#define LRT_THREAD_EDGE_COUNT   1000

Controls how many edges a worker thread is processing at one request. There's no significant performance impact on choosing different values. Don't make it too small so that the worker thread won't request too many times.

Definition at line 488 of file MOD_lineart.hh.

Referenced by lineart_occlusion_make_task_info().

◆ LRT_TILE

#define LRT_TILE ( tile,
r,
c,
CCount )   tile[r * CCount + c]

Definition at line 597 of file MOD_lineart.hh.

◆ LRT_TILE_EDGE_COUNT_INITIAL

#define LRT_TILE_EDGE_COUNT_INITIAL   32

◆ LRT_TILE_SPLITTING_TRIANGLE_LIMIT

#define LRT_TILE_SPLITTING_TRIANGLE_LIMIT   100

◆ USE_VECTOR_LINE_INTERSECTION_IGN

#define USE_VECTOR_LINE_INTERSECTION_IGN

Typedef Documentation

◆ eLineArtElementNodeFlag

◆ eLineartTriangleFlags

◆ LineartAdjacentEdge

typedef struct LineartAdjacentEdge LineartAdjacentEdge

◆ LineartBoundingArea

typedef struct LineartBoundingArea LineartBoundingArea

Bounding area diagram:

+----+ <----U (Upper edge Y value)
| |
+----+ <----B (Bottom edge Y value)
^ ^
L R (Left/Right edge X value)
#define X
#define Y
#define U
#define B
#define R
#define L

Example structure when subdividing 1 bounding areas: 1 area can be divided into 4 smaller children to accommodate image areas with denser triangle distribution.

+--+--+-----+
+--+--+ |
+--+--+-----+
| | |
+-----+-----+

lp/rp/up/bp is the list for storing pointers to adjacent bounding areas.

◆ LineartCache

typedef struct LineartCache LineartCache

◆ LineartChainRegisterEntry

typedef struct LineartChainRegisterEntry LineartChainRegisterEntry

◆ LineartData

typedef struct LineartData LineartData

◆ LineartEdge

typedef struct LineartEdge LineartEdge

◆ LineartEdgeChain

typedef struct LineartEdgeChain LineartEdgeChain

◆ LineartEdgeChainItem

typedef struct LineartEdgeChainItem LineartEdgeChainItem

◆ LineartEdgeSegment

typedef struct LineartEdgeSegment LineartEdgeSegment

◆ LineartElementLinkNode

typedef struct LineartElementLinkNode LineartElementLinkNode

◆ LineartModifierRuntime

typedef struct LineartModifierRuntime LineartModifierRuntime

◆ LineartObjectInfo

typedef struct LineartObjectInfo LineartObjectInfo

◆ LineartObjectLoadTaskInfo

typedef struct LineartObjectLoadTaskInfo LineartObjectLoadTaskInfo

◆ LineartPendingEdges

typedef struct LineartPendingEdges LineartPendingEdges

◆ LineartRenderTaskInfo

typedef struct LineartRenderTaskInfo LineartRenderTaskInfo

◆ LineartShadowEdge

typedef struct LineartShadowEdge LineartShadowEdge

◆ LineartShadowSegment

typedef struct LineartShadowSegment LineartShadowSegment

◆ LineartStaticMemPool

typedef struct LineartStaticMemPool LineartStaticMemPool

◆ LineartStaticMemPoolNode

typedef struct LineartStaticMemPoolNode LineartStaticMemPoolNode

◆ LineartTriangle

typedef struct LineartTriangle LineartTriangle

◆ LineartTriangleAdjacent

typedef struct LineartTriangleAdjacent LineartTriangleAdjacent

◆ LineartTriangleThread

typedef struct LineartTriangleThread LineartTriangleThread

◆ LineartVert

typedef struct LineartVert LineartVert

Enumeration Type Documentation

◆ eLineArtElementNodeFlag

Enumerator
LRT_ELEMENT_IS_ADDITIONAL 
LRT_ELEMENT_BORDER_ONLY 
LRT_ELEMENT_NO_INTERSECTION 
LRT_ELEMENT_INTERSECTION_DATA 

Definition at line 88 of file MOD_lineart.hh.

◆ eLineartShadowCameraType

Enumerator
LRT_SHADOW_CAMERA_DIRECTIONAL 
LRT_SHADOW_CAMERA_POINT 

Definition at line 281 of file MOD_lineart.hh.

◆ eLineartShadowSegmentFlag

Enumerator
LRT_SHADOW_CASTED 
LRT_SHADOW_FACING_LIGHT 

Definition at line 140 of file MOD_lineart.hh.

◆ eLineArtTileRecursiveLimit

Enumerator
LRT_TILE_RECURSIVE_PERSPECTIVE 
LRT_TILE_RECURSIVE_ORTHO 

Definition at line 270 of file MOD_lineart.hh.

◆ eLineartTriangleFlags

Enumerator
LRT_CULL_DONT_CARE 
LRT_CULL_USED 
LRT_CULL_DISCARD 
LRT_CULL_GENERATED 
LRT_TRIANGLE_INTERSECTION_ONLY 
LRT_TRIANGLE_NO_INTERSECTION 
LRT_TRIANGLE_MAT_BACK_FACE_CULLING 
LRT_TRIANGLE_FORCE_INTERSECTION 

Definition at line 459 of file MOD_lineart.hh.

Function Documentation

◆ ENUM_OPERATORS()

◆ lineart_intersect_seg_seg()

BLI_INLINE int lineart_intersect_seg_seg ( const double a1[2],
const double a2[2],
const double b1[2],
const double b2[2],
double * r_ratio,
bool * r_aligned )

◆ lineart_line_isec_2d_ignore_line2pos()

BLI_INLINE int lineart_line_isec_2d_ignore_line2pos ( const double a1[2],
const double a2[2],
const double b1[2],
const double b2[2],
double * r_a_ratio )

◆ MOD_lineart_chain_clear_picked_flag()

void MOD_lineart_chain_clear_picked_flag ( LineartCache * lc)

◆ MOD_lineart_chain_clip_at_border()

◆ MOD_lineart_chain_compute_length()

float MOD_lineart_chain_compute_length ( LineartEdgeChain * ec)

◆ MOD_lineart_chain_connect()

◆ MOD_lineart_chain_count()

int MOD_lineart_chain_count ( const LineartEdgeChain * ec)

Definition at line 1068 of file lineart_chain.cc.

References LineartEdgeChain::chain, count, and LISTBASE_FOREACH.

Referenced by MOD_lineart_gpencil_generate_v3().

◆ MOD_lineart_chain_discard_unused()

void MOD_lineart_chain_discard_unused ( LineartData * ld,
float threshold,
uint8_t max_occlusion )

◆ MOD_lineart_chain_feature_lines()

◆ MOD_lineart_chain_find_silhouette_backdrop_objects()

◆ MOD_lineart_chain_offset_towards_camera()

◆ MOD_lineart_chain_split_angle()

◆ MOD_lineart_chain_split_for_fixed_occlusion()

◆ MOD_lineart_clear_cache()

void MOD_lineart_clear_cache ( struct LineartCache ** lc)

◆ MOD_lineart_compute_feature_lines_v3()

bool MOD_lineart_compute_feature_lines_v3 ( struct Depsgraph * depsgraph,
struct GreasePencilLineartModifierData & lmd,
struct LineartCache ** cached_result,
bool enable_stroke_depth_offset )

This is the entry point of all line art calculations.

Returns
True when a change is made.

Definition at line 5025 of file lineart_cpu.cc.

References LineartData::_conf::angle_splitting_threshold, BKE_scene_camera_switch_update(), BLI_time_now_seconds(), GreasePencilLineartModifierData::calculation_flags, LineartData::_conf::chain_smooth_tolerance, LineartCache::chains, LineartData::chains, LineartData::conf, DEG_get_evaluated_object(), DEG_get_evaluated_scene(), depsgraph, ListBase::first, GreasePencilLineartModifierData::flags, G, LineartData::geom, lineart_count_and_print_render_buffer_memory(), lineart_create_render_buffer_v3(), lineart_destroy_render_data_keep_init(), lineart_main_add_triangles(), lineart_main_bounding_area_make_initial(), lineart_main_bounding_areas_connect_post(), lineart_main_cull_triangles(), lineart_main_discard_out_of_frame_edges(), lineart_main_free_adjacent_data(), lineart_main_get_view_vector(), lineart_main_link_lines(), lineart_main_load_geometries(), lineart_main_make_enclosed_shapes(), lineart_main_occlusion_begin(), lineart_main_perspective_division(), lineart_main_remove_unused_lines_from_tiles(), lineart_main_transform_and_add_shadow(), lineart_main_try_generate_shadow_v3(), lineart_mem_destroy(), lineart_register_intersection_shadow_cuts(), lineart_triangle_size_get(), MEM_freeN(), MOD_LINEART_ALLOW_DUPLI_OBJECTS, MOD_lineart_chain_clear_picked_flag(), MOD_lineart_chain_clip_at_border(), MOD_lineart_chain_connect(), MOD_lineart_chain_feature_lines(), MOD_lineart_chain_find_silhouette_backdrop_objects(), MOD_lineart_chain_offset_towards_camera(), MOD_lineart_chain_split_angle(), MOD_lineart_chain_split_for_fixed_occlusion(), MOD_lineart_finalize_chains(), MOD_lineart_init_cache(), MOD_LINEART_OFFSET_TOWARDS_CUSTOM_CAMERA, MOD_lineart_smooth_chains(), MOD_LINEART_USE_CUSTOM_CAMERA, OB_CAMERA, LineartModifierRuntime::object_dependencies, printf, RE_GetSceneRender(), GreasePencilLineartModifierData::runtime, LineartCache::shadow_data_pool, LineartCache::shadow_elns, LineartData::_conf::shadow_enclose_shapes, LineartData::_conf::shadow_selection, LineartData::_conf::shadow_use_silhouette, LineartData::sizeof_triangle, GreasePencilLineartModifierData::source_camera, GreasePencilLineartModifierData::stroke_depth_offset, Object::type, LineartData::_conf::use_image_boundary_trimming, and LineartData::_geom::vertex_buffer_pointers.

Referenced by bake_strokes(), and blender::generate_strokes().

◆ MOD_lineart_destroy_render_data_v3()

void MOD_lineart_destroy_render_data_v3 ( struct GreasePencilLineartModifierData * lmd)

◆ MOD_lineart_finalize_chains()

◆ MOD_lineart_get_bounding_area()

LineartBoundingArea * MOD_lineart_get_bounding_area ( LineartData * ld,
double x,
double y )

Wrapper for more convenience.

Definition at line 4585 of file lineart_cpu.cc.

References lineart_get_bounding_area(), and MOD_lineart_get_parent_bounding_area().

Referenced by MOD_lineart_chain_feature_lines().

◆ MOD_lineart_get_parent_bounding_area()

◆ MOD_lineart_gpencil_generate_v3()

void MOD_lineart_gpencil_generate_v3 ( const LineartCache * cache,
const blender::float4x4 & mat,
Depsgraph * depsgraph,
blender::bke::greasepencil::Drawing & drawing,
int8_t source_type,
Object * source_object,
struct Collection * source_collection,
int level_start,
int level_end,
int mat_nr,
int16_t edge_types,
uchar mask_switches,
uchar material_mask_bits,
uchar intersection_mask,
float thickness,
float opacity,
uchar shadow_selection,
uchar silhouette_mode,
const char * source_vgname,
const char * vgname,
int modifier_flags,
int modifier_calculation_flags )

Definition at line 5234 of file lineart_cpu.cc.

References LineartCache::all_enabled_edge_types, blender::Vector< T, InlineBufferCapacity, Allocator >::append(), blender::bke::CurvesGeometry::attributes_for_write(), BKE_collection_has_object_recursive_instanced(), BKE_defvert_ensure_index(), BKE_id_defgroup_name_index(), BKE_object_get_evaluated_mesh(), LineartChainWriteInfo::chain, LineartEdgeChain::chain, LineartCache::chains, count, CURVE_TYPE_POLY, blender::bke::curves_new_nomain(), DEG_get_evaluated_object(), depsgraph, blender::bke::CurvesGeometry::fill_curve_types(), blender::bke::SpanAttributeWriter< T >::finish(), blender::bke::GeometrySet::from_curves(), G, Curves::geometry, blender::bke::GeometrySet::get_curves_for_write(), Collection::id, Mesh::id, Object::id, blender::Vector< T, InlineBufferCapacity, Allocator >::index_range(), blender::geometry::join_geometries(), blender::IndexRange::last(), LINEART_SHADOW_FILTER_ILLUMINATED, LINEART_SHADOW_FILTER_ILLUMINATED_ENCLOSED_SHAPES, LINEART_SHADOW_FILTER_SHADED, LINEART_SILHOUETTE_FILTER_INDIVIDUAL, LINEART_SOURCE_COLLECTION, LINEART_SOURCE_OBJECT, LISTBASE_FOREACH, LISTBASE_FOREACH_INDEX, LRT_SHADOW_MASK_ILLUMINATED, LRT_SHADOW_MASK_ILLUMINATED_SHAPE, LRT_SHADOW_MASK_SHADED, LRT_SHADOW_MASK_UNDEFINED, LRT_SHADOW_TEST_SHAPE_BITS, max_ii(), MOD_lineart_chain_count(), MOD_LINEART_EDGE_FLAG_CONTOUR, MOD_LINEART_EDGE_FLAG_INTERSECTION, MOD_LINEART_INTERSECTION_MATCH, MOD_LINEART_INVERT_COLLECTION, MOD_LINEART_INVERT_SILHOUETTE_FILTER, MOD_LINEART_INVERT_SOURCE_VGROUP, MOD_LINEART_MATERIAL_MASK_ENABLE, MOD_LINEART_MATERIAL_MASK_MATCH, OB_MESH, LineartEdgeChain::object_ref, blender::bke::CurvesGeometry::offsets_for_write(), ID::orig_id, LineartChainWriteInfo::point_count, blender::bke::CurvesGeometry::positions_for_write(), printf, blender::Vector< T, InlineBufferCapacity, Allocator >::reserve(), blender::bke::SpanAttributeWriter< T >::span, blender::bke::greasepencil::Drawing::strokes(), blender::bke::greasepencil::Drawing::strokes_for_write(), blender::bke::greasepencil::Drawing::tag_topology_changed(), blender::math::transform_point(), Object::type, Mesh::verts_num, and MDeformWeight::weight.

Referenced by bake_strokes(), and blender::generate_strokes().

◆ MOD_lineart_init_cache()

LineartCache * MOD_lineart_init_cache ( )

Definition at line 3579 of file lineart_cpu.cc.

References MEM_callocN.

Referenced by MOD_lineart_compute_feature_lines_v3(), and blender::modify_geometry_set().

◆ MOD_lineart_smooth_chains()