Blender V4.3
lineart_intern.hh File Reference
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_threads.h"
#include "DNA_lineart_types.h"
#include <math.h>
#include <string.h>

Go to the source code of this file.

Macros

#define LRT_ITER_ALL_LINES_BEGIN
 
#define LRT_ITER_ALL_LINES_NEXT   ; /* Doesn't do anything now with new array setup. */
 
#define LRT_ITER_ALL_LINES_END
 
#define LRT_BOUND_AREA_CROSSES(b1, b2)    ((b1)[0] < (b2)[1] && (b1)[1] > (b2)[0] && (b1)[3] < (b2)[2] && (b1)[2] > (b2)[3])
 
#define LRT_BA_ROWS   10
 
#define LRT_EDGE_BA_MARCHING_BEGIN(fb1, fb2)
 
#define LRT_EDGE_BA_MARCHING_NEXT(fb1, fb2)
 
#define LRT_EDGE_BA_MARCHING_END
 

Functions

void * lineart_list_append_pointer_pool (ListBase *h, struct LineartStaticMemPool *smp, void *data)
 
void * lineart_list_append_pointer_pool_sized (ListBase *h, struct LineartStaticMemPool *smp, void *data, int size)
 
void * lineart_list_append_pointer_pool_thread (ListBase *h, struct LineartStaticMemPool *smp, void *data)
 
void * lineart_list_append_pointer_pool_sized_thread (ListBase *h, LineartStaticMemPool *smp, void *data, int size)
 
void * list_push_pointer_static (ListBase *h, struct LineartStaticMemPool *smp, void *p)
 
void * list_push_pointer_static_sized (ListBase *h, struct LineartStaticMemPool *smp, void *p, int size)
 
void * lineart_list_pop_pointer_no_free (ListBase *h)
 
void lineart_list_remove_pointer_item_no_free (ListBase *h, LinkData *lip)
 
struct LineartStaticMemPoolNodelineart_mem_new_static_pool (struct LineartStaticMemPool *smp, size_t size)
 
void * lineart_mem_acquire (struct LineartStaticMemPool *smp, size_t size)
 
void * lineart_mem_acquire_thread (struct LineartStaticMemPool *smp, size_t size)
 
void lineart_mem_destroy (struct LineartStaticMemPool *smp)
 
void lineart_prepend_pool (LinkNode **first, struct LineartStaticMemPool *smp, void *link)
 
void lineart_matrix_ortho_44d (double(*mProjection)[4], double xMin, double xMax, double yMin, double yMax, double zMin, double zMax)
 
void lineart_matrix_perspective_44d (double(*mProjection)[4], double fFov_rad, double fAspect, double zMin, double zMax)
 
int lineart_count_intersection_segment_count (struct LineartData *ld)
 
void lineart_count_and_print_render_buffer_memory (struct LineartData *ld)
 
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, blender::Set< const Object * > *included_objects)
 
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_legacy, 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)
 
bool lineart_main_try_generate_shadow_v3 (struct Depsgraph *depsgraph, struct Scene *scene, struct LineartData *original_ld, struct GreasePencilLineartModifierData *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)
 
LineartElementLinkNodelineart_find_matching_eln (struct ListBase *shadow_elns, int obindex)
 
LineartElementLinkNodelineart_find_matching_eln_obj (struct ListBase *elns, struct Object *ob)
 
LineartEdgelineart_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)
 
LineartBoundingArealineart_edge_first_bounding_area (struct LineartData *ld, double *fbcoord1, double *fbcoord2)
 
LineartBoundingArealineart_bounding_area_next (struct LineartBoundingArea *self, 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)
 

Macro Definition Documentation

◆ LRT_BA_ROWS

#define LRT_BA_ROWS   10

Definition at line 91 of file lineart_intern.hh.

Referenced by lineart_main_bounding_area_make_initial().

◆ LRT_BOUND_AREA_CROSSES

#define LRT_BOUND_AREA_CROSSES ( b1,
b2 )    ((b1)[0] < (b2)[1] && (b1)[1] > (b2)[0] && (b1)[3] < (b2)[2] && (b1)[2] > (b2)[3])

◆ LRT_EDGE_BA_MARCHING_BEGIN

#define LRT_EDGE_BA_MARCHING_BEGIN ( fb1,
fb2 )
Value:
double x = fb1[0], y = fb1[1]; \
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)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
LineartBoundingArea * lineart_edge_first_bounding_area(struct LineartData *ld, double *fbcoord1, double *fbcoord2)

Definition at line 93 of file lineart_intern.hh.

Referenced by lineart_occlusion_single_line(), and lineart_shadow_cast().

◆ LRT_EDGE_BA_MARCHING_END

#define LRT_EDGE_BA_MARCHING_END

Definition at line 106 of file lineart_intern.hh.

Referenced by lineart_occlusion_single_line(), and lineart_shadow_cast().

◆ LRT_EDGE_BA_MARCHING_NEXT

#define LRT_EDGE_BA_MARCHING_NEXT ( fb1,
fb2 )
Value:
/* 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);
LineartBoundingArea * lineart_bounding_area_next(struct LineartBoundingArea *self, double *fbcoord1, double *fbcoord2, double x, double y, double k, int positive_x, int positive_y, double *next_x, double *next_y)

Definition at line 102 of file lineart_intern.hh.

Referenced by lineart_occlusion_single_line(), and lineart_shadow_cast().

◆ LRT_ITER_ALL_LINES_BEGIN

#define LRT_ITER_ALL_LINES_BEGIN
Value:
{ \
for (int _i = 0; _i < ld->pending_edges.next; _i++) { \
e = ld->pending_edges.array[_i];

Definition at line 73 of file lineart_intern.hh.

Referenced by lineart_main_link_lines(), lineart_shadow_create_shadow_edge_array(), and MOD_lineart_chain_feature_lines().

◆ LRT_ITER_ALL_LINES_END

#define LRT_ITER_ALL_LINES_END

◆ LRT_ITER_ALL_LINES_NEXT

#define LRT_ITER_ALL_LINES_NEXT   ; /* Doesn't do anything now with new array setup. */

Definition at line 79 of file lineart_intern.hh.

Referenced by MOD_lineart_chain_feature_lines().

Function Documentation

◆ lineart_add_edge_to_array()

◆ lineart_bounding_area_next()

LineartBoundingArea * lineart_bounding_area_next ( struct LineartBoundingArea * self,
double * fbcoord1,
double * fbcoord2,
double x,
double y,
double k,
int positive_x,
int positive_y,
double * next_x,
double * next_y )

This march along one render line in image space and get the next bounding area the line is crossing.

Definition at line 4805 of file lineart_cpu.cc.

References LineartBoundingArea::b, LineartBoundingArea::l, LISTBASE_FOREACH, LineartBoundingArea::r, ratiod(), self, LineartBoundingArea::u, x, and y.

◆ lineart_count_and_print_render_buffer_memory()

◆ lineart_count_intersection_segment_count()

int lineart_count_intersection_segment_count ( struct LineartData * ld)

◆ lineart_destroy_render_data_keep_init()

◆ lineart_edge_cut()

◆ lineart_edge_first_bounding_area()

LineartBoundingArea * lineart_edge_first_bounding_area ( struct LineartData * ld,
double * fbcoord1,
double * fbcoord2 )

This function gets the tile for the point e->v1, and later use lineart_bounding_area_next() to get next along the way.

Definition at line 4775 of file lineart_cpu.cc.

References interp_v2_v2v2_db(), LB, lineart_get_bounding_area(), lineart_intersect_seg_seg(), and RB.

◆ lineart_edge_from_triangle()

bool lineart_edge_from_triangle ( const struct LineartTriangle * tri,
const struct LineartEdge * e,
bool allow_overlapping_edges )

◆ lineart_finalize_object_edge_array_reserve()

void lineart_finalize_object_edge_array_reserve ( struct LineartPendingEdges * pe,
int count )

◆ lineart_find_matching_edge()

LineartEdge * lineart_find_matching_edge ( struct LineartElementLinkNode * shadow_eln,
uint64_t edge_identifier )

◆ lineart_find_matching_eln()

◆ lineart_find_matching_eln_obj()

LineartElementLinkNode * lineart_find_matching_eln_obj ( struct ListBase * elns,
struct Object * ob )

Definition at line 1087 of file lineart_chain.cc.

References LISTBASE_FOREACH.

Referenced by MOD_lineart_finalize_chains().

◆ lineart_list_append_pointer_pool()

void * lineart_list_append_pointer_pool ( ListBase * h,
struct LineartStaticMemPool * smp,
void * data )

◆ lineart_list_append_pointer_pool_sized()

void * lineart_list_append_pointer_pool_sized ( ListBase * h,
struct LineartStaticMemPool * smp,
void * data,
int size )

◆ lineart_list_append_pointer_pool_sized_thread()

void * lineart_list_append_pointer_pool_sized_thread ( ListBase * h,
LineartStaticMemPool * smp,
void * data,
int size )

◆ lineart_list_append_pointer_pool_thread()

void * lineart_list_append_pointer_pool_thread ( ListBase * h,
struct LineartStaticMemPool * smp,
void * data )

◆ lineart_list_pop_pointer_no_free()

void * lineart_list_pop_pointer_no_free ( ListBase * h)

Definition at line 76 of file lineart_util.cc.

References BLI_pophead(), and LinkData::data.

◆ lineart_list_remove_pointer_item_no_free()

void lineart_list_remove_pointer_item_no_free ( ListBase * h,
LinkData * lip )

Definition at line 87 of file lineart_util.cc.

References BLI_remlink().

Referenced by lineart_bounding_areas_connect_new().

◆ lineart_main_add_triangles()

◆ lineart_main_bounding_area_make_initial()

◆ lineart_main_bounding_areas_connect_post()

◆ lineart_main_clear_linked_edges()

◆ lineart_main_cull_triangles()

◆ lineart_main_discard_out_of_frame_edges()

◆ lineart_main_free_adjacent_data()

void lineart_main_free_adjacent_data ( struct LineartData * ld)

Adjacent data is only used during the initial stages of computing. So we can free it using this function when it is not needed anymore.

Definition at line 1357 of file lineart_cpu.cc.

References BLI_pophead(), LineartData::geom, LineartTriangle::intersecting_verts, LISTBASE_FOREACH, MEM_freeN(), LineartData::sizeof_triangle, LineartData::_geom::triangle_adjacent_pointers, and LineartData::_geom::triangle_buffer_pointers.

Referenced by lineart_main_try_generate_shadow_v3(), and MOD_lineart_compute_feature_lines_v3().

◆ lineart_main_get_view_vector()

◆ lineart_main_link_lines()

◆ lineart_main_load_geometries()

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,
blender::Set< const Object * > * included_objects )

Definition at line 2548 of file lineart_cpu.cc.

References BKE_camera_sensor_fit(), BKE_camera_sensor_size(), BKE_object_visibility(), BLI_listbase_clear(), BLI_task_pool_create(), BLI_task_pool_free(), BLI_task_pool_push(), BLI_task_pool_work_and_wait(), BLI_time_now_seconds(), LineartData::_conf::cam_obmat, CAM_ORTHO, CAM_PERSP, CAMERA_SENSOR_FIT_HOR, CAMERA_SENSOR_FIT_VERT, Camera::clip_end, Camera::clip_start, LineartData::conf, copy_m4_m4_db(), DAG_EVAL_RENDER, DEG_get_evaluated_object(), DEG_get_mode(), DEG_ITER_OBJECT_FLAG_DUPLI, DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY, DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET, DEG_ITER_OBJECT_FLAG_VISIBLE, DEG_OBJECT_ITER_BEGIN, DEG_OBJECT_ITER_END, DEGObjectIterSettings::depsgraph, depsgraph, double(), ELEM, DEGObjectIterSettings::flags, focallength_to_fov(), G, LineartData::geom, LineartData::h, DEGObjectIterSettings::included_objects, invert_m4_m4(), LineartObjectLoadTaskInfo::ld, Camera::lens, lineart_finalize_object_edge_array(), lineart_finalize_object_edge_array_reserve(), lineart_matrix_ortho_44d(), lineart_matrix_perspective_44d(), lineart_mem_acquire(), lineart_object_load_single_instance(), lineart_object_load_worker(), mul_m4db_m4db_m4fl(), OB_CURVES_LEGACY, OB_FONT, OB_SURF, OB_VISIBLE_SELF, Camera::ortho_scale, LineartData::_conf::overscan, LineartData::pending_edges, printf, LineartData::render_data_pool, Camera::sensor_fit, Camera::sensor_x, Camera::sensor_y, LineartObjectLoadTaskInfo::shadow_elns, TASK_PRIORITY_HIGH, LineartData::thread_count, LineartObjectLoadTaskInfo::thread_id, LineartData::_geom::triangle_buffer_pointers, Camera::type, unit_m4_db(), v, LineartData::_geom::vertex_buffer_pointers, LineartData::_conf::view, LineartData::_conf::view_projection, LineartData::w, and w().

Referenced by lineart_main_try_generate_shadow_v3(), and MOD_lineart_compute_feature_lines_v3().

◆ lineart_main_make_enclosed_shapes()

◆ lineart_main_occlusion_begin()

void lineart_main_occlusion_begin ( struct LineartData * ld)

All internal functions starting with lineart_main_ is called inside #MOD_lineart_compute_feature_lines function. This function handles all occlusion calculation.

Definition at line 480 of file lineart_cpu.cc.

References BLI_task_pool_create(), BLI_task_pool_free(), BLI_task_pool_push(), BLI_task_pool_work_and_wait(), LineartRenderTaskInfo::ld, lineart_occlusion_worker(), MEM_callocN, MEM_freeN(), TASK_PRIORITY_HIGH, LineartData::thread_count, and LineartRenderTaskInfo::thread_id.

Referenced by lineart_main_make_enclosed_shapes(), lineart_main_try_generate_shadow_v3(), and MOD_lineart_compute_feature_lines_v3().

◆ lineart_main_perspective_division()

◆ lineart_main_transform_and_add_shadow()

◆ lineart_main_try_generate_shadow()

bool lineart_main_try_generate_shadow ( struct Depsgraph * depsgraph,
struct Scene * scene,
struct LineartData * original_ld,
struct LineartGpencilModifierData * lmd_legacy,
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 )

This call would internally duplicate #original_ld, override necessary configurations for shadow computations. It will return:

1) Generated shadow edges in format of LineartElementLinkNode which can be directly loaded into later main view camera occlusion stage. 2) Shadow render buffer if 3rd stage reprojection is need for silhouette/lit/shaded region selection. Otherwise the shadow render buffer is deleted before this function returns.

Definition at line 1314 of file lineart_shadow.cc.

References depsgraph, lineart_main_try_generate_shadow_v3(), blender::bke::greasepencil::convert::lineart_unwrap_v3(), blender::bke::greasepencil::convert::lineart_wrap_v3(), and ret.

◆ lineart_main_try_generate_shadow_v3()

bool lineart_main_try_generate_shadow_v3 ( struct Depsgraph * depsgraph,
struct Scene * scene,
struct LineartData * original_ld,
struct GreasePencilLineartModifierData * 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 )

Definition at line 1146 of file lineart_shadow.cc.

References LineartData::_conf::allow_duplicated_types, BLI_spin_init(), BLI_time_now_seconds(), LineartData::_conf::cam_is_persp, LineartData::_conf::cam_is_persp_secondary, LineartData::_conf::cam_obmat, LineartData::_conf::cam_obmat_secondary, LineartData::_conf::camera_pos, LineartData::_conf::camera_pos_secondary, LineartData::conf, copy_m4_m4(), copy_m4_m4_db(), copy_v3_v3_db(), copy_v3db_v3fl(), Object::data, DEG2RAD, depsgraph, LineartData::_conf::do_shadow_cast, LineartData::edge_data_pool, LineartData::_conf::far_clip, ListBase::first, GreasePencilLineartModifierData::flags, G, LineartData::geom, LineartData::h, invert_m4_m4(), LA_SUN, GreasePencilLineartModifierData::light_contour_object, LineartData::_geom::line_buffer_pointers, 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_occlusion_begin(), lineart_main_perspective_division(), lineart_matrix_ortho_44d(), lineart_matrix_perspective_44d(), lineart_shadow_cast(), lineart_shadow_cast_generate_edges(), LineartData::lock_cuts, LineartStaticMemPool::lock_mem, LineartData::lock_task, LRT_TILE_RECURSIVE_ORTHO, LRT_TILE_RECURSIVE_PERSPECTIVE, LineartData::_conf::max_occlusion_level, MEM_freeN(), MEM_mallocN, MOD_LINEART_ALLOW_DUPLI_OBJECTS, mul_m4db_m4db_m4fl(), LineartData::_conf::near_clip, OB_LAMP, LineartModifierRuntime::object_dependencies, printf, LineartData::qtree, LineartData::_qtree::recursive_level, LineartData::render_data_pool, GreasePencilLineartModifierData::runtime, GreasePencilLineartModifierData::shadow_camera_far, GreasePencilLineartModifierData::shadow_camera_near, GreasePencilLineartModifierData::shadow_camera_size, LineartData::shadow_data_pool, LineartData::_conf::shadow_enclose_shapes, LineartData::_conf::shadow_selection, Light::type, Object::type, unit_m4_db(), LineartData::_conf::use_back_face_culling, LineartData::_conf::use_contour, LineartData::_conf::use_contour_secondary, LineartData::_conf::use_crease, LineartData::_conf::use_edge_marks, LineartData::_conf::use_intersections, LineartData::_conf::use_light_contour, LineartData::_conf::use_loose, LineartData::_conf::use_material, LineartData::_conf::use_shadow, LineartData::_geom::vertex_buffer_pointers, LineartData::_conf::view, LineartData::_conf::view_projection, and LineartData::w.

Referenced by lineart_main_try_generate_shadow(), and MOD_lineart_compute_feature_lines_v3().

◆ lineart_matrix_ortho_44d()

void lineart_matrix_ortho_44d ( double(*) mProjection[4],
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax )

Definition at line 192 of file lineart_util.cc.

References unit_m4_db().

Referenced by lineart_main_load_geometries(), and lineart_main_try_generate_shadow_v3().

◆ lineart_matrix_perspective_44d()

void lineart_matrix_perspective_44d ( double(*) mProjection[4],
double fFov_rad,
double fAspect,
double zMin,
double zMax )

Definition at line 160 of file lineart_util.cc.

References unit_m4_db().

Referenced by lineart_main_load_geometries(), and lineart_main_try_generate_shadow_v3().

◆ lineart_mem_acquire()

◆ lineart_mem_acquire_thread()

◆ lineart_mem_destroy()

◆ lineart_mem_new_static_pool()

struct LineartStaticMemPoolNode * lineart_mem_new_static_pool ( struct LineartStaticMemPool * smp,
size_t size )

◆ lineart_prepend_pool()

void lineart_prepend_pool ( LinkNode ** first,
struct LineartStaticMemPool * smp,
void * link )

Definition at line 150 of file lineart_util.cc.

References lineart_mem_acquire_thread(), LinkNode::link, and LinkNode::next.

◆ lineart_register_intersection_shadow_cuts()

◆ lineart_register_shadow_cuts()

void lineart_register_shadow_cuts ( struct LineartData * ld,
struct LineartEdge * e,
struct LineartEdge * shadow_edge )

Cuts the original edge based on the occlusion results under light-camera, if segment is occluded in light-camera, then that segment on the original edge must be shaded.

Definition at line 96 of file lineart_shadow.cc.

References e, lineart_contour_viewed_from_dark_side(), lineart_edge_cut(), LISTBASE_FOREACH, LRT_SHADOW_MASK_ILLUMINATED, LRT_SHADOW_MASK_SHADED, and LineartEdge::segments.

Referenced by lineart_geometry_object_load(), and lineart_register_intersection_shadow_cuts().

◆ list_push_pointer_static()

void * list_push_pointer_static ( ListBase * h,
struct LineartStaticMemPool * smp,
void * p )

◆ list_push_pointer_static_sized()

void * list_push_pointer_static_sized ( ListBase * h,
struct LineartStaticMemPool * smp,
void * p,
int size )