95 bool do_intersection);
100 const double *override_camera_loc,
101 const bool override_cam_is_persp,
102 const bool allow_overlapping_edges,
103 const double vp[4][4],
104 const double *camera_dir,
105 const float cam_shift_x,
106 const float cam_shift_y,
178 for (rls =
e->segments.first; rls; rls = rls->
next) {
180 cut_start_before = rls;
181 ns = cut_start_before;
188 if (irls->
at > start + 1
e-09 && start > rls->
at) {
189 cut_start_before = irls;
197 for (rls = cut_start_before; rls; rls = rls->
next) {
201 cut_end_before = rls;
202 ns2 = cut_end_before;
208 cut_end_before = rls;
209 ns2 = cut_end_before;
215 cut_end_before = rls;
228 cut_end_before = ns2;
235 if (cut_start_before) {
236 if (cut_start_before != ns) {
238 irls = cut_start_before->
prev ? cut_start_before->
prev :
NULL;
248 irls =
e->segments.last;
253 if (cut_end_before) {
255 if (cut_end_before != ns2) {
256 irls = cut_end_before->
prev ? cut_end_before->
prev :
NULL;
257 ns2->occlusion = irls ? irls->
occlusion : 0;
263 irls =
e->segments.last;
281 for (rls = ns; rls && rls != ns2; rls = rls->
next) {
289 for (rls =
e->segments.first; rls; rls = next_rls) {
290 next_rls = rls->
next;
305 e->min_occ = min_occ;
315 return ((
v1->base.flag &&
v1->intersecting_with == rt) ||
316 (
v2->base.flag &&
v2->intersecting_with == rt));
321 double x =
e->v1->fbcoord[0],
y =
e->v1->fbcoord[1];
328 double k = (
e->v2->fbcoord[1] -
e->v1->fbcoord[1]) /
329 (
e->v2->fbcoord[0] -
e->v1->fbcoord[0] + 1
e-30);
330 int positive_x = (
e->v2->fbcoord[0] -
e->v1->fbcoord[0]) > 0 ?
332 (
e->v2->fbcoord[0] ==
e->v1->fbcoord[0] ? 0 : -1);
333 int positive_y = (
e->v2->fbcoord[1] -
e->v1->fbcoord[1]) > 0 ?
335 (
e->v2->fbcoord[1] ==
e->v1->fbcoord[1] ? 0 : -1);
346 rt->testing_e[thread_id] =
e;
380 #define LRT_ASSIGN_OCCLUSION_TASK(name) \
381 if (rb->name##_managed) { \
382 data = rb->name##_managed; \
383 rti->name = (void *)data; \
384 for (i = 0; i < LRT_THREAD_EDGE_COUNT && data; i++) { \
387 rti->name##_end = data; \
388 rb->name##_managed = data; \
401 #undef LRT_ASSIGN_OCCLUSION_TASK
457 for (i = 0; i < thread_count; i++) {
482 cl = (v0[0] -
v[0]) * (
v1[1] -
v[1]) - (v0[1] -
v[1]) * (
v1[0] -
v[0]);
485 cl = (
v1[0] -
v[0]) * (
v2[1] -
v[1]) - (
v1[1] -
v[1]) * (
v2[0] -
v[0]);
492 cl = (
v2[0] -
v[0]) * (v0[1] -
v[1]) - (
v2[1] -
v[1]) * (v0[0] -
v[0]);
499 cl = (v0[0] -
v[0]) * (
v1[1] -
v[1]) - (v0[1] -
v[1]) * (
v1[0] -
v[0]);
510 double c1 = 1, c2 = 0;
516 if (
v1[0] == v0[0] &&
v1[1] == v0[1]) {
523 else if (
v[0] ==
v1[0]) {
525 return (c2 >= 0 && c2 <= 1);
531 else if (
v[1] ==
v1[1]) {
533 return (c1 >= 0 && c1 <= 1);
556 cl = (v0[0] -
v[0]) * (
v1[1] -
v[1]) - (v0[1] -
v[1]) * (
v1[0] -
v[0]);
559 cl = (
v1[0] -
v[0]) * (
v2[1] -
v[1]) - (
v1[1] -
v[1]) * (
v2[0] -
v[0]);
560 if ((
r =
c * cl) < 0) {
566 cl = (
v2[0] -
v[0]) * (v0[1] -
v[1]) - (
v2[1] -
v[1]) * (v0[0] -
v[0]);
567 if ((
r =
c * cl) < 0) {
573 cl = (v0[0] -
v[0]) * (
v1[1] -
v[1]) - (v0[1] -
v[1]) * (
v1[0] -
v[0]);
574 if ((
r =
c * cl) < 0) {
694 rt->
flags |= intersection_only;
699 return ((rt->
v[
v1] ==
e->v1 && rt->
v[
v2] ==
e->v2) ||
700 (rt->
v[
v2] ==
e->v1 && rt->
v[
v1] ==
e->v2));
714 bool allow_boundaries,
724 double vv1[3], vv2[3], dot1, dot2;
726 int v_count = *r_v_count;
727 int e_count = *r_e_count;
728 int t_count = *r_t_count;
752 #define INCREASE_RL \
753 v1_obi = e->v1_obindex; \
754 v2_obi = e->v2_obindex; \
755 new_e = &((LineartEdge *)e_eln->pointer)[e_count]; \
758 e->v1_obindex = v1_obi; \
759 e->v2_obindex = v2_obi; \
760 rls = lineart_mem_aquire(&rb->render_data_pool, sizeof(LineartLineSegment)); \
761 BLI_addtail(&e->segments, rls);
763 #define SELECT_RL(e_num, v1_link, v2_link, newrt) \
764 if (rta->e[e_num]) { \
765 old_e = rta->e[e_num]; \
766 new_flag = old_e->flags; \
767 old_e->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
771 e->flags = new_flag; \
772 e->object_ref = ob; \
773 e->t1 = ((old_e->t1 == rt) ? (newrt) : (old_e->t1)); \
774 e->t2 = ((old_e->t2 == rt) ? (newrt) : (old_e->t2)); \
775 lineart_add_edge_to_list(rb, e); \
778 #define RELINK_RL(e_num, newrt) \
779 if (rta->e[e_num]) { \
780 old_e = rta->e[e_num]; \
781 old_e->t1 = ((old_e->t1 == rt) ? (newrt) : (old_e->t1)); \
782 old_e->t2 = ((old_e->t2 == rt) ? (newrt) : (old_e->t2)); \
785 #define REMOVE_TRIANGLE_RL \
787 rta->e[0]->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
790 rta->e[1]->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
793 rta->e[2]->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
796 switch (in0 + in1 + in2) {
837 a = dot1 / (dot1 + dot2);
841 rv[0].index = rt->
v[2]->
index;
848 a = dot1 / (dot1 + dot2);
852 rv[1].index = rt->
v[1]->
index;
856 if (allow_boundaries) {
876 rt1->
v[0] = rt->
v[0];
890 a = dot1 / (dot1 + dot2);
893 rv[0].index = rt->
v[0]->
index;
899 a = dot1 / (dot1 + dot2);
902 rv[1].index = rt->
v[1]->
index;
905 if (allow_boundaries) {
919 rt1->
v[2] = rt->
v[2];
931 a = dot1 / (dot1 + dot2);
934 rv[0].index = rt->
v[2]->
index;
940 a = dot1 / (dot1 + dot2);
943 rv[1].index = rt->
v[0]->
index;
946 if (allow_boundaries) {
959 rt1->
v[1] = rt->
v[1];
1002 a = dot2 / (dot1 + dot2);
1006 rv[0].index = rt->
v[0]->
index;
1013 a = dot2 / (dot1 + dot2);
1017 rv[1].index = rt->
v[0]->
index;
1021 if (allow_boundaries) {
1038 rt1->
v[0] = rt->
v[1];
1043 rt2->
v[1] = rt->
v[1];
1044 rt2->
v[2] = rt->
v[2];
1058 a = dot1 / (dot1 + dot2);
1061 rv[0].index = rt->
v[1]->
index;
1067 a = dot1 / (dot1 + dot2);
1070 rv[1].index = rt->
v[1]->
index;
1073 if (allow_boundaries) {
1086 rt1->
v[0] = rt->
v[2];
1091 rt2->
v[1] = rt->
v[2];
1092 rt2->
v[2] = rt->
v[0];
1106 a = dot1 / (dot1 + dot2);
1109 rv[0].index = rt->
v[2]->
index;
1115 a = dot1 / (dot1 + dot2);
1118 rv[1].index = rt->
v[2]->
index;
1121 if (allow_boundaries) {
1134 rt1->
v[0] = rt->
v[0];
1139 rt2->
v[1] = rt->
v[0];
1140 rt2->
v[2] = rt->
v[1];
1150 *r_v_count = v_count;
1151 *r_e_count = e_count;
1152 *r_t_count = t_count;
1157 #undef REMOVE_TRIANGLE_RL
1172 int v_count = 0, t_count = 0, e_count = 0;
1177 double view_dir[3], clip_advance[3];
1202 #define LRT_CULL_ENSURE_MEMORY \
1203 if (v_count > 60) { \
1204 v_eln->element_count = v_count; \
1205 v_eln = lineart_memory_get_vert_space(rb); \
1208 if (t_count > 60) { \
1209 t_eln->element_count = t_count; \
1210 t_eln = lineart_memory_get_triangle_space(rb); \
1213 if (e_count > 60) { \
1214 e_eln->element_count = e_count; \
1215 e_eln = lineart_memory_get_edge_space(rb); \
1219 #define LRT_CULL_DECIDE_INSIDE \
1221 in0 = 0, in1 = 0, in2 = 0; \
1224 if (rt->v[0]->fbcoord[use_w] > clip_end) { \
1227 if (rt->v[1]->fbcoord[use_w] > clip_end) { \
1230 if (rt->v[2]->fbcoord[use_w] > clip_end) { \
1236 if (rt->v[0]->fbcoord[use_w] < clip_start) { \
1239 if (rt->v[1]->fbcoord[use_w] < clip_start) { \
1242 if (rt->v[2]->fbcoord[use_w] < clip_start) { \
1248 int in0 = 0, in1 = 0, in2 = 0;
1261 ob = reln->object_ref;
1262 for (i = 0; i < reln->element_count; i++) {
1289 #undef LRT_CULL_ENSURE_MEMORY
1290 #undef LRT_CULL_DECIDE_INSIDE
1306 for (i = 0; i < reln->element_count; i++) {
1326 for (i = 0; i < reln->element_count; i++) {
1362 char *b = (
char *)rt_array;
1371 float crease_threshold,
1373 bool count_freestyle,
1374 BMesh *bm_if_freestyle)
1379 lr =
e->l->radial_next;
1382 if (ll == lr || !lr) {
1396 double *view_vector = vv;
1397 double dot_1 = 0, dot_2 = 0;
1411 if ((
result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
1470 double (*mv_mat)[4],
1471 double (*mvp_mat)[4],
1484 double new_mvp[4][4], new_mv[4][4],
normal[4][4];
1491 int CanFindFreestyle = 0;
1492 int i, global_i = (*global_vindex);
1494 float use_crease = 0;
1496 int usage = override_usage ? override_usage : ob->
lineart.
usage;
1498 #define LRT_MESH_FINISH \
1500 if (ob->type != OB_MESH) { \
1501 BKE_mesh_free_data(use_mesh); \
1502 MEM_freeN(use_mesh); \
1539 .use_toolflags =
true,
1544 .calc_face_normal =
true,
1559 BMO_slot_copy(&findop, slots_out,
"targetmap.out", &weldop, slots_in,
"targetmap");
1576 CanFindFreestyle = 1;
1618 orv[i].
index = i + global_i;
1663 int allocate_la_e = 0;
1669 rb,
e, ort, orv, use_crease, ob->
type ==
OB_FONT, CanFindFreestyle,
bm);
1703 if (
e->l->radial_next &&
e->l->radial_next !=
e->l) {
1725 #undef LRT_MESH_FINISH
1758 if (object_has_special_usage) {
1762 if (
c->children.first ==
NULL) {
1765 switch (
c->lineart_usage) {
1810 bool allow_duplicates)
1818 double asp = ((
double)rb->
w / (
double)rb->
h);
1837 if (
G.debug_value == 4000) {
1855 if (allow_duplicates) {
1880 if (rt->
v[0] == rv) {
1885 if (rt->
v[1] == rv) {
1890 if (rt->
v[2] == rv) {
1900 bool allow_overlapping_edges)
1903 if (
e->t1 == rt ||
e->t2 == rt) {
1908 if (allow_overlapping_edges) {
1909 #define LRT_TRI_SAME_POINT(rt, i, pt) \
1910 ((LRT_DOUBLE_CLOSE_ENOUGH(rt->v[i]->gloc[0], pt->gloc[0]) && \
1911 LRT_DOUBLE_CLOSE_ENOUGH(rt->v[i]->gloc[1], pt->gloc[1]) && \
1912 LRT_DOUBLE_CLOSE_ENOUGH(rt->v[i]->gloc[2], pt->gloc[2])) || \
1913 (LRT_DOUBLE_CLOSE_ENOUGH(rt->v[i]->gloc[0], pt->gloc[0]) && \
1914 LRT_DOUBLE_CLOSE_ENOUGH(rt->v[i]->gloc[1], pt->gloc[1]) && \
1915 LRT_DOUBLE_CLOSE_ENOUGH(rt->v[i]->gloc[2], pt->gloc[2])))
1922 #undef LRT_TRI_SAME_POINT
1929 #define INTERSECT_SORT_MIN_TO_MAX_3(ia, ib, ic, lst) \
1931 lst[0] = LRT_MIN3_INDEX(ia, ib, ic); \
1932 lst[1] = (((ia <= ib && ib <= ic) || (ic <= ib && ib <= ia)) ? \
1934 (((ic <= ia && ia <= ib) || (ib < ia && ia <= ic)) ? 0 : 2)); \
1935 lst[2] = LRT_MAX3_INDEX(ia, ib, ic); \
1939 #define INTERSECT_JUST_GREATER(is, order, num, index) \
1941 index = (num < is[order[0]] ? \
1943 (num < is[order[1]] ? order[1] : (num < is[order[2]] ? order[2] : order[2]))); \
1947 #define INTERSECT_JUST_SMALLER(is, order, num, index) \
1949 index = (num > is[order[2]] ? \
1951 (num > is[order[1]] ? order[1] : (num > is[order[0]] ? order[0] : order[0]))); \
1963 const double *override_camera_loc,
1964 const bool override_cam_is_persp,
1965 const bool allow_overlapping_edges,
1966 const double vp[4][4],
1967 const double *camera_dir,
1968 const float cam_shift_x,
1969 const float cam_shift_y,
1975 int LCross = -1, RCross = -1;
1977 int st_l = 0, st_r = 0;
1983 double dot_l, dot_r, dot_la, dot_ra;
1985 double gloc[4], trans[4];
1988 double *LFBC =
e->v1->fbcoord, *RFBC =
e->v2->fbcoord, *FBC0 = rt->
v[0]->
fbcoord,
1992 if ((
MAX3(FBC0[0], FBC1[0], FBC2[0]) <
MIN2(LFBC[0], RFBC[0])) ||
1993 (
MIN3(FBC0[0], FBC1[0], FBC2[0]) >
MAX2(LFBC[0], RFBC[0])) ||
1994 (
MAX3(FBC0[1], FBC1[1], FBC2[1]) <
MIN2(LFBC[1], RFBC[1])) ||
1995 (
MIN3(FBC0[1], FBC1[1], FBC2[1]) >
MAX2(LFBC[1], RFBC[1])) ||
1996 (
MIN3(FBC0[3], FBC1[3], FBC2[3]) >
MAX2(LFBC[3], RFBC[3]))) {
2018 if (override_cam_is_persp) {
2024 if (override_cam_is_persp) {
2036 if (!
a && !b && !
c) {
2048 dot_la =
fabs(dot_l);
2049 if (dot_la < DBL_EPSILON) {
2053 dot_ra =
fabs(dot_r);
2054 if (dot_ra < DBL_EPSILON) {
2058 if (dot_l - dot_r == 0) {
2061 else if (dot_l * dot_r <= 0) {
2062 cut = dot_la /
fabs(dot_l - dot_r);
2065 cut =
fabs(dot_r + dot_l) /
fabs(dot_l - dot_r);
2066 cut = dot_ra > dot_la ? 1 - cut : cut;
2070 if (override_cam_is_persp) {
2078 trans[0] -= cam_shift_x * 2;
2079 trans[1] -= cam_shift_y * 2;
2082 if (
fabs(
e->v1->fbcoord[0] -
e->v2->fbcoord[0]) >
fabs(
e->v1->fbcoord[1] -
e->v2->fbcoord[1])) {
2083 cut =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], trans[0]);
2086 cut =
ratiod(
e->v1->fbcoord[1],
e->v2->fbcoord[1], trans[1]);
2096 else if (st_r == 1) {
2100 else if (st_r == 0) {
2105 else if (st_l == 1) {
2110 else if (st_r == 1) {
2114 else if (st_r == 0) {
2125 else if (st_l == 0) {
2130 else if (st_r == 1) {
2140 else if (st_r == 0) {
2152 double LF = dot_l * dot_f,
RF = dot_r * dot_f;
2155 if (
LF <= 0 &&
RF <= 0 && (dot_l || dot_r)) {
2157 *to =
MIN2(1, is[RCross]);
2163 if (
LF >= 0 &&
RF <= 0 && (dot_l || dot_r)) {
2165 *to =
MIN2(1, is[RCross]);
2171 if (LF <= 0 && RF >= 0 && (dot_l || dot_r)) {
2173 *to =
MIN2(cut, is[RCross]);
2184 #undef INTERSECT_SORT_MIN_TO_MAX_3
2185 #undef INTERSECT_JUST_GREATER
2186 #undef INTERSECT_JUST_SMALLER
2194 if (
l->
v[0]->index ==
r->v[0]->index) {
2195 if (
l->
v[1]->index ==
r->v[1]->index ||
l->
v[1]->index ==
r->v[2]->index ||
2196 l->
v[2]->index ==
r->v[2]->index ||
l->
v[2]->index ==
r->v[1]->index) {
2200 if (
l->
v[0]->index ==
r->v[1]->index) {
2201 if (
l->
v[1]->index ==
r->v[0]->index ||
l->
v[1]->index ==
r->v[2]->index ||
2202 l->
v[2]->index ==
r->v[2]->index ||
l->
v[2]->index ==
r->v[0]->index) {
2206 if (
l->
v[0]->index ==
r->v[2]->index) {
2207 if (
l->
v[1]->index ==
r->v[1]->index ||
l->
v[1]->index ==
r->v[0]->index ||
2208 l->
v[2]->index ==
r->v[0]->index ||
l->
v[2]->index ==
r->v[1]->index) {
2212 if (
l->
v[1]->index ==
r->v[0]->index) {
2213 if (
l->
v[2]->index ==
r->v[1]->index ||
l->
v[2]->index ==
r->v[2]->index ||
2214 l->
v[0]->index ==
r->v[2]->index ||
l->
v[0]->index ==
r->v[1]->index) {
2218 if (
l->
v[1]->index ==
r->v[1]->index) {
2219 if (
l->
v[2]->index ==
r->v[0]->index ||
l->
v[2]->index ==
r->v[2]->index ||
2220 l->
v[0]->index ==
r->v[2]->index ||
l->
v[0]->index ==
r->v[0]->index) {
2224 if (
l->
v[1]->index ==
r->v[2]->index) {
2225 if (
l->
v[2]->index ==
r->v[1]->index ||
l->
v[2]->index ==
r->v[0]->index ||
2226 l->
v[0]->index ==
r->v[0]->index ||
l->
v[0]->index ==
r->v[1]->index) {
2238 if (
l->
v[0] ==
r->v[0]) {
2241 if (
l->
v[0] ==
r->v[1]) {
2244 if (
l->
v[0] ==
r->v[2]) {
2247 if (
l->
v[1] ==
r->v[0]) {
2250 if (
l->
v[1] ==
r->v[1]) {
2253 if (
l->
v[1] ==
r->v[2]) {
2256 if (
l->
v[2] ==
r->v[0]) {
2259 if (
l->
v[2] ==
r->v[1]) {
2262 if (
l->
v[2] ==
r->v[2]) {
2275 return ((rv->
isec1 ==
v1->base.index && rv->
isec2 ==
v2->base.index) ||
2300 double dot_l, dot_r;
2320 if (dot_l * dot_r > 0 || (!dot_l && !dot_r)) {
2324 dot_l =
fabs(dot_l);
2325 dot_r =
fabs(dot_r);
2338 gloc, testing->
v[0]->
gloc, testing->
v[1]->
gloc, testing->
v[2]->
gloc))) {
2412 if (E0T && (!(*
next))) {
2418 if (E1T && (!(*
next))) {
2426 if (E2T && (!(*
next))) {
2434 rb, testing->
v[0], testing->
v[1], testing, rt,
v1);
2436 if (TE0 && (!(*
next))) {
2443 rb, testing->
v[1], testing->
v[2], testing, rt,
v1);
2445 if (TE1 && (!(*
next))) {
2452 rb, testing->
v[2], testing->
v[0], testing, rt,
v1);
2454 if (TE2 && (!(*
next))) {
2481 v1->fbcoord[2] = ZMin * ZMax / (ZMax -
fabs(
v1->fbcoord[2]) * (ZMax - ZMin));
2482 v2->fbcoord[2] = ZMin * ZMax / (ZMax -
fabs(
v2->fbcoord[2]) * (ZMax - ZMin));
2498 int r1, r2, c1, c2, row,
col;
2500 for (row = r1; row != r2 + 1; row++) {
2523 double *G0 = rt->
v[0]->
gloc, *G1 = rt->
v[1]->
gloc, *G2 = rt->
v[2]->
gloc;
2536 next_lip = lip->
next;
2537 testing_triangle = lip->
data;
2551 double *RG0 = testing_triangle->
v[0]->
gloc, *RG1 = testing_triangle->
v[1]->
gloc,
2552 *RG2 = testing_triangle->
v[2]->
gloc;
2555 if ((
MIN3(G0[2], G1[2], G2[2]) >
MAX3(RG0[2], RG1[2], RG2[2])) ||
2556 (
MAX3(G0[2], G1[2], G2[2]) <
MIN3(RG0[2], RG1[2], RG2[2])) ||
2557 (
MIN3(G0[0], G1[0], G2[0]) >
MAX3(RG0[0], RG1[0], RG2[0])) ||
2558 (
MAX3(G0[0], G1[0], G2[0]) <
MIN3(RG0[0], RG1[0], RG2[0])) ||
2559 (
MIN3(G0[1], G1[1], G2[1]) >
MAX3(RG0[1], RG1[1], RG2[1])) ||
2560 (
MAX3(G0[1], G1[1], G2[1]) <
MIN3(RG0[1], RG1[1], RG2[1])) ||
2575 float direction[3] = {0, 0, 1};
2578 float obmat_no_scale[4][4];
2640 if (
G.debug_value == 4000) {
2641 printf(
"LRT: Destroyed render data.\n");
2656 double clipping_offset = 0;
2660 clipping_offset = 0.0001;
2666 rb->
near_clip =
c->clip_start + clipping_offset;
2667 rb->
far_clip =
c->clip_end - clipping_offset;
2671 double asp = ((
double)rb->
w / (
double)rb->
h);
2721 double span_w = (
double)1 / sp_w * 2.0;
2722 double span_h = (
double)1 / sp_h * 2.0;
2734 for (row = 0; row < sp_h; row++) {
2739 ba->
l = span_w *
col - 1.0;
2740 ba->
r = (
col == sp_w - 1) ? 1.0 : (span_w * (
col + 1) - 1.0);
2741 ba->
u = 1.0 - span_h * row;
2742 ba->
b = (row == sp_h - 1) ? -1.0 : (1.0 - span_h * (row + 1));
2744 ba->
cx = (ba->
l + ba->
r) / 2;
2745 ba->
cy = (ba->
u + ba->
b) / 2;
2759 if (row != sp_h - 1) {
2765 if (
col != sp_w - 1) {
2804 if (ba[1].u > tba->
b && ba[1].
b < tba->u) {
2808 if (ba[2].u > tba->
b && ba[2].
b < tba->u) {
2815 if (ba[0].u > tba->
b && ba[0].
b < tba->u) {
2819 if (ba[3].u > tba->
b && ba[3].
b < tba->u) {
2826 if (ba[0].
r > tba->l && ba[0].
l < tba->r) {
2830 if (ba[1].
r > tba->l && ba[1].
l < tba->r) {
2837 if (ba[2].
r > tba->l && ba[2].
l < tba->r) {
2841 if (ba[3].
r > tba->l && ba[3].
l < tba->r) {
2851 next_lip = lip2->
next;
2855 if (ba[1].u > tba->
b && ba[1].
b < tba->u) {
2858 if (ba[2].u > tba->
b && ba[2].
b < tba->u) {
2866 next_lip = lip2->
next;
2870 if (ba[0].u > tba->
b && ba[0].
b < tba->u) {
2873 if (ba[3].u > tba->
b && ba[3].
b < tba->u) {
2881 next_lip = lip2->
next;
2885 if (ba[0].
r > tba->l && ba[0].
l < tba->r) {
2888 if (ba[1].
r > tba->l && ba[1].
l < tba->r) {
2896 next_lip = lip2->
next;
2900 if (ba[2].
r > tba->l && ba[2].
l < tba->r) {
2903 if (ba[3].
r > tba->l && ba[3].
l < tba->r) {
2922 int recursive_level)
2933 ba[0].
cx = (ba[0].
l + ba[0].
r) / 2;
2934 ba[0].
cy = (ba[0].
u + ba[0].
b) / 2;
2940 ba[1].
cx = (ba[1].
l + ba[1].
r) / 2;
2941 ba[1].
cy = (ba[1].
u + ba[1].
b) / 2;
2947 ba[2].
cx = (ba[2].
l + ba[2].
r) / 2;
2948 ba[2].
cy = (ba[2].
u + ba[2].
b) / 2;
2954 ba[3].
cx = (ba[3].
l + ba[3].
r) / 2;
2955 ba[3].
cy = (ba[3].
u + ba[3].
b) / 2;
2995 double converted[4];
2998 if (((converted[0] = (
double)ba->
l) >
MAX2(
l[0],
r[0])) ||
2999 ((converted[1] = (
double)ba->
r) <
MIN2(
l[0],
r[0])) ||
3000 ((converted[2] = (
double)ba->
b) >
MAX2(
l[1],
r[1])) ||
3001 ((converted[3] = (
double)ba->
u) <
MIN2(
l[1],
r[1]))) {
3008 c1 = vx * (converted[2] -
l[1]) - vy * (converted[0] -
l[0]);
3011 c1 = vx * (converted[2] -
l[1]) - vy * (converted[1] -
l[0]);
3017 c1 = vx * (converted[3] -
l[1]) - vy * (converted[0] -
l[0]);
3023 c1 = vx * (converted[3] -
l[1]) - vy * (converted[1] -
l[0]);
3036 double p1[2], p2[2], p3[2], p4[2];
3039 p3[0] = p1[0] = (
double)ba->
l;
3040 p2[1] = p1[1] = (
double)ba->
b;
3041 p2[0] = p4[0] = (
double)ba->
r;
3042 p3[1] = p4[1] = (
double)ba->
u;
3044 if ((FBC1[0] >= p1[0] && FBC1[0] <= p2[0] && FBC1[1] >= p1[1] && FBC1[1] <= p3[1]) ||
3045 (FBC2[0] >= p1[0] && FBC2[0] <= p2[0] && FBC2[1] >= p1[1] && FBC2[1] <= p3[1]) ||
3046 (FBC3[0] >= p1[0] && FBC3[0] <= p2[0] && FBC3[1] >= p1[1] && FBC3[1] <= p3[1])) {
3075 int recursive_level,
3076 bool do_intersection)
3088 if (root_ba->
triangle_count > 200 && recursive && recursive_level < 10) {
3108 rb, &ba[0], rt,
B1, recursive, recursive_level + 1, do_intersection);
3112 rb, &ba[1], rt,
B1, recursive, recursive_level + 1, do_intersection);
3116 rb, &ba[2], rt,
B1, recursive, recursive_level + 1, do_intersection);
3120 rb, &ba[3], rt,
B1, recursive, recursive_level + 1, do_intersection);
3134 rb,
e->v1->fbcoord,
e->v2->fbcoord, &root_ba->
child[0])) {
3138 rb,
e->v1->fbcoord,
e->v2->fbcoord, &root_ba->
child[1])) {
3142 rb,
e->v1->fbcoord,
e->v2->fbcoord, &root_ba->
child[2])) {
3146 rb,
e->v1->fbcoord,
e->v2->fbcoord, &root_ba->
child[3])) {
3159 int r1, r2, c1, c2, row,
col;
3161 for (row = r1; row != r2 + 1; row++) {
3182 if (!rt->
v[0] || !rt->
v[1] || !rt->
v[2]) {
3191 if (b[0] > 1 || b[1] < -1 || b[2] > 1 || b[3] < -1) {
3195 (*colbegin) = (int)((b[0] + 1.0) / sp_w);
3196 (*colend) = (int)((b[1] + 1.0) / sp_w);
3197 (*rowend) = rb->
tile_count_y - (int)((b[2] + 1.0) / sp_h) - 1;
3198 (*rowbegin) = rb->
tile_count_y - (int)((b[3] + 1.0) / sp_h) - 1;
3206 if ((*colbegin) < 0) {
3209 if ((*rowbegin) < 0) {
3226 if (!
e->v1 || !
e->v2) {
3230 if (
e->v1->fbcoord[0] !=
e->v1->fbcoord[0] ||
e->v2->fbcoord[0] !=
e->v2->fbcoord[0]) {
3234 b[0] =
MIN2(
e->v1->fbcoord[0],
e->v2->fbcoord[0]);
3235 b[1] =
MAX2(
e->v1->fbcoord[0],
e->v2->fbcoord[0]);
3236 b[2] =
MIN2(
e->v1->fbcoord[1],
e->v2->fbcoord[1]);
3237 b[3] =
MAX2(
e->v1->fbcoord[1],
e->v2->fbcoord[1]);
3239 if (b[0] > 1 || b[1] < -1 || b[2] > 1 || b[3] < -1) {
3243 (*colbegin) = (int)((b[0] + 1.0) / sp_w);
3244 (*colend) = (int)((b[1] + 1.0) / sp_w);
3245 (*rowend) = rb->
tile_count_y - (int)((b[2] + 1.0) / sp_h) - 1;
3246 (*rowbegin) = rb->
tile_count_y - (int)((b[3] + 1.0) / sp_h) - 1;
3249 if ((*rowend) < (*rowbegin)) {
3253 if ((*colend) < (*colbegin)) {
3275 if (
x > 1 || x < -1 || y > 1 ||
y < -1) {
3279 col = (int)((
x + 1.0) / sp_w);
3302 int c = (int)((
x + 1.0) / sp_w);
3318 while (iba->
child) {
3321 iba = &iba->
child[0];
3324 iba = &iba->
child[3];
3329 iba = &iba->
child[1];
3332 iba = &iba->
child[2];
3363 lim = reln->element_count;
3364 for (i = 0; i < lim; i++) {
3370 for (co = x1; co <=
x2; co++) {
3371 for (
r =
y1;
r <= y2;
r++) {
3394 double data[2] = {
e->v1->fbcoord[0],
e->v1->fbcoord[1]};
3395 double LU[2] = {-1, 1}, RU[2] = {1, 1},
LB[2] = {-1, -1},
RB[2] = {1, -1};
3396 double r = 1, sr = 1;
3437 double rx, ry, ux, uy, lx, ly, bx, by;
3442 if (positive_x > 0) {
3444 ry =
y + k * (rx -
x);
3447 if (positive_y > 0) {
3449 ux =
x + (uy -
y) / k;
3450 r1 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], rx);
3451 r2 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], ux);
3452 if (
MIN2(r1, r2) > 1) {
3460 if (ba->
u >= ry && ba->
b < ry) {
3471 if (ba->
r >= ux && ba->
l < ux) {
3480 else if (positive_y < 0) {
3482 bx =
x + (by -
y) / k;
3483 r1 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], rx);
3484 r2 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], bx);
3485 if (
MIN2(r1, r2) > 1) {
3491 if (ba->
u >= ry && ba->
b < ry) {
3501 if (ba->
r >= bx && ba->
l < bx) {
3511 r1 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], this->r);
3517 if (ba->
u >=
y && ba->
b <
y) {
3527 else if (positive_x < 0) {
3529 ly =
y + k * (lx -
x);
3532 if (positive_y > 0) {
3534 ux =
x + (uy -
y) / k;
3535 r1 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], lx);
3536 r2 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], ux);
3537 if (
MIN2(r1, r2) > 1) {
3543 if (ba->
u >= ly && ba->
b < ly) {
3553 if (ba->
r >= ux && ba->
l < ux) {
3563 else if (positive_y < 0) {
3565 bx =
x + (by -
y) / k;
3566 r1 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], lx);
3567 r2 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], bx);
3568 if (
MIN2(r1, r2) > 1) {
3574 if (ba->
u >= ly && ba->
b < ly) {
3584 if (ba->
r >= bx && ba->
l < bx) {
3594 r1 =
ratiod(
e->v1->fbcoord[0],
e->v2->fbcoord[0], this->l);
3600 if (ba->
u >=
y && ba->
b <
y) {
3610 if (positive_y > 0) {
3611 r1 =
ratiod(
e->v1->fbcoord[1],
e->v2->fbcoord[1], this->u);
3617 if (ba->
r >
x && ba->
l <=
x) {
3624 else if (positive_y < 0) {
3625 r1 =
ratiod(
e->v1->fbcoord[1],
e->v2->fbcoord[1], this->b);
3631 if (ba->
r >
x && ba->
l <=
x) {
3655 int intersections_only = 0;
3718 if (!intersections_only) {
3750 if (
G.debug_value == 4000) {
3771 float (*gp_obmat_inverse)[4],
3780 uchar transparency_flags,
3781 uchar transparency_mask,
3784 const char *source_vgname,
3789 if (
G.debug_value == 4000) {
3790 printf(
"NULL Lineart rb!\n");
3795 int stroke_count = 0;
3799 if (source_object) {
3804 if (source_collection) {
3823 if (!(rlc->type & (
types & enabled_types))) {
3826 if (rlc->level > level_end || rlc->level < level_start) {
3829 if (orig_ob && orig_ob != rlc->object_ref) {
3832 if (orig_col && rlc->object_ref) {
3839 if (rlc->transparency_mask != transparency_mask) {
3844 if (!(rlc->transparency_mask & transparency_mask)) {
3858 "line art add stroke");
3861 stroke_data[array_idx] = rlci->gpos[0];
3862 stroke_data[array_idx + 1] = rlci->gpos[1];
3863 stroke_data[array_idx + 2] = rlci->gpos[2];
3864 mul_m4_v3(gp_obmat_inverse, &stroke_data[array_idx]);
3865 stroke_data[array_idx + 3] = 1;
3866 stroke_data[array_idx + 4] = opacity;
3876 if (source_vgname && vgname) {
3885 if ((!source_vgname) || strstr(db->name, source_vgname) == db->name) {
3892 int sindex = 0, vindex;
3894 vindex = rlci->index;
3901 float use_weight = mdw->
weight;
3903 use_weight = 1 - use_weight;
3917 if (
G.debug_value == 4000) {
3924 if (
G.debug_value == 4000) {
3925 printf(
"LRT: Generated %d strokes.\n", stroke_count);
3938 void *source_reference,
3943 uchar transparency_flags,
3944 uchar transparency_mask,
3947 const char *source_vgname,
3952 if (!gpl || !gpf || !ob) {
3958 short use_types = 0;
3960 if (!source_reference) {
3963 source_object = (
Object *)source_reference;
3968 if (!source_reference) {
3971 source_collection = (
Collection *)source_reference;
3972 use_types = edge_types;
3976 use_types = edge_types;
3978 float gp_obmat_inverse[4][4];
Camera data-block and utility functions.
float BKE_camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y)
int BKE_camera_sensor_fit(int sensor_fit, float sizex, float sizey)
bool BKE_collection_has_object_recursive_instanced(struct Collection *collection, struct Object *ob)
bool BKE_collection_has_object(struct Collection *collection, const struct Object *ob)
CustomData interface, see also DNA_customdata_types.h.
bool CustomData_has_layer(const struct CustomData *data, int type)
void * CustomData_bmesh_get(const struct CustomData *data, void *block, int type)
BMEditMesh * BKE_editmesh_create(BMesh *bm, const bool do_tessellate)
struct bGPDstroke * BKE_gpencil_stroke_add(struct bGPDframe *gpf, int mat_idx, int totpoints, short thickness, const bool insert_at_head)
#define GP_PRIM_DATABUF_SIZE
void BKE_gpencil_dvert_ensure(struct bGPDstroke *gps)
void BKE_gpencil_stroke_add_points(struct bGPDstroke *gps, const float *array, const int totpoints, const float mat[4][4])
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
void BKE_gpencil_stroke_set_random_color(struct bGPDstroke *gps)
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct Object *ob, short act)
struct Mesh * BKE_mesh_new_from_object(struct Depsgraph *depsgraph, struct Object *object, const bool preserve_all_data_layers, const bool preserve_origindex)
int BKE_render_num_threads(const struct RenderData *r)
bool BKE_scene_camera_switch_update(struct Scene *scene)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(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)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
MINLINE double ratiod(double min, double max, double pos)
MINLINE int max_ii(int a, int b)
void mul_v4_m4v3_db(double r[4], const double mat[4][4], const double vec[3])
void mul_v3_m4v3_db(double r[3], const double mat[4][4], const double vec[3])
void unit_m4(float m[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void unit_m4_db(double m[4][4])
void copy_m4d_m4(double m1[4][4], const float m2[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_m4db_m4db_m4fl_uniq(double R[4][4], const double A[4][4], const float B[4][4])
void mul_v3_mat3_m4v3_db(double r[3], const double M[4][4], const double v[3])
void transpose_m4(float R[4][4])
void copy_m4_m4_db(double m1[4][4], const double m2[4][4])
void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3])
float focallength_to_fov(float focal_length, float sensor)
MINLINE double normalize_v3_db(double n[3])
MINLINE float normalize_v3(float r[3])
void interp_v3_v3v3_db(double target[3], const double a[3], const double b[3], const double t)
MINLINE void mul_v3db_db(double r[3], double f)
MINLINE void add_v3_v3_db(double r[3], const double a[3])
MINLINE double dot_v3v3_db(const double a[3], const double b[3]) ATTR_WARN_UNUSED_RESULT
void interp_v2_v2v2_db(double target[2], const double a[2], const double b[2], const double t)
MINLINE void copy_v3db_v3fl(double r[3], const float a[3])
MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE void copy_v3_v3_db(double r[3], const double a[3])
MINLINE void copy_v4_v4_db(double r[4], const double a[4])
MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE void sub_v2_v2v2_db(double r[2], const double a[2], const double b[2])
void BLI_task_pool_work_and_wait(TaskPool *pool)
TaskPool * BLI_task_pool_create(void *userdata, TaskPriority priority)
void BLI_task_pool_free(TaskPool *pool)
void BLI_task_pool_push(TaskPool *pool, TaskRunFunction run, void *taskdata, bool free_taskdata, TaskFreeFunction freedata)
pthread_spinlock_t SpinLock
void BLI_spin_init(SpinLock *spin)
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
void BLI_spin_end(SpinLock *spin)
typedef double(DMatrix)[4][4]
struct Depsgraph Depsgraph
#define DEG_OBJECT_ITER_END
#define DEG_OBJECT_ITER_BEGIN(graph_, instance_, flag_)
@ DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY
@ DEG_ITER_OBJECT_FLAG_VISIBLE
@ DEG_ITER_OBJECT_FLAG_DUPLI
@ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
Object groups, one object can be in many groups at once.
@ COLLECTION_LRT_INTERSECTION_ONLY
@ COLLECTION_LRT_OCCLUSION_ONLY
@ COLLECTION_LRT_NO_INTERSECTION
@ LRT_GPENCIL_TRANSPARENCY_ENABLE
@ LRT_GPENCIL_TRANSPARENCY_MATCH
@ LRT_GPENCIL_INVERT_SOURCE_VGROUP
@ LRT_GPENCIL_MATCH_OUTPUT_VGROUP
@ LRT_EDGE_FLAG_INTERSECTION
@ LRT_EDGE_FLAG_EDGE_MARK
@ LRT_EVERYTHING_AS_CONTOUR
@ LRT_INTERSECTION_AS_CONTOUR
@ LRT_ALLOW_OVERLAPPING_EDGES
@ LRT_ALLOW_DUPLI_OBJECTS
@ LRT_ALLOW_CLIPPING_BOUNDARIES
@ LRT_MATERIAL_TRANSPARENCY_ENABLED
@ MOD_TRIANGULATE_QUAD_FIXED
@ MOD_TRIANGULATE_NGON_BEAUTY
@ OBJECT_LRT_NO_INTERSECTION
@ OBJECT_LRT_OCCLUSION_ONLY
@ OBJECT_LRT_INTERSECTION_ONLY
_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 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 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 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 y
_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 LRT_DOUBLE_CLOSE_ENOUGH(a, b)
@ LRT_VERT_HAS_INTERSECTION_DATA
BLI_INLINE int lineart_LineIntersectTest2d(const double *a1, const double *a2, const double *b1, const double *b2, double *aRatio)
@ LRT_TRIANGLE_NO_INTERSECTION
@ LRT_TRIANGLE_INTERSECTION_ONLY
@ LRT_ELEMENT_NO_INTERSECTION
@ LRT_ELEMENT_BORDER_ONLY
@ LRT_ELEMENT_IS_ADDITIONAL
struct LineartTriangle LineartTriangle
Group RGB to Bright Vector Camera CLAMP
Platform independent time functions.
BMesh * BM_mesh_copy(BMesh *bm_old)
#define BM_elem_index_get(ele)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_elem_hflag_disable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
BMesh * BM_mesh_create(const BMAllocTemplate *allocsize, const struct BMeshCreateParams *params)
BMesh Make Mesh.
void BM_mesh_normals_update(BMesh *bm)
BMesh Compute Normals.
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
BLI_INLINE BMFace * BM_face_at_index(BMesh *bm, const int index)
BLI_INLINE BMEdge * BM_edge_at_index(BMesh *bm, const int index)
#define BMALLOC_TEMPLATE_FROM_ME(...)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshParams *params)
Mesh -> BMesh.
void BMO_op_exec(BMesh *bm, BMOperator *op)
BMESH OPSTACK EXEC OP.
bool BMO_op_initf(BMesh *bm, BMOperator *op, const int flag, const char *fmt,...)
#define BMO_slot_copy(op_src, slots_src, slot_name_src, op_dst, slots_dst, slot_name_dst)
void BMO_op_finish(BMesh *bm, BMOperator *op)
BMESH OPSTACK FINISH OP.
#define BMO_FLAG_DEFAULTS
void BMO_op_init(BMesh *bm, BMOperator *op, const int flag, const char *opname)
BMESH OPSTACK INIT OP.
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
void BM_mesh_triangulate(BMesh *bm, const int quad_method, const int ngon_method, const int min_vertices, const bool tag_only, BMOperator *op, BMOpSlot *slot_facemap_out, BMOpSlot *slot_facemap_double_out)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
const Depsgraph * depsgraph
BLI_INLINE float fb(float length, float L)
IconTextureDrawCall normal
void MOD_lineart_chain_discard_short(LineartRenderBuffer *rb, const float threshold)
void MOD_lineart_chain_connect(LineartRenderBuffer *rb)
int MOD_lineart_chain_count(const LineartLineChain *rlc)
void MOD_lineart_chain_split_for_fixed_occlusion(LineartRenderBuffer *rb)
void MOD_lineart_chain_feature_lines(LineartRenderBuffer *rb)
void MOD_lineart_chain_clear_picked_flag(LineartRenderBuffer *rb)
void MOD_lineart_chain_split_angle(LineartRenderBuffer *rb, float angle_threshold_rad)
static void lineart_gpencil_generate(LineartRenderBuffer *rb, Depsgraph *depsgraph, Object *gpencil_object, float(*gp_obmat_inverse)[4], bGPDlayer *UNUSED(gpl), bGPDframe *gpf, int level_start, int level_end, int material_nr, Object *source_object, Collection *source_collection, int types, uchar transparency_flags, uchar transparency_mask, short thickness, float opacity, const char *source_vgname, const char *vgname, int modifier_flags)
static bool lineart_get_edge_bounding_areas(LineartRenderBuffer *rb, LineartEdge *e, int *rowbegin, int *rowend, int *colbegin, int *colend)
static void lineart_triangle_post(LineartTriangle *rt, LineartTriangle *orig)
static LineartElementLinkNode * lineart_memory_get_triangle_space(LineartRenderBuffer *rb)
static int lineart_triangle_size_get(const Scene *scene, LineartRenderBuffer *rb)
#define INTERSECT_JUST_SMALLER(is, order, num, index)
static bool lineart_edge_from_triangle(const LineartTriangle *rt, const LineartEdge *e, bool allow_overlapping_edges)
static void lineart_vert_set_intersection_2v(LineartVert *rv, LineartVert *v1, LineartVert *v2)
void MOD_lineart_destroy_render_data(LineartGpencilModifierData *lmd)
static LineartLineSegment * lineart_give_segment(LineartRenderBuffer *rb)
#define SELECT_RL(e_num, v1_link, v2_link, newrt)
static LineartRenderBuffer * lineart_create_render_buffer(Scene *scene, LineartGpencilModifierData *lmd)
static void lineart_triangle_set_cull_flag(LineartTriangle *rt, uchar flag)
static void lineart_add_edge_to_list(LineartRenderBuffer *rb, LineartEdge *e)
static void lineart_main_link_lines(LineartRenderBuffer *rb)
static void lineart_triangle_intersect_in_bounding_area(LineartRenderBuffer *rb, LineartTriangle *rt, LineartBoundingArea *ba)
static int lineart_rb_edge_types(LineartRenderBuffer *rb)
#define REMOVE_TRIANGLE_RL
static bool lineart_triangle_share_edge(const LineartTriangle *l, const LineartTriangle *r)
static void lineart_geometry_object_load(Depsgraph *dg, Object *ob, double(*mv_mat)[4], double(*mvp_mat)[4], LineartRenderBuffer *rb, int override_usage, int *global_vindex)
static LineartBoundingArea * lineart_get_bounding_area(LineartRenderBuffer *rb, double x, double y)
static bool lineart_point_inside_triangle3d(double v[3], double v0[3], double v1[3], double v2[3])
static LineartBoundingArea * lineart_edge_first_bounding_area(LineartRenderBuffer *rb, LineartEdge *e)
static LineartVert * lineart_triangle_2v_intersection_test(LineartRenderBuffer *rb, LineartVert *v1, LineartVert *v2, LineartTriangle *rt, LineartTriangle *testing, LineartVert *last)
static int lineart_occlusion_make_task_info(LineartRenderBuffer *rb, LineartRenderTaskInfo *rti)
#define LRT_CULL_DECIDE_INSIDE
static bool lineart_vert_already_intersected_2v(LineartVertIntersection *rv, LineartVertIntersection *v1, LineartVertIntersection *v2)
static void lineart_main_free_adjacent_data(LineartRenderBuffer *rb)
static void lineart_triangle_adjacent_assign(LineartTriangle *rt, LineartTriangleAdjacent *rta, LineartEdge *e)
static void lineart_bounding_area_split(LineartRenderBuffer *rb, LineartBoundingArea *root, int recursive_level)
static void lineart_main_add_triangles(LineartRenderBuffer *rb)
static void lineart_occlusion_worker(TaskPool *__restrict UNUSED(pool), LineartRenderTaskInfo *rti)
static char lineart_identify_feature_line(LineartRenderBuffer *rb, BMEdge *e, LineartTriangle *rt_array, LineartVert *rv_array, float crease_threshold, bool no_crease, bool count_freestyle, BMesh *bm_if_freestyle)
static void lineart_discard_segment(LineartRenderBuffer *rb, LineartLineSegment *rls)
bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph, LineartGpencilModifierData *lmd)
static bool _lineart_object_not_in_source_collection(Collection *source, Object *ob)
static LineartBoundingArea * lineart_bounding_area_next(LineartBoundingArea *this, LineartEdge *e, double x, double y, double k, int positive_x, int positive_y, double *next_x, double *next_y)
static LineartElementLinkNode * lineart_memory_get_vert_space(LineartRenderBuffer *rb)
static LineartTriangle * lineart_triangle_from_index(LineartRenderBuffer *rb, LineartTriangle *rt_array, int index)
static bool lineart_triangle_edge_image_space_occlusion(SpinLock *spl, const LineartTriangle *rt, const LineartEdge *e, const double *override_camera_loc, const bool override_cam_is_persp, const bool allow_overlapping_edges, const double vp[4][4], const double *camera_dir, const float cam_shift_x, const float cam_shift_y, double *from, double *to)
BLI_INLINE bool lineart_occlusion_is_adjacent_intersection(LineartEdge *e, LineartTriangle *rt)
static bool lineart_bounding_area_line_intersect(LineartRenderBuffer *UNUSED(fb), const double l[2], const double r[2], LineartBoundingArea *ba)
static void lineart_bounding_areas_connect_new(LineartRenderBuffer *rb, LineartBoundingArea *root)
#define RELINK_RL(e_num, newrt)
static void lineart_main_load_geometries(Depsgraph *depsgraph, Scene *scene, Object *camera, LineartRenderBuffer *rb, bool allow_duplicates)
static bool lineart_bounding_area_triangle_intersect(LineartRenderBuffer *fb, LineartTriangle *rt, LineartBoundingArea *ba)
static void lineart_destroy_render_data(LineartRenderBuffer *rb)
static bool lineart_triangle_get_other_verts(const LineartTriangle *rt, const LineartVert *rv, LineartVert **l, LineartVert **r)
void MOD_lineart_gpencil_generate(LineartRenderBuffer *rb, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, char source_type, void *source_reference, int level_start, int level_end, int mat_nr, short edge_types, uchar transparency_flags, uchar transparency_mask, short thickness, float opacity, const char *source_vgname, const char *vgname, int modifier_flags)
static bool lineart_point_inside_triangle(const double v[2], const double v0[2], const double v1[2], const double v2[2])
#define LRT_TRI_SAME_POINT(rt, i, pt)
static void lineart_occlusion_single_line(LineartRenderBuffer *rb, LineartEdge *e, int thread_id)
static void lineart_bounding_area_link_triangle(LineartRenderBuffer *rb, LineartBoundingArea *root_ba, LineartTriangle *rt, double *LRUB, int recursive, int recursive_level, bool do_intersection)
LineartBoundingArea * MOD_lineart_get_parent_bounding_area(LineartRenderBuffer *rb, double x, double y)
static LineartElementLinkNode * lineart_memory_get_edge_space(LineartRenderBuffer *rb)
#define LRT_ASSIGN_OCCLUSION_TASK(name)
static void lineart_main_bounding_area_make_initial(LineartRenderBuffer *rb)
static int lineart_point_on_line_segment(double v[2], double v0[2], double v1[2])
static void lineart_bounding_area_link_line(LineartRenderBuffer *rb, LineartBoundingArea *root_ba, LineartEdge *e)
#define INTERSECT_JUST_GREATER(is, order, num, index)
static void lineart_edge_cut(LineartRenderBuffer *rb, LineartEdge *e, double start, double end, uchar transparency_mask)
static bool lineart_get_triangle_bounding_areas(LineartRenderBuffer *rb, LineartTriangle *rt, int *rowbegin, int *rowend, int *colbegin, int *colend)
static void lineart_triangle_cull_single(LineartRenderBuffer *rb, LineartTriangle *rt, int in0, int in1, int in2, double *cam_pos, double *view_dir, bool allow_boundaries, double(*vp)[4], Object *ob, int *r_v_count, int *r_e_count, int *r_t_count, LineartElementLinkNode *v_eln, LineartElementLinkNode *e_eln, LineartElementLinkNode *t_eln)
LineartBoundingArea * MOD_lineart_get_bounding_area(LineartRenderBuffer *rb, double x, double y)
static LineartVert * lineart_triangle_share_point(const LineartTriangle *l, const LineartTriangle *r)
static LineartEdge * lineart_triangle_intersect(LineartRenderBuffer *rb, LineartTriangle *rt, LineartTriangle *testing)
static void lineart_main_get_view_vector(LineartRenderBuffer *rb)
static void lineart_vert_transform(BMVert *v, int index, LineartVert *RvBuf, double(*mv_mat)[4], double(*mvp_mat)[4])
static bool lineart_edge_match(LineartTriangle *rt, LineartEdge *e, int v1, int v2)
static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
static void lineart_main_occlusion_begin(LineartRenderBuffer *rb)
#define INTERSECT_SORT_MIN_TO_MAX_3(ia, ib, ic, lst)
static int lineart_usage_check(Collection *c, Object *ob, LineartRenderBuffer *_rb)
static void lineart_main_perspective_division(LineartRenderBuffer *rb)
#define LRT_CULL_ENSURE_MEMORY
static int lineart_point_triangle_relation(double v[2], double v0[2], double v1[2], double v2[2])
void lineart_prepend_edge_direct(struct LineartEdge **first, void *node)
void * lineart_list_pop_pointer_no_free(ListBase *h)
void * lineart_list_append_pointer_pool_sized(ListBase *h, struct LineartStaticMemPool *smp, void *data, int size)
#define LRT_BOUND_AREA_CROSSES(b1, b2)
void lineart_prepend_pool(LinkNode **first, struct LineartStaticMemPool *smp, void *link)
void * lineart_mem_aquire(struct LineartStaticMemPool *smp, size_t size)
#define LRT_ITER_ALL_LINES_END
void lineart_matrix_perspective_44d(double(*mProjection)[4], double fFov_rad, double fAspect, double zMin, double zMax)
void * lineart_mem_aquire_thread(struct LineartStaticMemPool *smp, size_t size)
void lineart_count_and_print_render_buffer_memory(struct LineartRenderBuffer *rb)
void lineart_list_remove_pointer_item_no_free(ListBase *h, LinkData *lip)
#define LRT_ITER_ALL_LINES_BEGIN
void lineart_mem_destroy(struct LineartStaticMemPool *smp)
void * lineart_list_append_pointer_pool(ListBase *h, struct LineartStaticMemPool *smp, void *data)
void lineart_matrix_ortho_44d(double(*mProjection)[4], double xMin, double xMax, double yMin, double yMax, double zMin, double zMax)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static double B1(double u)
Intersection< segment > intersection
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
struct Collection * collection
struct CollectionChild * next
struct LineartBoundingArea * child
ListBase linked_triangles
struct LineartEdge * next
struct LineartTriangle * t2
struct LineartTriangle * t1
struct Object * object_ref
eLineArtElementNodeFlag flags
struct Collection * source_collection
float angle_splitting_threshold
float chaining_image_threshold
struct Object * source_object
struct LineartLineSegment * prev
struct LineartLineSegment * next
unsigned char transparency_mask
ListBase line_buffer_pointers
LineartEdge * edge_mark_managed
struct LineartBoundingArea * initial_bounding_areas
unsigned int edge_mark_count
unsigned int bounding_area_count
unsigned int intersection_count
unsigned int material_line_count
ListBase triangle_buffer_pointers
LineartEdge * material_lines
LineartEdge * intersection_managed
LineartStaticMemPool render_data_pool
double view_projection[4][4]
unsigned int crease_count
LineartEdge * material_managed
unsigned int contour_count
struct Collection * _source_collection
ListBase triangle_adjacent_pointers
LineartEdge * intersection_lines
float chaining_image_threshold
LineartEdge * crease_lines
bool allow_overlapping_edges
float angle_splitting_threshold
struct Object * _source_object
ListBase vertex_buffer_pointers
LineartEdge * crease_managed
LineartEdge * contour_managed
LineartEdge * edge_mark_end
LineartEdge * intersection_end
LineartEdge * intersection
LineartEdge * material_end
LineartEdge * contour_end
struct LineartRenderBuffer * rb
struct LineartEdge * e[3]
struct LineartEdge * testing_e[1]
struct LineartTriangle base
struct LinkNode * intersecting_verts
unsigned char transparency_mask
struct LineartVert * v[3]
struct LineartTriangle * intersecting_with
unsigned char transparency_mask
struct MaterialLineArt lineart
struct BMEditMesh * edit_mesh
struct MDeformVert * dvert
struct Collection * master_collection
struct MDeformVert * dvert
double PIL_check_seconds_timer(void)
ccl_device_inline float2 fabs(const float2 &a)
function< void(void)> TaskRunFunction