42 # pragma GCC diagnostic error "-Wsign-conversion"
64 #define USE_NONMANIFOLD_WORKAROUND
76 return !((edge_ref->
p1 == 0) && (edge_ref->
p2 == 0));
86 int i, numVerts, numEdges, numPolys;
113 (
size_t)numEdges,
sizeof(
EdgeFaceRef),
"Edge Connectivity");
115 float edge_normal[3];
118 for (i = 0; i < numPolys; i++, mp++) {
123 for (j = 0; j < mp->
totloop; j++, ml++) {
125 edge_ref = &edge_ref_array[ml->
e];
130 else if ((edge_ref->
p1 != -1) && (edge_ref->
p2 == -1)) {
135 edge_ref->
p1 = edge_ref->
p2 = -1;
136 #ifdef USE_NONMANIFOLD_WORKAROUND
144 for (i = 0, ed = medge, edge_ref = edge_ref_array; i < numEdges; i++, ed++, edge_ref++) {
148 if (edge_ref->
p2 != -1) {
152 add_v3_v3v3(edge_normal, face_nors[edge_ref->f1], face_nors[edge_ref->f2]);
158 edge_normal, poly_nors[edge_ref->
p1], poly_nors[edge_ref->
p2]);
166 add_v3_v3(r_vert_nors[ed->v1], edge_normal);
167 add_v3_v3(r_vert_nors[ed->v2], edge_normal);
174 for (i = 0; i < numVerts; i++,
mv++) {
192 MVert *
mv, *mvert, *orig_mvert;
193 MEdge *ed, *medge, *orig_medge;
194 MLoop *ml, *mloop, *orig_mloop;
195 MPoly *mp, *mpoly, *orig_mpoly;
200 uint newLoops = 0, newPolys = 0, newEdges = 0, newVerts = 0, rimVerts = 0;
204 const short mat_ofs = mat_nr_max ? smd->
mat_ofs : 0;
205 const short mat_ofs_rim = mat_nr_max ? smd->
mat_ofs_rim : 0;
216 numVerts,
sizeof(*old_vert_arr),
"old_vert_arr in solidify");
219 int *edge_order =
NULL;
230 const float ofs_new = smd->
offset + ofs_orig;
237 const bool do_bevel_convex = bevel_convex != 0.0f;
259 if (need_poly_normals) {
281 #define INVALID_UNUSED ((uint)-1)
282 #define INVALID_PAIR ((uint)-2)
285 new_edge_arr =
MEM_malloc_arrayN(((numEdges * 2) + numVerts),
sizeof(*new_edge_arr), __func__);
287 edge_users =
MEM_malloc_arrayN(numEdges,
sizeof(*edge_users),
"solid_mod edges");
288 edge_order =
MEM_malloc_arrayN(numEdges,
sizeof(*edge_order),
"solid_mod order");
295 for (eidx = 0, ed = orig_medge; eidx < numEdges; eidx++, ed++) {
299 for (i = 0, mp = orig_mpoly; i < numPolys; i++, mp++) {
304 ml_prev = ml + (mp->
totloop - 1);
306 for (j = 0; j < mp->
totloop; j++, ml++) {
310 ed = orig_medge + eidx;
312 edge_users[eidx] = (ml_prev->
v > ml->
v) == (ed->
v1 < ed->
v2) ? i : (i + numPolys);
313 edge_order[eidx] = j;
322 for (eidx = 0, ed = orig_medge; eidx < numEdges; eidx++, ed++) {
332 for (i = 0; i < numVerts; i++) {
346 if (do_shell ==
false) {
364 (
int)((numVerts *
stride) + newVerts),
365 (
int)((numEdges *
stride) + newEdges + rimVerts),
367 (
int)((numLoops *
stride) + newLoops),
368 (
int)((numPolys *
stride) + newPolys));
375 if (do_bevel_convex) {
400 for (i = 0, j = (
int)numVerts; i < numVerts; i++) {
409 for (i = 0, j = (
int)numEdges; i < numEdges; i++) {
411 MEdge *ed_src, *ed_dst;
416 ed_dst->
v1 = old_vert_arr[ed_src->
v1] + numVerts;
417 ed_dst->
v2 = old_vert_arr[ed_src->
v2] + numVerts;
428 #define INIT_VERT_ARRAY_OFFSETS(test) \
429 if (((ofs_new >= ofs_orig) == do_flip) == test) { \
431 do_shell_align = true; \
437 do_shell_align = true; \
441 do_shell_align = false; \
443 mv = &mvert[numVerts]; \
452 mp = mpoly + numPolys;
454 const int loop_end = mp->
totloop - 1;
463 for (j = 0; j < mp->
totloop; j++) {
474 for (
int j_prev = loop_end; j < mp->
totloop; j_prev = j++) {
489 for (j = 0; j < loop_end; j++) {
490 ml2[j].
e = ml2[j + 1].
e;
496 for (j = 0; j < mp->
totloop; j++) {
497 ml2[j].
e += numEdges;
498 ml2[j].
v += numVerts;
502 for (i = 0, ed = medge + numEdges; i < numEdges; i++, ed++) {
512 float scalar_short_vgroup;
515 float *vert_lens =
NULL;
516 float *vert_angs =
NULL;
518 const float offset_sq = offset * offset;
521 float *edge_angs =
NULL;
525 copy_vn_fl(vert_lens, (
int)numVerts, FLT_MAX);
526 for (
uint i = 0; i < numEdges; i++) {
528 vert_lens[medge[i].
v1] =
min_ff(vert_lens[medge[i].
v1], ed_len_sq);
529 vert_lens[medge[i].v2] =
min_ff(vert_lens[medge[i].
v2], ed_len_sq);
533 if (do_angle_clamp || do_bevel_convex) {
535 if (do_angle_clamp) {
539 if (do_bevel_convex) {
542 edge_users =
MEM_malloc_arrayN(numEdges,
sizeof(*edge_users),
"solid_mod edges");
546 numEdges,
sizeof(*edge_user_pairs),
"edge_user_pairs");
547 for (eidx = 0; eidx < numEdges; eidx++) {
552 for (
uint i = 0; i < numPolys; i++, mp++) {
559 ed = orig_medge + eidx;
561 char flip = (char)((ml_prev->
v > ml->
v) == (ed->
v1 < ed->
v2));
563 edge_user_pairs[eidx][flip] = i;
574 for (
uint i = 0; i < numEdges; i++, ed++) {
577 const float *n0 = poly_nors[edge_user_pairs[i][0]];
578 const float *n1 = poly_nors[edge_user_pairs[i][1]];
582 if (do_angle_clamp) {
586 if (do_bevel_convex) {
587 edge_angs[i] =
angle;
597 if (ofs_new != 0.0f) {
601 scalar_short = scalar_short_vgroup = ofs_new / 32767.0f;
605 for (i_orig = 0; i_orig < i_end; i_orig++,
mv++) {
606 const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig];
615 scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
618 if (do_clamp && offset > FLT_EPSILON) {
621 scalar_short_vgroup = scalar_short;
623 if (do_angle_clamp) {
624 float cos_ang =
cosf(((2 *
M_PI) - vert_angs[i]) * 0.5f);
626 float max_off =
sqrtf(vert_lens[i]) * 0.5f / cos_ang;
627 if (max_off < offset * 0.5f) {
628 scalar_short_vgroup *= max_off / offset * 2;
633 if (vert_lens[i] < offset_sq) {
634 float scalar =
sqrtf(vert_lens[i]) / offset;
635 scalar_short_vgroup *= scalar;
643 if (ofs_orig != 0.0f) {
647 scalar_short = scalar_short_vgroup = ofs_orig / 32767.0f;
652 for (i_orig = 0; i_orig < i_end; i_orig++,
mv++) {
653 const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig];
662 scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
665 if (do_clamp && offset > FLT_EPSILON) {
668 scalar_short_vgroup = scalar_short;
670 if (do_angle_clamp) {
671 float cos_ang =
cosf(vert_angs[i_orig] * 0.5f);
673 float max_off =
sqrtf(vert_lens[i]) * 0.5f / cos_ang;
674 if (max_off < offset * 0.5f) {
675 scalar_short_vgroup *= max_off / offset * 2;
680 if (vert_lens[i] < offset_sq) {
681 float scalar =
sqrtf(vert_lens[i]) / offset;
682 scalar_short_vgroup *= scalar;
690 if (do_bevel_convex) {
691 for (
uint i = 0; i < numEdges; i++) {
693 float angle = edge_angs[i];
696 clamp_f(bevel_convex, -1.0f, 0.0f)) *
702 (
int)medge[i + numEdges].
bweight +
704 clamp_f(bevel_convex, -1.0f, 0.0f)) *
719 if (do_angle_clamp) {
725 #ifdef USE_NONMANIFOLD_WORKAROUND
730 numVerts,
sizeof(
float[2]),
"mod_solid_pair");
731 float *vert_accum = vert_angles + numVerts;
735 if (vert_nors ==
NULL) {
737 for (i = 0,
mv = mvert; i < numVerts; i++,
mv++) {
742 for (i = 0, mp = mpoly; i < numPolys; i++, mp++) {
752 sub_v3_v3v3(nor_prev, mvert[ml[i_curr - 1].
v].co, mvert[ml[i_curr].
v].co);
755 while (i_next < mp->totloop) {
757 sub_v3_v3v3(nor_next, mvert[ml[i_curr].
v].co, mvert[ml[i_next].
v].co);
762 if (
angle < FLT_EPSILON) {
767 vert_accum[vidx] +=
angle;
769 #ifdef USE_NONMANIFOLD_WORKAROUND
771 if ((check_non_manifold ==
false) ||
778 vert_angles[vidx] +=
angle;
798 for (i = 0; i < numVerts; i++, dv++) {
800 scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
801 vert_angles[i] *= scalar;
805 for (i = 0; i < numVerts; i++, dv++) {
807 scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
808 vert_angles[i] *= scalar;
814 float *vert_angs =
NULL;
816 float *edge_angs =
NULL;
818 if (do_angle_clamp || do_bevel_convex) {
820 if (do_angle_clamp) {
824 if (do_bevel_convex) {
827 edge_users =
MEM_malloc_arrayN(numEdges,
sizeof(*edge_users),
"solid_mod edges");
831 numEdges,
sizeof(*edge_user_pairs),
"edge_user_pairs");
832 for (eidx = 0; eidx < numEdges; eidx++) {
836 for (i = 0, mp = orig_mpoly; i < numPolys; i++, mp++) {
840 for (
int j = 0; j < mp->
totloop; j++, ml++) {
843 ed = orig_medge + eidx;
845 char flip = (char)((ml_prev->
v > ml->
v) == (ed->
v1 < ed->
v2));
847 edge_user_pairs[eidx][flip] = i;
858 for (i = 0; i < numEdges; i++, ed++) {
861 const float *n0 = poly_nors[edge_user_pairs[i][0]];
862 const float *n1 = poly_nors[edge_user_pairs[i][1]];
863 if (do_angle_clamp) {
868 if (do_bevel_convex) {
882 const float clamp_fac = 1 + (do_angle_clamp ?
fabsf(smd->
offset_fac) : 0);
884 if (offset > FLT_EPSILON) {
885 float *vert_lens_sq =
MEM_malloc_arrayN(numVerts,
sizeof(
float),
"vert_lens_sq");
886 const float offset_sq = offset * offset;
887 copy_vn_fl(vert_lens_sq, (
int)numVerts, FLT_MAX);
888 for (i = 0; i < numEdges; i++) {
890 vert_lens_sq[medge[i].
v1] =
min_ff(vert_lens_sq[medge[i].
v1], ed_len);
891 vert_lens_sq[medge[i].v2] =
min_ff(vert_lens_sq[medge[i].
v2], ed_len);
893 if (do_angle_clamp) {
894 for (i = 0; i < numVerts; i++) {
895 float cos_ang =
cosf(vert_angs[i] * 0.5f);
897 float max_off =
sqrtf(vert_lens_sq[i]) * 0.5f / cos_ang;
898 if (max_off < offset * 0.5f) {
899 vert_angles[i] *= max_off / offset * 2;
906 for (i = 0; i < numVerts; i++) {
907 if (vert_lens_sq[i] < offset_sq) {
908 float scalar =
sqrtf(vert_lens_sq[i]) / offset;
909 vert_angles[i] *= scalar;
917 if (do_bevel_convex) {
918 for (i = 0; i < numEdges; i++) {
920 float angle = edge_angs[i];
923 clamp_f(bevel_convex, -1, 0)) *
929 (
int)medge[i + numEdges].
bweight +
931 clamp_f(bevel_convex, -1, 0)) *
944 #undef INVALID_UNUSED
947 if (ofs_new != 0.0f) {
953 for (i_orig = 0; i_orig < i_end; i_orig++,
mv++) {
954 const uint i_other = do_shell_align ? i_orig : new_vert_arr[i_orig];
955 if (vert_accum[i_other]) {
957 mv->co, vert_nors[i_other], ofs_new * (vert_angles[i_other] / vert_accum[i_other]));
962 if (ofs_orig != 0.0f) {
969 for (i_orig = 0; i_orig < i_end; i_orig++,
mv++) {
970 const uint i_other = do_shell_align ? i_orig : new_vert_arr[i_orig];
971 if (vert_accum[i_other]) {
973 mv->co, vert_nors[i_other], ofs_orig * (vert_angles[i_other] / vert_accum[i_other]));
992 mv = mvert + numVerts;
993 for (i = 0; i < numVerts; i++,
mv++) {
999 if (shell_defgrp_index != -1 || rim_defgrp_index != -1) {
1002 if (dvert ==
NULL) {
1008 if (dvert !=
NULL) {
1011 if (rim_defgrp_index != -1) {
1012 for (
uint i = 0; i < rimVerts; i++) {
1021 if (shell_defgrp_index != -1) {
1022 for (
uint i = numVerts; i <
result->totvert; i++) {
1040 #define SOLIDIFY_SIDE_NORMALS
1042 #ifdef SOLIDIFY_SIDE_NORMALS
1047 float(*edge_vert_nos)[3] = do_side_normals ?
1056 int *origindex_edge;
1060 if (crease_rim || crease_outer || crease_inner) {
1066 orig_ed = (origindex_edge) ? &origindex_edge[(numEdges *
stride) + newEdges] :
NULL;
1067 ed = &medge[(numEdges *
stride) + newEdges];
1068 for (i = 0; i < rimVerts; i++, ed++) {
1069 ed->
v1 = new_vert_arr[i];
1070 ed->
v2 = (do_shell ? new_vert_arr[i] : i) + numVerts;
1084 mp = mpoly + (numPolys *
stride);
1085 ml = mloop + (numLoops *
stride);
1087 for (i = 0; i < newPolys; i++, mp++) {
1088 uint eidx = new_edge_arr[i];
1089 uint pidx = edge_users[eidx];
1093 if (pidx >= numPolys) {
1105 &
mesh->pdata, &
result->pdata, (
int)pidx, (
int)((numPolys *
stride) + i), 1);
1116 k2 = mpoly[pidx].
loopstart + (edge_order[eidx]);
1129 if (flip ==
false) {
1134 ml[j++].e = (numEdges *
stride) + old_vert_arr[ed->
v2] + newEdges;
1136 ml[j].v = (do_shell ? ed->
v2 : old_vert_arr[ed->
v2]) + numVerts;
1137 ml[j++].e = (do_shell ? eidx : i) + numEdges;
1139 ml[j].v = (do_shell ? ed->
v1 : old_vert_arr[ed->
v1]) + numVerts;
1140 ml[j++].e = (numEdges *
stride) + old_vert_arr[ed->
v1] + newEdges;
1147 ml[j++].e = (numEdges *
stride) + old_vert_arr[ed->
v1] + newEdges;
1149 ml[j].v = (do_shell ? ed->
v1 : old_vert_arr[ed->
v1]) + numVerts;
1150 ml[j++].e = (do_shell ? eidx : i) + numEdges;
1152 ml[j].v = (do_shell ? ed->
v2 : old_vert_arr[ed->
v2]) + numVerts;
1153 ml[j++].e = (numEdges *
stride) + old_vert_arr[ed->
v2] + newEdges;
1156 if (origindex_edge) {
1163 mp->
mat_nr += mat_ofs_rim;
1168 char *cr = &(ed->
crease);
1169 int tcr = *cr + crease_outer;
1170 *cr = tcr > 255 ? 255 : tcr;
1175 char *cr = &(medge[numEdges + (do_shell ? eidx : i)].crease);
1176 int tcr = *cr + crease_inner;
1177 *cr = tcr > 255 ? 255 : tcr;
1180 #ifdef SOLIDIFY_SIDE_NORMALS
1181 if (do_side_normals) {
1183 mvert[ml[j - 4].
v].co,
1184 mvert[ml[j - 3].
v].co,
1185 mvert[ml[j - 2].
v].co,
1186 mvert[ml[j - 1].
v].co);
1194 #ifdef SOLIDIFY_SIDE_NORMALS
1195 if (do_side_normals) {
1196 const MEdge *ed_orig = medge;
1197 ed = medge + (numEdges *
stride);
1198 for (i = 0; i < rimVerts; i++, ed++, ed_orig++) {
1207 for (k = 0; k < 2; k++) {
1208 nor_short = mvert[*(&ed->v1 + k)].no;
1238 #undef SOLIDIFY_SIDE_NORMALS
typedef float(TangentPoint)[2]
void * CustomData_duplicate_referenced_layer(struct CustomData *data, const int type, const int totelem)
void * CustomData_get_layer(const struct CustomData *data, int type)
void * CustomData_add_layer(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem)
void CustomData_copy_data(const struct CustomData *source, struct CustomData *dest, int source_index, int dest_index, int count)
struct Mesh * BKE_mesh_new_nomain_from_template(const struct Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
void BKE_mesh_calc_normals_poly(struct MVert *mverts, float(*r_vertnors)[3], int numVerts, const struct MLoop *mloop, const struct MPoly *mpolys, int numLoops, int numPolys, float(*r_polyNors)[3], const bool only_face_normals)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_NEW(_tot, _alloc_string)
MINLINE float max_ff(float a, float b)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float min_ff(float a, float b)
MINLINE int clamp_i(int value, int min, int max)
float normal_quad_v3(float n[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
MINLINE float shell_v3v3_normalized_to_dist(const float a[3], const float b[3])
void copy_vn_fl(float *array_tar, const int size, const float val)
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
void copy_vn_i(int *array_tar, const int size, const int val)
MINLINE void normal_float_to_short_v3(short r[3], const float n[3])
MINLINE float normalize_v3(float r[3])
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void normal_short_to_float_v3(float r[3], const short n[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
void mid_v3_v3v3_angle_weighted(float r[3], const float a[3], const float b[3])
float angle_signed_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_short(short r[3])
MINLINE float normalize_v3_length(float r[3], const float unit_scale)
float angle_normalized_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v3_v3(float r[3], const float a[3])
#define STACK_PUSH(stack, val)
#define STACK_DECLARE(stack)
#define STACK_INIT(stack, tot)
#define STACK_SIZE(stack)
@ MOD_SOLIDIFY_NORMAL_CALC
@ MOD_SOLIDIFY_OFFSET_ANGLE_CLAMP
@ MOD_SOLIDIFY_VGROUP_INV
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 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 GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_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 stride
_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.
static void mesh_calc_hq_normal(Mesh *mesh, float(*poly_nors)[3], float(*r_vert_nors)[3])
BLI_INLINE bool edgeref_is_init(const EdgeFaceRef *edge_ref)
struct EdgeFaceRef EdgeFaceRef
BLI_INLINE void madd_v3v3short_fl(float r[3], const short a[3], const float f)
Mesh * MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
#define INIT_VERT_ARRAY_OFFSETS(test)
void MOD_get_vgroup(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
Group RGB to Bright Vector Camera CLAMP
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
struct CustomData pdata ldata
char shell_defgrp_name[64]