39 #define DNA_DEPRECATED_ALLOW
87 const Curve *curve_src = (
const Curve *)id_src;
311 .struct_size =
sizeof(
Curve),
313 .name_plural =
"curves",
322 .foreach_cache =
NULL,
330 .blend_read_undo_preserve =
NULL,
332 .lib_override_apply_post =
NULL,
402 cu->
type = curve_type;
414 cu->
tb[0].
w = cu->
tb[0].
h = 0.0;
528 float loc[3],
size[3];
535 for (
int a = 0;
a < 3;
a++) {
536 if (
size[
a] == 0.0f) {
539 else if (
size[
a] > 0.0f &&
size[
a] < 0.00001f) {
542 else if (
size[
a] < 0.0f &&
size[
a] > -0.00001f) {
581 if (index - tot < tot_nu) {
582 copy_v3_v3(r_co, nu->bezt[index - tot].vec[1]);
587 tot_nu = nu->pntsu * nu->pntsv;
588 if (index - tot < tot_nu) {
605 tot += 3 * nu->pntsu;
608 tot += nu->pntsu * nu->pntsv;
624 tot += nu->pntsu * nu->pntsv;
681 memcpy(newnu, nu,
sizeof(
Nurb));
716 memcpy(newnu, src,
sizeof(
Nurb));
719 SWAP(
int, pntsu, pntsv);
721 newnu->
pntsu = pntsu;
722 newnu->
pntsv = pntsv;
758 bezt->
vec[0][2] = 0.0;
759 bezt->
vec[1][2] = 0.0;
760 bezt->
vec[2][2] = 0.0;
790 float radius_vector[3];
791 radius_vector[0] = radius_vector[1] = radius_vector[2] = bezt->
radius;
811 if (nu->
pntsv == 1 && use_radius) {
812 float radius_vector[3];
813 radius_vector[0] = radius_vector[1] = radius_vector[2] = bp->
radius;
836 int resolu = resolution ? resolution : nu->
resolu;
837 int pntsu = nu->
pntsu;
838 float *points, *pntsit, *prevpntsit;
845 prevbp = nu->
bp + (nu->
pntsu - 1);
859 points =
MEM_mallocN(
sizeof(
float[3]) * (resolu + 1),
"getLength_bezier");
876 for (
int j = 0; j < 3; j++) {
886 prevpntsit = pntsit = points;
901 if (nu->
pntsv == 1) {
903 points =
MEM_callocN(
sizeof(
float[3]) * pntsu * resolu,
"getLength_nurbs");
908 b = pntsu * resolu + 1;
909 prevpntsit = points + 3 * (pntsu * resolu - 1);
913 b = (pntsu - 1) * resolu;
938 for (i = 0, bp = &nu->
bp[nu->
pntsu]; i < number; i++, bp++) {
952 for (i = 0, bezt = &nu->
bezt[nu->
pntsu]; i < number; i++, bezt++) {
961 const int totu = nu->
pntsu;
962 const int totv = nu->
pntsv;
967 else if (u < 0 || u >= totu) {
974 else if (v < 0 || v >= totv) {
978 return (
v * totu) + u;
983 const int totu = nu->
pntsu;
984 const int totv = nu->
pntsv;
986 *r_u = (index % totu);
987 *r_v = (index / totu) % totv;
998 bezt_next = nu->
bezt;
1005 bezt_next = bezt + 1;
1017 if (bp == &nu->
bp[nu->
pntsu - 1]) {
1039 if (bezt == nu->
bezt) {
1048 bezt_prev = bezt - 1;
1063 bp_prev = &nu->
bp[nu->
pntsu - 1];
1079 float dir_prev[3], dir_next[3];
1093 float dir_prev[3], dir_next[3];
1119 float dir_mid[3], tvec[3];
1156 float dir_prev[3] = {0.0f}, dir_next[3] = {0.0f};
1170 float dir_mid[3], tvec[3];
1181 static void calcknots(
float *knots,
const int pnts,
const short order,
const short flag)
1184 const int pnts_order = pnts +
order;
1191 for (
a = 1;
a <= pnts_order;
a++) {
1193 if (
a >=
order &&
a <= pnts) {
1203 for (
a = 0;
a < pnts_order;
a++) {
1208 else if (
order == 3) {
1210 for (
a = 0;
a < pnts_order;
a++) {
1211 if (
a >=
order &&
a <= pnts) {
1218 CLOG_ERROR(&
LOG,
"bez nurb curve order is not 3 or 4, should never happen");
1222 for (
a = 0;
a < pnts_order;
a++) {
1232 int a, b, order2,
c;
1234 if (knots ==
NULL) {
1243 for (
a = 1;
a < order2;
a++) {
1244 if (knots[b] != knots[b -
a]) {
1249 knots[pnts +
order - 2] += 1.0f;
1254 c = pnts +
order + order2;
1255 for (
a = pnts + order2;
a <
c;
a++) {
1256 knots[
a] = knots[
a - 1] + (knots[b] - knots[b - 1]);
1314 float t,
short order,
int pnts,
const float *knots,
float *basis,
int *start,
int *end)
1317 int i,
i1 = 0, i2 = 0, j, orderpluspnts, opp2, o2;
1319 orderpluspnts =
order + pnts;
1320 opp2 = orderpluspnts - 1;
1326 else if (
t > knots[opp2]) {
1332 for (i = 0; i < opp2; i++) {
1333 if (knots[i] != knots[i + 1] &&
t >= knots[i] &&
t <= knots[i + 1]) {
1353 for (j = 2; j <=
order; j++) {
1355 if (i2 + j >= orderpluspnts) {
1359 for (i =
i1; i <= i2; i++) {
1360 if (basis[i] != 0.0f) {
1361 d = ((
t - knots[i]) * basis[i]) / (knots[i + j - 1] - knots[i]);
1367 if (basis[i + 1] != 0.0f) {
1368 e = ((knots[i + j] -
t) * basis[i + 1]) / (knots[i + j] - knots[i + 1]);
1381 for (i =
i1; i <= i2; i++) {
1382 if (basis[i] > 0.0f) {
1384 if (*start == 1000) {
1397 float *basisu, *basis, *basisv, *
sum, *fp, *in;
1398 float u,
v, ustart, uend, ustep, vstart, vend, vstep, sumdiv;
1399 int i, j, iofs, jofs, cycl,
len, curu, curv;
1400 int istart, iend, jsta, jen, *jstart, *jend, ratcomp;
1402 int totu = nu->
pntsu * resolu, totv = nu->
pntsv * resolv;
1413 if (coord_array ==
NULL) {
1429 if (bp->
vec[3] != 1.0f) {
1437 ustart = fp[nu->
orderu - 1];
1442 uend = fp[nu->
pntsu];
1449 vstart = fp[nu->
orderv - 1];
1455 vend = fp[nu->
pntsv];
1495 jsta = jstart[curv];
1502 for (j = jsta; j <= jen; j++) {
1504 if (j >= nu->
pntsv) {
1505 jofs = (j - nu->
pntsv);
1510 bp = nu->
bp + nu->
pntsu * jofs + istart - 1;
1512 for (i = istart; i <= iend; i++, fp++) {
1513 if (i >= nu->
pntsu) {
1514 iofs = i - nu->
pntsu;
1515 bp = nu->
bp + nu->
pntsu * jofs + iofs;
1522 *fp = basisu[i] * basis[j] * bp->
vec[3];
1526 *fp = basisu[i] * basis[j];
1533 for (j = jsta; j <= jen; j++) {
1534 for (i = istart; i <= iend; i++, fp++) {
1544 for (j = jsta; j <= jen; j++) {
1546 if (j >= nu->
pntsv) {
1547 jofs = (j - nu->
pntsv);
1552 bp = nu->
bp + nu->
pntsu * jofs + istart - 1;
1554 for (i = istart; i <= iend; i++, fp++) {
1555 if (i >= nu->
pntsu) {
1556 iofs = i - nu->
pntsu;
1557 bp = nu->
bp + nu->
pntsu * jofs + iofs;
1573 if (rowstride != 0) {
1574 in = (
float *)(((
unsigned char *)in) + (rowstride - 3 * totv *
sizeof(*in)));
1594 float *radius_array,
1595 float *weight_array,
1599 const float eps = 1e-6f;
1601 float u, ustart, uend, ustep, sumdiv;
1602 float *basisu, *
sum, *fp;
1603 float *coord_fp = coord_array, *tilt_fp = tilt_array, *radius_fp = radius_array,
1604 *weight_fp = weight_array;
1605 int i,
len, istart, iend, cycl;
1613 if (coord_array ==
NULL) {
1632 ustart = fp[nu->
orderu - 1];
1637 uend = fp[nu->
pntsu];
1657 bp = nu->
bp + istart - 1;
1658 for (i = istart; i <= iend; i++, fp++) {
1659 if (i >= nu->
pntsu) {
1660 bp = nu->
bp + (i - nu->
pntsu);
1666 *fp = basisu[i] * bp->
vec[3];
1669 if ((sumdiv != 0.0f) && (sumdiv < 1.0f -
eps || sumdiv > 1.0f +
eps)) {
1672 for (i = istart; i <= iend; i++, fp++) {
1681 bp = nu->
bp + istart - 1;
1682 for (i = istart; i <= iend; i++, fp++) {
1683 if (i >= nu->
pntsu) {
1684 bp = nu->
bp + (i - nu->
pntsu);
1694 (*tilt_fp) += (*fp) * bp->
tilt;
1698 (*radius_fp) += (*fp) * bp->
radius;
1702 (*weight_fp) += (*fp) * bp->
weight;
1731 const unsigned int resolu,
1732 const bool is_cyclic,
1733 const bool use_cyclic_duplicate_endpoint)
1735 const unsigned int segments = bezt_array_len - (is_cyclic ? 0 : 1);
1736 const unsigned int points_len = (segments * resolu) +
1737 (is_cyclic ? (use_cyclic_duplicate_endpoint) : 1);
1748 const unsigned int bezt_array_len,
1749 const unsigned int resolu,
1750 const bool is_cyclic,
1751 const bool use_cyclic_duplicate_endpoint,
1753 const unsigned int axis,
1754 const unsigned int stride,
1758 bezt_array_len, resolu, is_cyclic, use_cyclic_duplicate_endpoint);
1759 float *r_points_offset = r_points;
1761 const unsigned int resolu_stride = resolu *
stride;
1762 const unsigned int bezt_array_last = bezt_array_len - 1;
1764 for (
unsigned int i = 0; i < bezt_array_last; i++) {
1765 const BezTriple *bezt_curr = &bezt_array[i];
1766 const BezTriple *bezt_next = &bezt_array[i + 1];
1768 bezt_curr->
vec[2][axis],
1769 bezt_next->
vec[0][axis],
1770 bezt_next->
vec[1][axis],
1774 r_points_offset =
POINTER_OFFSET(r_points_offset, resolu_stride);
1778 const BezTriple *bezt_curr = &bezt_array[bezt_array_last];
1779 const BezTriple *bezt_next = &bezt_array[0];
1781 bezt_curr->
vec[2][axis],
1782 bezt_next->
vec[0][axis],
1783 bezt_next->
vec[1][axis],
1787 r_points_offset =
POINTER_OFFSET(r_points_offset, resolu_stride);
1788 if (use_cyclic_duplicate_endpoint) {
1789 *r_points_offset = *r_points;
1794 float *r_points_last =
POINTER_OFFSET(r_points, bezt_array_last * resolu_stride);
1795 *r_points_last = bezt_array[bezt_array_last].
vec[1][axis];
1805 float q0,
float q1,
float q2,
float q3,
float *p,
int it,
int stride)
1807 float rt0, rt1, rt2, rt3, f;
1812 rt1 = 3.0f * (
q1 - q0) / f;
1814 rt2 = 3.0f * (q0 - 2.0f *
q1 + q2) / f;
1816 rt3 = (q3 - q0 + 3.0f * (
q1 - q2)) / f;
1819 q1 = rt1 + rt2 + rt3;
1820 q2 = 2 * rt2 + 6 * rt3;
1823 for (
a = 0;
a <= it;
a++) {
1834 float q0,
float q1,
float q2,
float q3,
float *p,
int it,
int stride)
1836 float rt0, rt1, rt2, f;
1839 f = 1.0f / (
float)it;
1841 rt0 = 3.0f * (
q1 - q0);
1842 rt1 = f * (3.0f * (q3 - q0) + 9.0f * (
q1 - q2));
1843 rt2 = 6.0f * (q0 + q2) - 12.0f *
q1;
1846 q1 = f * (rt1 + rt2);
1847 q2 = 2.0f * f * rt1;
1849 for (
a = 0;
a <= it;
a++) {
1869 for (
int a = 0;
a <= it;
a++) {
1870 float t = (
float)
a / (
float)it;
1872 for (
int i = 0; i < 3; i++) {
1873 p[i] = (-6.0f *
t + 6.0f) * p0[i] + (18.0f *
t - 12.0f) * p1[i] +
1874 (-18.0f *
t + 6.0f) * p2[i] + (6.0f *
t) * p3[i];
1899 deler = (
v1[cox] -
v2[cox]) * (v3[coy] - v4[coy]) - (v3[cox] - v4[cox]) * (
v1[coy] -
v2[coy]);
1900 if (deler == 0.0f) {
1904 *lambda = (
v1[coy] - v3[coy]) * (v3[cox] - v4[cox]) - (
v1[cox] - v3[cox]) * (v3[coy] - v4[coy]);
1905 *lambda = -(*lambda / deler);
1907 deler = v3[coy] - v4[coy];
1909 deler = v3[cox] - v4[cox];
1910 *mu = -(*lambda * (
v2[cox] -
v1[cox]) +
v1[cox] - v3[cox]) / deler;
1913 *mu = -(*lambda * (
v2[coy] -
v1[coy]) +
v1[coy] - v3[coy]) / deler;
1915 vec[cox] = *lambda * (
v2[cox] -
v1[cox]) +
v1[cox];
1916 vec[coy] = *lambda * (
v2[coy] -
v1[coy]) +
v1[coy];
1918 if (*lambda >= 0.0f && *lambda <= 1.0f && *mu >= 0.0f && *mu <= 1.0f) {
1919 if (*lambda == 0.0f || *lambda == 1.0f || *mu == 0.0f || *mu == 1.0f) {
1932 float min,
max, vec[3], hvec1[3], hvec2[3], lab, mu;
1933 int nr, links = 0, rechts = 0, mode;
1938 hvec1[0] = bevp->
vec[0];
1939 hvec1[1] = bevp->
vec[1];
1949 prevbevp = bevp + (nr - 1);
1959 if (
min <= hvec1[1] &&
max >= hvec1[1]) {
1961 mode =
cu_isectLL(prevbevp->
vec, bevp->
vec, hvec1, hvec2, 0, 1, &lab, &mu, vec);
1965 if (mode >= 0 && lab != 0.0f) {
1966 if (vec[0] < hvec1[0]) {
1979 return (links & 1) && (rechts & 1);
1992 if (x1->
left >
x2->left) {
1995 if (x1->
left <
x2->left) {
2004 float x1,
float y1,
float x2,
float y2,
float *r_sina,
float *r_cosa)
2006 float t01, t02, x3, y3;
2022 t02 = x1 *
x2 +
y1 * y2;
2023 if (
fabsf(t02) >= 1.0f) {
2027 t02 = (
saacos(t02)) / 2.0f;
2037 if (x3 == 0 && y3 == 0) {
2042 t01 =
sqrtf(x3 * x3 + y3 * y3);
2047 *r_sina = -y3 / t02;
2055 float *radius_array,
2056 float *weight_array,
2061 float fac, dfac,
t[4];
2064 if (tilt_array ==
NULL && radius_array ==
NULL) {
2071 if (prevbezt == nu->
bezt) {
2080 pprev = prevbezt - 1;
2097 dfac = 1.0f / (
float)resolu;
2099 for (
a = 0;
a < resolu;
a++, fac += dfac) {
2103 *tilt_array = prevbezt->
tilt +
2104 (bezt->
tilt - prevbezt->
tilt) * (3.0f * fac * fac - 2.0f * fac * fac * fac);
2108 *tilt_array =
t[0] * pprev->
tilt +
t[1] * prevbezt->
tilt +
t[2] * bezt->
tilt +
2121 (3.0f * fac * fac - 2.0f * fac * fac * fac);
2130 t[3] *
next->radius;
2139 (3.0f * fac * fac - 2.0f * fac * fac * fac);
2154 bool is_cyclic =
bl->
poly != -1;
2158 bevp1 = bevp2 + (
bl->
nr - 1);
2192 if (is_cyclic ==
false) {
2218 bevp1 = bevp2 + (
bl->
nr - 1);
2240 bevp1 = bevp2 + (
bl->
nr - 1);
2259 float bevp0_quat[4];
2264 bevp1 = bevp2 + (
bl->
nr - 1);
2286 float zaxis[3] = {0, 0, 1},
cross[3], q2[4];
2345 bevp1 = bevp2 + (
bl->
nr - 1);
2351 if (nr + 3 >
bl->
nr) {
2376 float vec_1[3] = {0, 1, 0}, vec_2[3] = {0, 1, 0},
angle, ang_fac, cross_tmp[3];
2382 bevp_first +=
bl->
nr - 1;
2383 bevp_last = bevp_first;
2411 bevp1 = bevp2 + (
bl->
nr - 1);
2437 bevp1 = bevp2 + (
bl->
nr - 1);
2455 bevp1 = bevp2 + (
bl->
nr - 1);
2472 bevp1 = bevp2 + (
bl->
nr - 1);
2481 const float zero[3] = {0, 0, 0};
2495 switch (twist_mode) {
2544 const float x1 = bevp1->
vec[0] - bevp2->
vec[0];
2545 const float y1 = bevp1->
vec[1] - bevp2->
vec[1];
2565 bevp1 = bevp2 + (
bl->
nr - 1);
2578 const float x1 = bevp1->
vec[0] - bevp0->
vec[0];
2579 const float x2 = bevp1->
vec[0] - bevp2->
vec[0];
2580 const float y1 = bevp1->
vec[1] - bevp0->
vec[1];
2581 const float y2 = bevp1->
vec[1] - bevp2->
vec[1];
2610 bevp += (
bl->
nr - 1);
2620 if (nu->
pntsu > 1) {
2625 last_bevp = first_bevp + (
bl->
nr - 1);
2668 const float threshold = 0.00001f;
2670 float *seglen =
NULL;
2672 int a, b, nr, poly, resolu = 0,
len = 0, segcount;
2674 bool do_tilt, do_radius, do_weight;
2675 bool is_editmode =
false;
2679 const bool need_seglen =
ELEM(
2699 if (nu->hide && is_editmode) {
2729 resolu = nu->resolu;
2760 if (seglen !=
NULL &&
len != 0) {
2764 if (*seglen > threshold) {
2784 len = segcount * resolu + 1;
2802 if (seglen !=
NULL) {
2811 prevbezt = nu->bezt + (nu->pntsu - 1);
2834 if (seglen !=
NULL) {
2839 if (bevp->
offset > threshold) {
2850 for (j = 0; j < 3; j++) {
2852 prevbezt->
vec[2][j],
2881 if (seglen !=
NULL) {
2884 for (j = 0; j < resolu; j++) {
2889 if (bevp->
offset > threshold) {
2919 if (nu->pntsv == 1) {
2920 len = (resolu * segcount);
2947 if (seglen !=
NULL) {
2956 for (j = 0; j < ((nr == 1) ? (resolu - 1) : resolu); j++) {
2958 if (bevp->
offset > threshold) {
2985 const float threshold_resolu = 0.00001f / resolu;
2986 bool is_cyclic =
bl->
poly != -1;
2990 bevp0 = bevp1 + (nr - 1);
2999 if (seglen !=
NULL) {
3007 bevp0->dupe_tag =
true;
3038 if (bevp0->dupe_tag == 0) {
3039 memcpy(bevp1, bevp0,
sizeof(
BevPoint));
3074 if (
min > bevp->
vec[0]) {
3084 if (bevp1 == bevp) {
3085 bevp0 = bevp + (
bl->
nr - 1);
3090 bevp = bevp + (
bl->
nr - 1);
3091 if (bevp1 == bevp) {
3098 inp = ((bevp1->
vec[0] - bevp0->vec[0]) * (bevp0->vec[1] - bevp2->
vec[1]) +
3099 (bevp0->vec[1] - bevp1->
vec[1]) * (bevp0->vec[0] - bevp2->
vec[0]));
3114 for (
a = 1;
a < poly;
a++, sd++) {
3116 sd1 = sortdata + (
a - 1);
3117 for (b =
a - 1; b >= 0; b--, sd1--) {
3130 for (
a = 0;
a < poly;
a++, sd++) {
3134 bevp2 = bevp1 + (
bl->
nr - 1);
3155 else if (
bl->
nr == 2) {
3170 else if (
bl->
nr == 2) {
3188 char fcurve_smoothing)
3191 #define p2_h1 ((p2)-3)
3192 #define p2_h2 ((p2) + 3)
3194 const float *p1, *p3;
3197 float dvec_a[3], dvec_b[3];
3198 float len, len_a, len_b;
3200 const float eps = 1
e-5;
3205 if (bezt->
h1 == 0 && bezt->
h2 == 0) {
3213 pt[0] = 2.0f * p2[0] - p3[0];
3214 pt[1] = 2.0f * p2[1] - p3[1];
3215 pt[2] = 2.0f * p2[2] - p3[2];
3223 pt[0] = 2.0f * p2[0] - p1[0];
3224 pt[1] = 2.0f * p2[1] - p1[1];
3225 pt[2] = 2.0f * p2[2] - p1[2];
3244 if (len_a == 0.0f) {
3247 if (len_b == 0.0f) {
3251 len_ratio = len_a / len_b;
3255 tvec[0] = dvec_b[0] / len_b + dvec_a[0] / len_a;
3256 tvec[1] = dvec_b[1] / len_b + dvec_a[1] / len_a;
3257 tvec[2] = dvec_b[2] / len_b + dvec_a[2] / len_a;
3263 len = 6.0f / 2.5614f;
3276 bool leftviolate =
false, rightviolate =
false;
3279 if (len_a > 5.0f * len_b) {
3280 len_a = 5.0f * len_b;
3282 if (len_b > 5.0f * len_a) {
3283 len_b = 5.0f * len_a;
3292 float ydiff1 = prev->
vec[1][1] - bezt->
vec[1][1];
3293 float ydiff2 =
next->vec[1][1] - bezt->
vec[1][1];
3294 if ((ydiff1 <= 0.0f && ydiff2 <= 0.0f) || (ydiff1 >= 0.0f && ydiff2 >= 0.0f)) {
3295 bezt->
vec[0][1] = bezt->
vec[1][1];
3299 if (ydiff1 <= 0.0f) {
3300 if (prev->
vec[1][1] > bezt->
vec[0][1]) {
3301 bezt->
vec[0][1] = prev->
vec[1][1];
3306 if (prev->
vec[1][1] < bezt->
vec[0][1]) {
3307 bezt->
vec[0][1] = prev->
vec[1][1];
3319 float ydiff1 = prev->
vec[1][1] - bezt->
vec[1][1];
3320 float ydiff2 =
next->vec[1][1] - bezt->
vec[1][1];
3321 if ((ydiff1 <= 0.0f && ydiff2 <= 0.0f) || (ydiff1 >= 0.0f && ydiff2 >= 0.0f)) {
3322 bezt->
vec[2][1] = bezt->
vec[1][1];
3326 if (ydiff1 <= 0.0f) {
3327 if (
next->vec[1][1] < bezt->
vec[2][1]) {
3328 bezt->
vec[2][1] =
next->vec[1][1];
3333 if (
next->vec[1][1] > bezt->
vec[2][1]) {
3334 bezt->
vec[2][1] =
next->vec[1][1];
3341 if (leftviolate || rightviolate) {
3344 float h1_x =
p2_h1[0] - p2[0];
3345 float h2_x = p2[0] -
p2_h2[0];
3348 p2_h2[1] = p2[1] + ((p2[1] -
p2_h1[1]) / h1_x) * h2_x;
3351 p2_h1[1] = p2[1] + ((p2[1] -
p2_h2[1]) / h2_x) * h1_x;
3378 if (len_a == 0.0f) {
3381 if (len_b == 0.0f) {
3385 len_ratio = len_a / len_b;
3387 if (bezt->
f1 & handle_sel_flag) {
3390 len = 1.0f / len_ratio;
3416 len = 1.0f / len_ratio;
3436 if (nu->
pntsu < 2) {
3443 prev = bezt + (
a - 1);
3480 size_t num_floats = 0, num_chars = 0;
3482 while (floats && floats[num_floats]) {
3486 while (chars && chars[num_chars]) {
3498 for (
int i = 0; i < num_floats; i++, fptr +=
count) {
3502 char *cptr = (
char *)fptr;
3504 for (
int i = 0; i < num_chars; i++, cptr +=
count) {
3529 return -
state * b[i];
3564 float *a0, *b0, *c0, *d0;
3565 float **
arrays[] = {&a0, &b0, &c0, &d0,
NULL};
3566 char *is_locked, *num_unlocks;
3567 char **flagarrays[] = {&is_locked, &num_unlocks,
NULL};
3574 memcpy(a0,
a,
sizeof(
float) * solve_count);
3575 memcpy(b0, b,
sizeof(
float) * solve_count);
3576 memcpy(c0,
c,
sizeof(
float) * solve_count);
3577 memcpy(d0, d,
sizeof(
float) * solve_count);
3579 memset(is_locked, 0, solve_count);
3580 memset(num_unlocks, 0, solve_count);
3582 bool overshoot, unlocked;
3591 bool all =
false, locked =
false;
3593 overshoot = unlocked =
false;
3596 for (
int i = 0; i < solve_count; i++) {
3597 if (h[i] >= hmin[i] && h[i] <= hmax[i]) {
3603 float target = h[i] > hmax[i] ? hmax[i] : hmin[i];
3606 if (target != 0.0f ||
all) {
3616 }
while (overshoot && !locked);
3621 for (
int i = 0; i < solve_count; i++) {
3623 if (!is_locked[i] || num_unlocks[i] >= 2) {
3630 if ((relax > 0 && h[i] < hmax[i]) || (relax < 0 && h[i] > hmin[i])) {
3639 }
while (overshoot || unlocked);
3718 float *
a,
float *b,
float *
c,
float *d,
const float *dy,
const float *
l,
int i)
3721 b[i] = 2.0f * (
l[i] + 1);
3722 c[i] = 1.0f /
l[i + 1];
3723 d[i] = dy[i] *
l[i] *
l[i] + dy[i + 1];
3727 float *
a,
float *b,
float *
c,
float *d,
const float *dy,
const float *
l,
int i)
3731 c[i] = 1.0f /
l[i + 1];
3736 float *
a,
float *b,
float *
c,
float *d,
const float *dy,
const float *
l,
int i)
3741 d[i] = dy[i] *
l[i] *
l[i];
3746 float *hmax,
float *hmin,
int i,
float dy,
bool no_reverse,
bool no_overshoot)
3750 hmax[i] =
min_ff(hmax[i], dy);
3761 hmin[i] =
max_ff(hmin[i], dy);
3764 else if (no_reverse || no_overshoot) {
3765 hmax[i] = hmin[i] = 0.0f;
3772 const float newval[3],
3777 int idx =
right ? 2 : 0;
3809 tmp[1] = bezt->
vec[1][1] + dy;
3823 float fac = dx / (hsize[0] + dx / 3.0f);
3827 return 1.0f - 3.0f * hsize[0] / dx;
3833 float *dx, *dy, *
l, *
a, *b, *
c, *d, *h, *hmax, *hmin;
3834 float **
arrays[] = {&dx, &dy, &
l, &
a, &b, &
c, &d, &h, &hmax, &hmin,
NULL};
3836 int solve_count =
count;
3847 bool full_cycle = (start == 0 &&
count == total && cycle);
3851 &bezt[(start +
count > total) ? start +
count - total : start +
count - 1];
3855 bezt_last, bezt_last->
h1, start +
count == total);
3857 if (
count == 2 && !full_cycle && solve_first == solve_last) {
3872 for (
int i = 1, j = start + 1; i <
count; i++, j++) {
3873 dx[i] = bezt[j].
vec[1][0] - bezt[j - 1].
vec[1][0];
3874 dy[i] = bezt[j].
vec[1][1] - bezt[j - 1].
vec[1][1];
3877 if (cycle && j == total - 1) {
3885 dx[0] = dx[
count - 1];
3886 dy[0] = dy[
count - 1];
3888 l[0] =
l[
count - 1] = dx[1] / dx[0];
3894 for (
int i = 1; i <
count - 1; i++) {
3895 l[i] = dx[i + 1] / dx[i];
3902 for (
int i = 0; i <
count; i++) {
3907 for (
int i = 1, j = start + 1; i <
count; i++, j++) {
3908 clamped_prev = clamped_cur;
3911 if (cycle && j == total - 1) {
3916 bezier_clamp(hmax, hmin, i - 1, dy[i], clamped_prev, clamped_prev);
3917 bezier_clamp(hmax, hmin, i, dy[i] *
l[i], clamped_cur, clamped_cur);
3922 float first_handle_adj = 0.0f, last_handle_adj = 0.0f;
3926 int i = solve_count =
count - 1;
3928 hmin[0] =
max_ff(hmin[0], hmin[i]);
3929 hmax[0] =
min_ff(hmax[0], hmax[i]);
3931 solve_first = solve_last =
true;
3962 for (
int i = 1; i <
count - 1; i++) {
3969 if (
count > 2 || solve_last) {
3970 b[1] +=
l[1] * first_handle_adj;
3973 if (
count > 2 || solve_first) {
3974 b[
count - 2] += last_handle_adj;
3982 h[
count - 1] = h[0];
3985 for (
int i = 1, j = start + 1; i <
count - 1; i++, j++) {
3986 bool end = (j == total - 1);
4022 int search_base = 0;
4025 for (
int i = 1; i < total - 1; i++) {
4033 if (search_base == 0) {
4041 int start = search_base,
count = 1;
4043 for (
int i = 1, j = start + 1; i < total; i++, j++) {
4045 if (j == total - 1 && cyclic) {
4086 const bool is_fcurve,
4087 const char smoothing)
4106 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
4126 if (nu->
pntsu > 1) {
4135 if (nu->
pntsu > 1) {
4136 const char h1_back = bezt->
h1, h2_back = bezt->
h2;
4163 const bool use_handle,
4164 const bool use_around_local)
4168 #define SEL_F1 (1 << 0)
4169 #define SEL_F2 (1 << 1)
4170 #define SEL_F3 (1 << 2)
4173 if (bezt->
f1 & sel_flag) {
4176 if (bezt->
f2 & sel_flag) {
4179 if (bezt->
f3 & sel_flag) {
4187 if (use_around_local) {
4239 const float eps = 0.0001f;
4240 const float eps_sq =
eps *
eps;
4252 bool align =
false, leftsmall =
false, rightsmall =
false;
4255 if (flag == 0 || (bezt1->
f1 & flag)) {
4275 if (flag == 0 || (bezt1->
f3 & flag)) {
4351 if (bezt->
h1 != bezt->
h2) {
4375 else if (code == 6) {
4419 const bool calc_length,
4430 bool changed =
false;
4432 for (
a = nu->pntsu, bezt = nu->bezt;
a--; bezt++) {
4434 const bool h1_select = (bezt->
f1 & flag) == flag;
4435 const bool h2_select = (bezt->
f3 & flag) == flag;
4437 if (h1_select || h2_select) {
4439 float co1_back[3], co2_back[3];
4500 a = nu->pntsu * nu->pntsv;
4515 bool changed =
false;
4519 for (
int i = 0; i < nu->pntsu; i++) {
4521 uint8_t old_f1 = bezt->
f1, old_f2 = bezt->
f2, old_f3 = bezt->
f3;
4527 changed |= (old_f1 != bezt->
f1) || (old_f2 != bezt->
f2) || (old_f3 != bezt->
f3);
4531 for (
int i = 0; i < nu->pntsu * nu->pntsv; i++) {
4536 changed |= (old_f1 != bp->
f1);
4548 float *fp1, *fp2, *tempf;
4558 bezt2 = bezt1 + (
a - 1);
4564 if (bezt1 != bezt2) {
4570 if (bezt1 != bezt2) {
4577 if (bezt1 != bezt2) {
4591 else if (nu->
pntsv == 1) {
4594 bp2 = bp1 + (
a - 1);
4596 while (bp1 != bp2 &&
a > 0) {
4607 if (nu->
pntsu & 1) {
4616 fp2 = fp1 + (
a - 1);
4618 while (fp1 != fp2 &&
a > 0) {
4619 SWAP(
float, *fp1, *fp2);
4631 fp2[0] =
fabsf(fp1[1] - fp1[0]);
4642 fp1[0] = fp1[-1] + fp2[0];
4651 for (b = 0; b < nu->
pntsv; b++) {
4654 bp2 = bp1 + (
a - 1);
4657 while (bp1 != bp2 &&
a > 0) {
4669 float *co = vert_coords[0];
4673 for (
int i = 0; i < nu->pntsu; i++, bezt++) {
4683 const BPoint *bp = nu->bp;
4684 for (
int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
4699 *r_vert_len = vert_len;
4704 const float (*vert_coords)[3],
4705 const float mat[4][4],
4706 const bool constrain_2d)
4708 const float *co = vert_coords[0];
4714 for (
int i = 0; i < nu->pntsu; i++, bezt++) {
4726 for (
int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
4741 const float (*vert_coords)[3],
4742 const bool constrain_2d)
4744 const float *co = vert_coords[0];
4750 for (
int i = 0; i < nu->pntsu; i++, bezt++) {
4762 for (
int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
4786 for (
int i = 0; i < nu->pntsu; i++, bezt++) {
4797 const BPoint *bp = nu->bp;
4799 for (
int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
4806 *r_vert_len = vert_len;
4816 for (
int i = 0; i < nu->pntsu; i++, bezt++) {
4817 bezt->
tilt = key[9];
4825 for (
int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
4836 if (nu->
pntsu <= 1) {
4849 if (nu->
pntsu < 5) {
4863 if (nu->
pntsv <= 1) {
4876 if (nu->
pntsv < 5) {
4903 bool changed =
false;
4917 bool changed =
false;
4934 const bool use_handles,
4935 const char **r_err_msg)
4950 bezt->
f1 = bezt->
f2 = bezt->
f3 = bp->
f1;
4979 nr = use_handles ? (3 * nu->
pntsu) : nu->
pntsu;
4986 (use_handles ==
false)) {
5000 for (
c = 0;
c < 3;
c++, f++) {
5042 if (r_err_msg !=
NULL) {
5043 *r_err_msg =
"At least 6 points required for conversion";
5170 return (*r_vert !=
NULL);
5210 nurb_lb = &temp_nurb_lb;
5238 for (bezt = nu->bezt; i--; bezt++) {
5246 i = nu->pntsu * nu->pntsv;
5248 for (bp = nu->bp; i--; bp++) {
5258 return (total != 0);
5274 const float mat[4][4],
5276 const bool do_props,
5277 const float unit_scale)
5286 for (bezt = nu->bezt; i--; bezt++) {
5291 bezt->
radius *= unit_scale;
5297 i = nu->pntsu * nu->pntsv;
5298 for (bp = nu->bp; i--; bp++) {
5301 bp->
radius *= unit_scale;
5307 if (do_keys && cu->
key) {
5309 float *fp = kb->data;
5310 int n = kb->totelem;
5319 fp[10] *= unit_scale;
5328 fp[4] *= unit_scale;
5351 for (
BezTriple *bezt = nu->bezt; i--; bezt++) {
5358 int i = nu->pntsu * nu->pntsv;
5359 for (
BPoint *bp = nu->bp; i--; bp++) {
5365 if (do_keys && cu->
key) {
5367 float *fp = kb->data;
5368 int n = kb->totelem;
5396 for (
int i = cu->
len_char32 - 1; i >= 0; i--, info++) {
5404 if (nu->mat_nr && nu->mat_nr >= index) {
5417 for (
int i = cu->
len_char32 - 1; i >= 0; i--, info++) {
5418 if (info->
mat_nr == index) {
5425 if (nu->mat_nr == index) {
5440 for (
int i = cu->
len_char32 - 1; i >= 0; i--, info++) {
5460 for (i = cu->
len_char32 - 1; i >= 0; i--, info++) {
5461 if (info->
mat_nr > max_idx) {
5470 if (nu->mat_nr > max_idx) {
5487 const short remap_len_short = (short)remap_len;
5489 #define MAT_NR_REMAP(n) \
5490 if (n < remap_len_short) { \
5491 BLI_assert(n >= 0 && remap[n] < remap_len_short); \
5498 int charinfo_len, i;
5503 charinfo_len = ef->
len;
5510 for (i = 0; i <= charinfo_len; i++) {
5511 if (strinfo[i].
mat_nr > 0) {
5523 for (nu = nurbs->
first; nu; nu = nu->
next) {
5548 struct rctf *r_rect)
5561 float h1[2], h2[2], len1, len2,
len, fac;
5564 h1[0] =
v1[0] -
v2[0];
5565 h1[1] =
v1[1] -
v2[1];
5567 h2[0] = v4[0] - v3[0];
5568 h2[1] = v4[1] - v3[1];
5575 len = v4[0] -
v1[0];
5576 len1 =
fabsf(h1[0]);
5577 len2 =
fabsf(h2[0]);
5580 if ((len1 + len2) == 0.0f) {
5587 if ((len1 + len2) >
len) {
5588 fac =
len / (len1 + len2);
5590 v2[0] = (
v1[0] - fac * h1[0]);
5591 v2[1] = (
v1[1] - fac * h1[1]);
5593 v3[0] = (v4[0] - fac * h2[0]);
5594 v3[1] = (v4[1] - fac * h2[1]);
typedef float(TangentPoint)[2]
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
#define CU_DO_RADIUS(cu, nu)
int eBezTriple_Flag__Alias
void BKE_curveprofile_blend_read(struct BlendDataReader *reader, struct CurveProfile *profile)
struct CurveProfile * BKE_curveprofile_copy(const struct CurveProfile *profile)
void BKE_curveprofile_blend_write(struct BlendWriter *writer, const struct CurveProfile *profile)
void BKE_curveprofile_free(struct CurveProfile *profile)
display list (or rather multi purpose list) stuff.
struct VFont * BKE_vfont_builtin_get(void)
bool BKE_vfont_to_curve_ex(struct Object *ob, struct Curve *cu, int mode, struct ListBase *r_nubase, const char32_t **r_text, int *r_text_len, bool *r_text_free, struct CharTrans **r_chartransdata)
void key_curve_position_weights(float t, float data[4], int type)
void * BKE_libblock_alloc(struct Main *bmain, short type, const char *name, const int flag) ATTR_WARN_UNUSED_RESULT
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
#define BKE_LIB_FOREACHID_PROCESS(_data, _id_super, _cb_flag)
General operations, lookup, etc. for blender objects.
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
void BLI_endian_switch_float_array(float *val, const int size) ATTR_NONNULL(1)
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float saacos(float fac)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE int mod_i(int i, int n)
float dist_squared_to_line_v3(const float p[3], const float l1[3], const float l2[3])
void mul_m4_v3(const float M[4][4], float r[3])
float mat4_to_scale(const float M[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
float tri_to_quat(float q[4], const float a[3], const float b[3], const float c[3])
void axis_angle_to_quat(float r[4], const float axis[3], const float angle)
float normalize_qt(float q[4])
void mul_qt_v3(const float q[4], float r[3])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
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 vec_to_quat(float q[4], const float vec[3], short axis, const short upflag)
bool BLI_tridiagonal_solve_cyclic(const float *a, const float *b, const float *c, const float *d, float *r_x, const int count)
Solve a possibly cyclic tridiagonal system using the Sherman-Morrison formula.
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE bool compare_v3v3(const float a[3], const float b[3], const float limit) ATTR_WARN_UNUSED_RESULT
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 mul_v2_fl(float r[2], float f)
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void swap_v3_v3(float a[3], float b[3])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE void zero_v3(float r[3])
void dist_ensure_v3_v3fl(float v1[3], const float v2[3], const float dist)
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])
void bisect_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
#define INIT_MINMAX(min, max)
#define ARRAY_HAS_ITEM(arr_item, arr_start, arr_len)
#define UNUSED_VARS_NDEBUG(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define POINTER_OFFSET(v, ofs)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_read_data_address(reader, ptr_p)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
void BLO_write_float_array(BlendWriter *writer, uint num, const float *data_ptr)
#define BLO_read_id_address(reader, lib, id_ptr_p)
#define BLO_write_struct_array(writer, struct_name, array_size, data_ptr)
#define BLO_expand(expander, id)
bool BLO_read_requires_endian_switch(BlendDataReader *reader)
void BLO_write_raw(BlendWriter *writer, size_t size_in_bytes, const void *data_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p)
bool BLO_write_is_undo(BlendWriter *writer)
void BLO_write_pointer_array(BlendWriter *writer, uint num, const void *data_ptr)
#define BLT_I18NCONTEXT_ID_CURVE
#define CLOG_ERROR(clg_ref,...)
struct Depsgraph Depsgraph
bool DEG_is_active(const struct Depsgraph *depsgraph)
void DEG_debug_print_eval(struct Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address)
void DEG_id_tag_update(struct ID *id, int flag)
struct ID * DEG_get_original_id(struct ID *id)
#define BEZT_IS_AUTOH(bezt)
#define BEZT_ISSEL_ANY(bezt)
@ HD_AUTOTYPE_LOCKED_FINAL
#define DNA_struct_default_get(struct_name)
#define KEYELEM_ELEM_LEN_BPOINT
#define KEYELEM_FLOAT_LEN_BEZTRIPLE
#define KEYELEM_FLOAT_LEN_BPOINT
#define KEYELEM_ELEM_LEN_BEZTRIPLE
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 y1
_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 x2
_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 right
_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 i1
_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 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 t
_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 order
_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.
#define MEM_recallocN(vmemh, len)
static void smooth_iter(CorrectiveSmoothModifierData *csmd, Mesh *mesh, float(*vertexCos)[3], uint numVerts, const float *smooth_weights, uint iterations)
static void init_data(ModifierData *md)
Group RGB to Bright Vector Camera CLAMP
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
static T sum(const btAlignedObjectArray< T > &items)
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
void BKE_nurb_handles_autocalc(Nurb *nu, uint8_t flag)
static void bevel_list_flip_tangents(BevList *bl)
static void makeknots(Nurb *nu, short uv)
void BKE_nurb_handle_calc_simple_auto(Nurb *nu, BezTriple *bezt)
bool BKE_nurbList_flag_set_from_flag(ListBase *editnurb, uint8_t from_flag, uint8_t flag)
static void basisNurb(float t, short order, int pnts, const float *knots, float *basis, int *start, int *end)
void BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_size[3])
void BKE_nurb_handle_calc_simple(Nurb *nu, BezTriple *bezt)
void BKE_curve_batch_cache_dirty_tag(Curve *cu, int mode)
void BKE_nurb_index_to_uv(Nurb *nu, int index, int *r_u, int *r_v)
void BKE_nurb_handles_calc(Nurb *nu)
Nurb * BKE_nurb_copy(Nurb *src, int pntsu, int pntsv)
static void bezier_eq_noaccel_left(float *a, float *b, float *c, float *d, const float *dy, const float *l, int i)
void BKE_curve_translate(Curve *cu, const float offset[3], const bool do_keys)
static void nurbList_handles_swap_select(Nurb *nu)
BPoint * BKE_nurb_bpoint_get_next(Nurb *nu, BPoint *bp)
void BKE_curve_rect_from_textbox(const struct Curve *cu, const struct TextBox *tb, struct rctf *r_rect)
static void make_bevel_list_segment_2D(BevList *bl)
void BKE_curve_editNurb_free(Curve *cu)
static void * allocate_arrays(int count, float ***floats, char ***chars, const char *name)
bool BKE_curve_center_median(Curve *cu, float cent[3])
void BKE_nurb_makeFaces(const Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv)
static void curve_editNurb_keyIndex_cv_free_cb(void *val)
void BKE_curve_smooth_flag_set(Curve *cu, const bool use_smooth)
void BKE_curve_correct_bezpart(const float v1[2], float v2[2], float v3[2], const float v4[2])
static bool bevelinside(const BevList *bl1, const BevList *bl2)
void BKE_nurb_project_2d(Nurb *nu)
static void bevel_list_calc_bisect(BevList *bl)
void BKE_curve_texspace_ensure(Curve *cu)
bool BKE_nurb_order_clamp_u(struct Nurb *nu)
static void curve_init_data(ID *id)
static void free_arrays(void *buffer)
static void makecyclicknots(float *knots, int pnts, short order)
void BKE_nurbList_handles_autocalc(ListBase *editnurb, uint8_t flag)
void BKE_curve_material_remap(Curve *cu, const unsigned int *remap, unsigned int remap_len)
static void make_bevel_list_3D_minimum_twist(BevList *bl)
void BKE_nurb_minmax(const Nurb *nu, bool use_radius, float min[3], float max[3])
static void curve_blend_read_data(BlendDataReader *reader, ID *id)
static void curve_foreach_id(ID *id, LibraryForeachIDData *data)
void BKE_curve_transform_ex(Curve *cu, const float mat[4][4], const bool do_keys, const bool do_props, const float unit_scale)
void BKE_nurb_handles_test(Nurb *nu, const bool use_handle, const bool use_around_local)
static void curve_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
static void forward_diff_bezier_cotangent(const float p0[3], const float p1[3], const float p2[3], const float p3[3], float p[3], int it, int stride)
static void bevel_list_smooth(BevList *bl, int smooth_iter)
void BKE_nurb_free(Nurb *nu)
void BKE_curve_nurbs_vert_coords_apply_with_mat4(ListBase *lb, const float(*vert_coords)[3], const float mat[4][4], const bool constrain_2d)
void BKE_curve_init(Curve *cu, const short curve_type)
static void make_bevel_list_segment_3D(BevList *bl)
Nurb * BKE_curve_nurb_active_get(Curve *cu)
static void curve_blend_read_lib(BlendLibReader *reader, ID *id)
void BKE_curve_type_test(Object *ob)
static void make_bevel_list_3D_tangent(BevList *bl)
void BKE_curve_bevelList_free(ListBase *bev)
void BKE_curve_bevelList_make(Object *ob, ListBase *nurbs, bool for_render)
void BKE_curve_nurb_active_set(Curve *cu, const Nurb *nu)
static int vergxcobev(const void *a1, const void *a2)
void BKE_curve_texspace_calc(Curve *cu)
static void make_bevel_list_2D(BevList *bl)
static bool is_free_auto_point(BezTriple *bezt)
void BKE_nurb_bpoint_calc_plane(struct Nurb *nu, BPoint *bp, float r_plane[3])
Curve * BKE_curve_add(Main *bmain, const char *name, int type)
bool BKE_nurb_check_valid_uv(const Nurb *nu)
void(* BKE_curve_batch_cache_free_cb)(Curve *cu)
void BKE_curve_batch_cache_free(Curve *cu)
void BKE_nurb_makeCurve(const Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride)
float BKE_nurb_calc_length(const Nurb *nu, int resolution)
void BKE_curve_transform(Curve *cu, const float mat[4][4], const bool do_keys, const bool do_props)
ListBase * BKE_curve_editNurbs_get(Curve *cu)
bool BKE_nurb_type_convert(Nurb *nu, const short type, const bool use_handles, const char **r_err_msg)
void BKE_curve_editNurb_keyIndex_free(GHash **keyindex)
bool BKE_curve_center_bounds(Curve *cu, float cent[3])
static void make_bevel_list_3D_zup(BevList *bl)
void BKE_curve_nurb_vert_active_set(Curve *cu, const Nurb *nu, const void *vert)
static void calchandlesNurb_intern(Nurb *nu, eBezTriple_Flag handle_sel_flag, bool skip_align)
void BKE_nurb_knot_calc_u(Nurb *nu)
void BKE_nurb_handle_smooth_fcurve(BezTriple *bezt, int total, bool cyclic)
static void bevlist_firstlast_direction_calc_from_bpoint(Nurb *nu, BevList *bl)
unsigned int BKE_curve_calc_coords_axis_len(const unsigned int bezt_array_len, const unsigned int resolu, const bool is_cyclic, const bool use_cyclic_duplicate_endpoint)
static float bezier_calc_handle_adj(float hsize[2], float dx)
static void bevel_list_apply_tilt(BevList *bl)
void BKE_curve_nurbs_vert_coords_get(const ListBase *lb, float(*vert_coords)[3], int vert_len)
void BKE_curve_dimension_update(Curve *cu)
void BKE_nurbList_handles_set(ListBase *editnurb, const char code)
void BKE_curve_nurbs_key_vert_tilts_apply(ListBase *lb, const float *key)
void BKE_nurbList_duplicate(ListBase *lb1, const ListBase *lb2)
bool BKE_curve_minmax(Curve *cu, bool use_radius, float min[3], float max[3])
static bool tridiagonal_solve_with_limits(float *a, float *b, float *c, float *d, float *h, const float *hmin, const float *hmax, int solve_count)
void BKE_nurb_handle_calc(BezTriple *bezt, BezTriple *prev, BezTriple *next, const bool is_fcurve, const char smoothing)
void BKE_nurb_bpoint_calc_normal(struct Nurb *nu, BPoint *bp, float r_normal[3])
static void calcknots(float *knots, const int pnts, const short order, const short flag)
static void bezier_lock_unknown(float *a, float *b, float *c, float *d, int i, float value)
static void bezier_handle_calc_smooth_fcurve(BezTriple *bezt, int total, int start, int count, bool cycle)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
static void bezier_eq_noaccel_right(float *a, float *b, float *c, float *d, const float *dy, const float *l, int i)
void BKE_nurbList_free(ListBase *lb)
static void curve_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static void tilt_bezpart(const BezTriple *prevbezt, const BezTriple *bezt, Nurb *nu, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride)
void BKE_curve_editfont_free(Curve *cu)
bool BKE_nurb_check_valid_v(const Nurb *nu)
static void calchandleNurb_intern(BezTriple *bezt, const BezTriple *prev, const BezTriple *next, eBezTriple_Flag handle_sel_flag, bool is_fcurve, bool skip_align, char fcurve_smoothing)
int BKE_nurbList_verts_count(const ListBase *nurb)
void BKE_curve_nurbs_vert_coords_apply(ListBase *lb, const float(*vert_coords)[3], const bool constrain_2d)
void BKE_curve_material_index_remove(Curve *cu, int index)
int BKE_nurb_index_from_uv(Nurb *nu, int u, int v)
void BKE_curve_forward_diff_tangent_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
void BKE_curve_calc_coords_axis(const BezTriple *bezt_array, const unsigned int bezt_array_len, const unsigned int resolu, const bool is_cyclic, const bool use_cyclic_duplicate_endpoint, const unsigned int axis, const unsigned int stride, float *r_points)
static void nurb_handles_calc__align_selected(Nurb *nu)
void BKE_nurb_knot_calc_v(Nurb *nu)
static void make_bevel_list_3D(BevList *bl, int smooth_iter, int twist_mode)
static bool bezier_check_solve_end_handle(BezTriple *bezt, char htype, bool end)
short BKE_curve_type_get(const Curve *cu)
Nurb * BKE_nurb_duplicate(const Nurb *nu)
void BKE_nurb_bezt_handle_test(BezTriple *bezt, const eBezTriple_Flag__Alias sel_flag, const bool use_handle, const bool use_around_local)
void(* BKE_curve_batch_cache_dirty_tag_cb)(Curve *cu, int mode)
bool BKE_curve_material_index_used(const Curve *cu, int index)
BPoint * BKE_nurb_bpoint_get_prev(Nurb *nu, BPoint *bp)
void BKE_nurb_direction_switch(Nurb *nu)
static void curve_blend_read_expand(BlendExpander *expander, ID *id)
void BKE_curve_nurb_vert_active_validate(Curve *cu)
void BKE_curve_material_index_clear(Curve *cu)
BoundBox * BKE_curve_boundbox_get(Object *ob)
void BKE_curve_eval_geometry(Depsgraph *depsgraph, Curve *curve)
bool BKE_curve_nurb_vert_active_get(Curve *cu, Nurb **r_nu, void **r_vert)
bool BKE_nurbList_index_get_co(ListBase *nurb, const int index, float r_co[3])
bool BKE_nurb_check_valid_u(const Nurb *nu)
void BKE_nurb_bezierPoints_add(Nurb *nu, int number)
static float bezier_relax_direction(const float *a, const float *b, const float *c, const float *d, const float *h, int i, int count)
void BKE_nurbList_flag_set(ListBase *editnurb, uint8_t flag, bool set)
static void bezier_output_handle_inner(BezTriple *bezt, bool right, const float newval[3], bool endpoint)
static void curve_free_data(ID *id)
static int cu_isectLL(const float v1[3], const float v2[3], const float v3[3], const float v4[3], short cox, short coy, float *lambda, float *mu, float vec[3])
static void bezier_restore_equation(float *a, float *b, float *c, float *d, const float *a0, const float *b0, const float *c0, const float *d0, int i)
void * BKE_curve_vert_active_get(Curve *cu)
static void minimum_twist_between_two_points(BevPoint *current_point, BevPoint *previous_point)
void BKE_curve_editNurb_keyIndex_delCV(GHash *keyindex, const void *cv)
int BKE_nurbList_verts_count_without_handles(const ListBase *nurb)
BezTriple * BKE_nurb_bezt_get_prev(Nurb *nu, BezTriple *bezt)
static void bezier_output_handle(BezTriple *bezt, bool right, float dy, bool endpoint)
float(* BKE_curve_nurbs_key_vert_coords_alloc(const ListBase *lb, float *key, int *r_vert_len))[3]
bool BKE_nurb_order_clamp_v(struct Nurb *nu)
static void switch_endian_knots(Nurb *nu)
static void calc_bevel_sin_cos(float x1, float y1, float x2, float y2, float *r_sina, float *r_cosa)
void BKE_nurb_bezt_calc_plane(struct Nurb *nu, BezTriple *bezt, float r_plane[3])
int BKE_curve_nurb_vert_index_get(const Nurb *nu, const void *vert)
static void bezier_eq_continuous(float *a, float *b, float *c, float *d, const float *dy, const float *l, int i)
static void bezier_clamp(float *hmax, float *hmin, int i, float dy, bool no_reverse, bool no_overshoot)
void BKE_nurb_bezt_calc_normal(struct Nurb *UNUSED(nu), BezTriple *bezt, float r_normal[3])
float(* BKE_curve_nurbs_vert_coords_alloc(const ListBase *lb, int *r_vert_len))[3]
void BKE_nurb_handle_calc_ex(BezTriple *bezt, BezTriple *prev, BezTriple *next, const eBezTriple_Flag__Alias handle_sel_flag, const bool is_fcurve, const char smoothing)
void BKE_nurbList_handles_recalculate(ListBase *editnurb, const bool calc_length, const uint8_t flag)
BezTriple * BKE_nurb_bezt_get_next(Nurb *nu, BezTriple *bezt)
bool BKE_curve_material_index_validate(Curve *cu)
void BKE_nurb_points_add(Nurb *nu, int number)
ListBase * BKE_curve_nurbs_get(Curve *cu)
const Depsgraph * depsgraph
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
static RawVector< RawArray< int64_t, 0 > > arrays
struct CurveProfile * bevel_profile
struct EditFont * editfont
struct CharInfo * strinfo
struct Object * textoncurve
EditFontSelBox * selboxes
struct CharInfo * textbufinfo
struct CurveCache * curve_cache
__forceinline bool all(const avxb &b)
__forceinline avxf cross(const avxf &a, const avxf &b)