93 if (dl->type ==
type) {
108 if (dl->type ==
type) {
142 float *vdata, *ndata,
nor[3];
143 float *
v1, *
v2, *v3, *v4;
144 float *n1, *n2, *n3, *n4;
145 int a, b, p1, p2, p3, p4;
149 if (dl->nors ==
NULL) {
150 dl->nors =
MEM_callocN(
sizeof(
float[3]),
"dlnors");
160 else if (dl->type ==
DL_SURF) {
161 if (dl->nors ==
NULL) {
162 dl->nors =
MEM_callocN(
sizeof(
float[3]) * dl->nr * dl->parts,
"dlnors");
167 for (
a = 0;
a < dl->parts;
a++) {
182 for (; b < dl->nr; b++) {
200 a = dl->parts * dl->nr;
222 int segments_u = dl->nr - (cyclic_u ==
false);
223 int segments_v = dl->parts - (cyclic_v ==
false);
224 vert_tot = dl->nr * dl->parts;
225 face_tot = segments_u * segments_v;
226 tri_tot = face_tot * 2;
231 face_tot = dl->parts;
237 face_tot = dl->parts;
238 tri_tot = face_tot * 2;
243 vert_tot = dl->nr * dl->parts;
248 *totvert += vert_tot;
249 *totface += face_tot;
255 const DispList *dl,
int a,
int *b,
int *p1,
int *p2,
int *p3,
int *p4)
263 (*p2) = (*p1) + dl->
nr - 1;
264 (*p3) = (*p1) + dl->
nr;
265 (*p4) = (*p2) + dl->
nr;
271 (*p4) = (*p2) + dl->
nr;
272 (*p3) = (*p1) + dl->
nr;
285 #ifdef __INTEL_COMPILER
287 # pragma intel optimization_level 1
292 const bool for_render,
298 if (nu->hide != 0 && editmode) {
307 const BezTriple *bezt_first = &nu->bezt[0];
308 const BezTriple *bezt_last = &nu->bezt[nu->pntsu - 1];
312 for (
int i = 1; i < nu->pntsu; i++) {
313 const BezTriple *prevbezt = &nu->bezt[i - 1];
319 samples_len += resolution;
328 samples_len += resolution;
339 const bool use_cyclic_sample = is_cyclic && (samples_len != 2);
343 dl->verts =
MEM_mallocN(
sizeof(
float[3]) * (samples_len + 1),
"dlverts");
346 dl->nr = samples_len;
347 dl->col = nu->mat_nr;
348 dl->charidx = nu->charidx;
352 float *
data = dl->verts;
353 for (
int i = 1; i < nu->pntsu; i++) {
354 const BezTriple *prevbezt = &nu->bezt[i - 1];
362 for (
int j = 0; j < 3; j++) {
371 data += 3 * resolution;
379 for (
int j = 0; j < 3; j++) {
381 bezt_last->vec[2][j],
382 bezt_first->vec[0][j],
383 bezt_first->vec[1][j],
401 dl->
col = nu->mat_nr;
407 else if (nu->type ==
CU_POLY) {
408 const int len = nu->pntsu;
414 dl->
col = nu->mat_nr;
419 for (
int i = 0; i <
len; i++) {
420 const BPoint *bp = &nu->bp[i];
435 const float normal_proj[3],
436 const bool flip_normal)
438 if (dispbase ==
NULL) {
452 bool should_continue =
true;
453 while (should_continue) {
454 should_continue =
false;
455 bool nextcol =
false;
461 short dl_flag_accum = 0;
462 short dl_rt_accum = 0;
465 if (charidx < dl->charidx) {
466 should_continue =
true;
468 else if (charidx == dl->charidx) {
469 if (colnr == dl->col) {
477 for (
int i = 0; i < dl->nr; i++) {
478 sf_vert_last = sf_vert;
481 if (sf_vert_last ==
NULL) {
482 sf_vert_new = sf_vert;
489 if (sf_vert !=
NULL && sf_vert_new !=
NULL) {
493 else if (colnr < dl->
col) {
495 should_continue =
true;
499 dl_flag_accum |= dl->flag;
500 dl_rt_accum |= dl->rt;
505 if (totvert != 0 && triangles_len != 0) {
512 dlnew->
parts = triangles_len;
525 int *index = dlnew->
index;
527 index[0] = sf_tri->v1->tmp.i;
528 index[1] = flip_normal ? sf_tri->v3->tmp.i : sf_tri->v2->tmp.i;
529 index[2] = flip_normal ? sf_tri->v2->tmp.i : sf_tri->v3->tmp.i;
564 dlnew->
nr = dl->parts;
568 dlnew->
col = dl->col;
571 const float *old_verts = dl->verts;
572 float *new_verts = dlnew->
verts;
573 for (
int i = 0; i < dl->parts; i++) {
576 old_verts += 3 * dl->nr;
583 dlnew->
nr = dl->parts;
587 dlnew->
col = dl->col;
590 const float *old_verts = dl->verts + 3 * (dl->nr - 1);
591 float *new_verts = dlnew->
verts;
592 for (
int i = 0; i < dl->parts; i++) {
595 old_verts += 3 * dl->nr;
602 const float z_up[3] = {0.0f, 0.0f, -1.0f};
622 const float z_up[3] = {0.0f, 0.0f, -1.0f};
654 dx = dl->
verts[3 * (dl->
nr - 1)] - minx;
657 for (
a = 0;
a < dl->
nr;
a++, fp += 3) {
658 if ((fp[0] - minx) / dx >= fac) {
661 float fac1 = (fp[-3] - minx) / dx;
662 float fac2 = (fp[0] - minx) / dx;
664 return fp[1] * (fac1 - fac) / (fac1 - fac2) + fp[-2] * (fac - fac2) / (fac1 - fac2);
722 const bool for_render,
741 pretessellatePoint =
NULL;
742 for (; md; md = md->
next) {
749 return pretessellatePoint;
753 pretessellatePoint = md;
762 pretessellatePoint = md;
766 return pretessellatePoint;
775 const bool for_render)
781 int numElems = 0, numVerts = 0;
785 float *keyVerts =
NULL;
787 bool modified =
false;
824 if (pretessellatePoint) {
825 for (; md; md = md->
next) {
835 if (!deformedVerts) {
842 if (md == pretessellatePoint) {
864 float(*allverts)[3], *fp;
869 *r_vert_len += (dl->type ==
DL_INDEX3) ? dl->nr : dl->parts * dl->nr;
872 allverts =
MEM_mallocN(
sizeof(
float[3]) * (*r_vert_len),
"displist_vert_coords_alloc allverts");
873 fp = (
float *)allverts;
875 int ofs = 3 * ((dl->type ==
DL_INDEX3) ? dl->nr : dl->parts * dl->nr);
876 memcpy(fp, dl->verts,
sizeof(
float) * ofs);
887 fp = (
float *)allverts;
889 int ofs = 3 * ((dl->type ==
DL_INDEX3) ? dl->nr : dl->parts * dl->nr);
890 memcpy(dl->verts, fp,
sizeof(
float) * ofs);
900 const bool for_render,
901 const bool force_mesh_conversion)
907 int required_mode = 0, totvert = 0;
909 Mesh *modified =
NULL, *mesh_applied;
911 int useCache = !for_render;
933 if (pretessellatePoint) {
934 md = pretessellatePoint->
next;
937 if (r_final && *r_final) {
941 for (; md; md = md->
next) {
952 if (modified ==
NULL ) {
953 if (vertCos !=
NULL) {
973 mti->
deformVerts(md, &mectx_deform, modified, vertCos, totvert);
996 modified = temp_mesh;
1022 mesh_applied = mti->
modifyMesh(md, &mectx_apply, modified);
1027 if (modified && modified != mesh_applied) {
1030 modified = mesh_applied;
1039 modified = temp_mesh;
1054 if (force_mesh_conversion && !modified) {
1087 (*r_final) = modified;
1093 else if (modified !=
NULL) {
1101 int a, b, p1, p2, p3, p4;
1107 "index array nurbs");
1115 for (; b < dl->
nr; b++, index += 4) {
1136 const bool for_render,
1137 const bool for_orco)
1144 bool force_mesh_conversion =
false;
1163 int resolu = nu->resolu, resolv = nu->resolv;
1174 if (nu->pntsv == 1) {
1183 dl->
col = nu->mat_nr;
1201 len = (nu->pntsu * resolu) * (nu->pntsv * resolv);
1207 dl->
col = nu->mat_nr;
1217 dl->
parts = (nu->pntsu * resolu);
1218 dl->
nr = (nu->pntsv * resolv);
1236 depsgraph,
scene, ob, dispbase, r_final, for_render, force_mesh_conversion);
1246 const float bev_blend,
1248 const float radius_factor,
1251 float *
data = *r_data;
1252 const float *fp = dlb->
verts;
1253 for (
int b = 0; b < dlb->
nr; b++, fp += 3,
data += 3) {
1255 float vec[3], quat[4];
1257 vec[0] = fp[1] + widfac;
1261 if (nbevp ==
NULL) {
1272 data[0] += radius_factor * vec[0];
1273 data[1] += radius_factor * vec[1];
1274 data[2] += radius_factor * vec[2];
1279 if (nbevp ==
NULL) {
1290 sina = nbevp->
sina * bev_blend + bevp->
sina * (1.0f - bev_blend);
1291 cosa = nbevp->
cosa * bev_blend + bevp->
cosa * (1.0f - bev_blend);
1294 data[0] += radius_factor * (widfac + fp[1]) * sina;
1295 data[1] += radius_factor * (widfac + fp[1]) * cosa;
1296 data[2] += radius_factor * fp[2];
1305 const float *prev_fp,
1312 memcpy(dl->
verts, prev_fp,
sizeof(
float[3]) * dlb->
nr);
1329 const BevList *bl,
float bevfac,
float spline_length,
int *r_bev,
float *r_blend)
1331 float normlen, normsum = 0.0f;
1332 float *seglen = bl->
seglen;
1334 int bevcount = 0, nr = bl->
nr;
1336 float bev_fl = bevfac * (bl->
nr - 1);
1337 *r_bev = (int)bev_fl;
1339 while (bevcount < nr - 1) {
1340 normlen = *seglen / spline_length;
1341 if (normsum + normlen > bevfac) {
1342 bev_fl = bevcount + (bevfac - normsum) / normlen * *segbevcount;
1343 *r_bev = (int)bev_fl;
1344 *r_blend = bev_fl - *r_bev;
1348 bevcount += *segbevcount;
1355 const BevList *bl,
float bevfac,
float spline_length,
int *r_bev,
float *r_blend)
1357 const float len_target = bevfac * spline_length;
1359 float len_next = 0.0f,
len = 0.0f;
1360 int i = 0, nr = bl->
nr;
1365 if (len_next > len_target) {
1373 *r_blend = (len_target -
len) / bevp->
offset;
1377 const BevList *bl,
int *r_start,
float *r_firstblend,
int *r_steps,
float *r_lastblend)
1381 *r_firstblend = 1.0f;
1382 *r_lastblend = 1.0f;
1389 float *r_firstblend,
1393 float tmpf, total_length = 0.0f;
1406 total_length += bl->
seglen[i];
1412 const float start_fl = cu->
bevfac1 * (bl->
nr - 1);
1413 *r_start = (int)start_fl;
1414 *r_firstblend = 1.0f - (start_fl - (*r_start));
1419 *r_firstblend = 1.0f - *r_firstblend;
1424 *r_firstblend = 1.0f - *r_firstblend;
1431 const float end_fl = cu->
bevfac2 * (bl->
nr - 1);
1434 *r_steps = 2 + end - *r_start;
1435 *r_lastblend = end_fl - end;
1440 *r_steps = end - *r_start + 2;
1445 *r_steps = end - *r_start + 2;
1450 if (end < *r_start || (end == *r_start && *r_lastblend < 1.0f - *r_firstblend)) {
1451 SWAP(
int, *r_start, end);
1452 tmpf = *r_lastblend;
1453 *r_lastblend = 1.0f - *r_firstblend;
1454 *r_firstblend = 1.0f - tmpf;
1455 *r_steps = end - *r_start + 2;
1458 if (*r_start + *r_steps > bl->
nr) {
1459 *r_steps = bl->
nr - *r_start;
1460 *r_lastblend = 1.0f;
1468 const bool for_render,
1469 const bool for_orco,
1485 bool force_mesh_conversion =
false;
1522 const float widfac = cu->
width - 1.0f;
1526 for (; bl && nu; bl = bl->
next, nu = nu->
next) {
1539 if (bl->
poly != -1) {
1570 float bottom_no[3] = {0.0f};
1571 float top_no[3] = {0.0f};
1572 float first_blend = 0.0f, last_blend = 0.0f;
1573 int start,
steps = 0;
1615 for (
int i = start,
a = 0;
a <
steps; i++, bevp++,
a++) {
1616 float radius_factor = 1.0;
1617 float *cur_data =
data;
1620 radius_factor = bevp->
radius;
1625 float len = (
steps - 3) + first_blend + last_blend;
1628 taper_factor = 0.0f;
1630 else if (
a ==
steps - 1) {
1631 taper_factor = 1.0f;
1634 taper_factor = ((
float)
a - (1.0f - first_blend)) /
len;
1638 float len = bl->
nr - 1;
1642 taper_factor += (1.0f - first_blend) /
len;
1644 else if (
a ==
steps - 1) {
1645 taper_factor -= (1.0f - last_blend) /
len;
1652 radius_factor *= bevp->
radius;
1655 radius_factor += bevp->
radius;
1660 if ((
a == 0) && (bevp != bevp_last)) {
1662 cu, bevp, bevp + 1, dlb, 1.0f - first_blend, widfac, radius_factor, &
data);
1664 else if ((
a ==
steps - 1) && (bevp != bevp_first)) {
1666 cu, bevp, bevp - 1, dlb, 1.0f - last_blend, widfac, radius_factor, &
data);
1674 fillBevelCap(nu, dlb, cur_data - 3 * dlb->nr, &bottom_capbase);
1688 if (bottom_capbase.
first) {
1711 depsgraph,
scene, ob, dispbase, r_final, for_render, force_mesh_conversion);
1725 const bool for_render,
1726 const bool for_orco)
1748 if (mesh_eval !=
NULL) {
1760 const bool for_orco)
1776 tot = (dl->type ==
DL_INDEX3) ? dl->nr : dl->nr * dl->parts;
1778 for (
a = 0;
a < tot;
a++, vert += 3) {
typedef float(TangentPoint)[2]
void BKE_anim_path_calc_data(struct Object *ob)
void BKE_curve_bevelList_free(struct ListBase *bev)
float(* BKE_curve_nurbs_vert_coords_alloc(const struct ListBase *lb, int *r_vert_len))[3]
void BKE_curve_bevel_make(struct Object *ob, struct ListBase *disp)
struct ListBase * BKE_curve_editNurbs_get(struct Curve *cu)
void BKE_nurb_makeFaces(const struct Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv)
bool BKE_nurb_check_valid_u(const struct Nurb *nu)
void BKE_curve_bevelList_make(struct Object *ob, struct ListBase *nurbs, bool for_render)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
void BKE_nurb_makeCurve(const struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride)
void BKE_nurbList_duplicate(struct ListBase *lb1, const struct ListBase *lb2)
void BKE_nurbList_free(struct ListBase *lb)
void BKE_curve_nurbs_vert_coords_apply(struct ListBase *lb, const float(*vert_coords)[3], const bool constrain_2d)
void BKE_curve_nurbs_key_vert_tilts_apply(struct ListBase *lb, const float *key)
bool BKE_nurb_check_valid_uv(const struct Nurb *nu)
ListBase * BKE_curve_nurbs_get(struct Curve *cu)
float(* BKE_curve_nurbs_key_vert_coords_alloc(const struct ListBase *lb, float *key, int *r_vert_len))[3]
display list (or rather multi purpose list) stuff.
bool BKE_vfont_to_curve_nubase(struct Object *ob, int mode, struct ListBase *r_nubase)
float * BKE_key_evaluate_object(struct Object *ob, int *r_totelem)
int BKE_keyblock_curve_element_count(struct ListBase *nurb)
bool object_deform_mball(struct Object *ob, struct ListBase *dispbase)
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag)
void BKE_id_free(struct Main *bmain, void *idv)
struct Object * BKE_mball_basis_find(struct Scene *scene, struct Object *ob)
This function finds the basis MetaBall.
void BKE_mball_texspace_calc(struct Object *ob)
void BKE_mball_polygonize(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct ListBase *dispbase)
void BKE_mesh_calc_normals_mapping_simple(struct Mesh *me)
void BKE_mesh_ensure_normals(struct Mesh *me)
void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float(*vert_coords)[3])
struct Mesh * BKE_mesh_new_nomain_from_curve_displist(struct Object *ob, struct ListBase *dispbase)
float(* BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3]
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
struct ModifierData * BKE_modifiers_get_virtual_modifierlist(const struct Object *ob, struct VirtualModifierData *data)
@ eModifierTypeType_OnlyDeform
@ eModifierTypeType_DeformOrConstruct
@ eModifierTypeType_Constructive
void BKE_modifiers_clear_errors(struct Object *ob)
General operations, lookup, etc. for blender objects.
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
struct Mesh * BKE_object_get_evaluated_mesh(struct Object *object)
void BKE_object_free_derived_caches(struct Object *ob)
void BKE_object_boundbox_calc_from_mesh(struct Object *ob, struct Mesh *me_eval)
void BKE_object_eval_assign_data(struct Object *object, struct ID *data, bool is_owned)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
float normal_quad_v3(float n[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void mul_qt_v3(const float q[4], float r[3])
void interp_qt_qtqt(float q[4], const float a[4], const float b[4], const float t)
void copy_qt_qt(float q[4], const float a[4])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE float normalize_v3(float r[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
struct MemArena * BLI_memarena_new(const size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2) ATTR_MALLOC
struct ScanFillVert * BLI_scanfill_vert_add(ScanFillContext *sf_ctx, const float vec[3])
struct ScanFillEdge * BLI_scanfill_edge_add(ScanFillContext *sf_ctx, struct ScanFillVert *v1, struct ScanFillVert *v2)
@ BLI_SCANFILL_CALC_POLYS
@ BLI_SCANFILL_CALC_HOLES
@ BLI_SCANFILL_CALC_REMOVE_DOUBLES
void BLI_scanfill_begin_arena(ScanFillContext *sf_ctx, struct MemArena *arena)
#define BLI_SCANFILL_ARENA_SIZE
void BLI_scanfill_end_arena(ScanFillContext *sf_ctx, struct MemArena *arena)
unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const float nor_proj[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
#define INIT_MINMAX(min, max)
struct Depsgraph Depsgraph
@ DAG_EVAL_NEED_CURVE_PATH
uint32_t DEG_get_eval_flags_for_id(const struct Depsgraph *graph, struct ID *id)
@ LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT
@ CU_TAPER_RADIUS_MULTIPLY
@ eModifierMode_ApplyOnSpline
@ eModifierType_MeshDeform
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v2
const Depsgraph * depsgraph
static void displist_surf_indices(DispList *dl)
static void curve_to_filledpoly(const Curve *cu, ListBase *dispbase)
static void bevels_to_filledpoly(const Curve *cu, ListBase *dispbase)
static void boundbox_displist_object(Object *ob)
void BKE_displist_normals_add(ListBase *lb)
void BKE_displist_make_curveTypes_forRender(Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *dispbase, Mesh **r_final, const bool for_orco)
float BKE_displist_calc_taper(Depsgraph *depsgraph, const Scene *scene, Object *taperobj, int cur, int tot)
void BKE_displist_make_mball_forRender(Depsgraph *depsgraph, Scene *scene, Object *ob, ListBase *dispbase)
static float displist_calc_taper(Depsgraph *depsgraph, const Scene *scene, Object *taperobj, float fac)
void BKE_displist_fill(const ListBase *dispbase, ListBase *to, const float normal_proj[3], const bool flip_normal)
static void calc_bevfac_mapping_default(const BevList *bl, int *r_start, float *r_firstblend, int *r_steps, float *r_lastblend)
static void calc_bevfac_spline_mapping(const BevList *bl, float bevfac, float spline_length, int *r_bev, float *r_blend)
bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *source_nurb, ListBase *target_nurb, const bool for_render)
static float(* displist_vert_coords_alloc(ListBase *dispbase, int *r_vert_len))[3]
static void rotateBevelPiece(const Curve *cu, const BevPoint *bevp, const BevPoint *nbevp, const DispList *dlb, const float bev_blend, const float widfac, const float radius_factor, float **r_data)
void BKE_displist_copy(ListBase *lbn, const ListBase *lb)
static void calc_bevfac_mapping(const Curve *cu, const BevList *bl, const Nurb *nu, int *r_start, float *r_firstblend, int *r_steps, float *r_lastblend)
static void do_makeDispListCurveTypes(Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *dispbase, const bool for_render, const bool for_orco, Mesh **r_final)
bool BKE_displist_surfindex_get(const DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4)
static void fillBevelCap(const Nurb *nu, const DispList *dlb, const float *prev_fp, ListBase *dispbase)
static void displist_vert_coords_apply(ListBase *dispbase, const float(*allverts)[3])
void BKE_displist_count(const ListBase *lb, int *totvert, int *totface, int *tottri)
void BKE_displist_free(ListBase *lb)
void BKE_displist_make_curveTypes(Depsgraph *depsgraph, const Scene *scene, Object *ob, const bool for_render, const bool for_orco)
void BKE_displist_make_mball(Depsgraph *depsgraph, Scene *scene, Object *ob)
DispList * BKE_displist_find_or_create(ListBase *lb, int type)
DispList * BKE_displist_find(ListBase *lb, int type)
void BKE_displist_elem_free(DispList *dl)
static void calc_bevfac_segment_mapping(const BevList *bl, float bevfac, float spline_length, int *r_bev, float *r_blend)
static void curve_calc_modifiers_post(Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *dispbase, Mesh **r_final, const bool for_render, const bool force_mesh_conversion)
static ModifierData * curve_get_tessellate_point(const Scene *scene, const Object *ob, const bool for_render, const bool editmode)
bool BKE_displist_has_faces(const ListBase *lb)
static void curve_to_displist(const Curve *cu, const ListBase *nubase, const bool for_render, ListBase *r_dispbase)
void BKE_displist_make_surf(Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *dispbase, Mesh **r_final, const bool for_render, const bool for_orco)
void BKE_displist_minmax(const ListBase *dispbase, float min[3], float max[3])
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
const float * anim_path_accum_length
struct EditFont * editfont
struct ModifierData * next
struct Mesh *(* modifyMesh)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh)
void(* deformVerts)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh, float(*vertexCos)[3], int numVerts)
bool(* dependsOnNormals)(struct ModifierData *md)
struct CurveCache * curve_cache