polygon node: early crude implementation
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
#version 150
|
||||
|
||||
uniform vec2[256] points_in;
|
||||
uniform int points_in_count;
|
||||
uniform vec4 color_in;
|
||||
|
||||
uniform vec2 ove_resolution;
|
||||
|
||||
in vec2 ove_texcoord;
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
/*
|
||||
int pnpoly(int npol, float *xp, float *yp, float x, float y) {
|
||||
int i, j, c = 0;
|
||||
for (i = 0, j = npol-1; i < npol; j = i++) {
|
||||
if ((((yp[i] <= y) && (y < yp[j])) ||
|
||||
((yp[j] <= y) && (y < yp[i]))) &&
|
||||
(x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
|
||||
c = !c;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
*/
|
||||
|
||||
bool pnpoly(vec2 p) {
|
||||
bool c = false;
|
||||
int i, j;
|
||||
for (i = 0, j = points_in_count-1; i < points_in_count; j = i++) {
|
||||
if ((((points_in[i].y <= p.y) && (p.y < points_in[j].y)) ||
|
||||
((points_in[j].y <= p.y) && (p.y < points_in[i].y))) &&
|
||||
(p.x < (points_in[j].x - points_in[i].x) * (p.y - points_in[i].y) / (points_in[j].y - points_in[i].y) + points_in[i].x))
|
||||
c = !c;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
if (points_in_count > 0 && pnpoly(ove_texcoord * ove_resolution)) {
|
||||
fragColor = color_in;
|
||||
} else {
|
||||
fragColor = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@
|
||||
<file>dropshadow.xml</file>
|
||||
<file>diptoblack.frag</file>
|
||||
<file>diptoblack.xml</file>
|
||||
<file>polygon.frag</file>
|
||||
<file>rgbwaveform.frag</file>
|
||||
<file>solid.frag</file>
|
||||
<file>solid.xml</file>
|
||||
|
||||
Reference in New Issue
Block a user