45 lines
1.1 KiB
GLSL
45 lines
1.1 KiB
GLSL
#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);
|
|
}
|
|
}
|