Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
хотя как сказать — переходы строк экранировать хоть в них не нужно
texture2D(tex,gl_FragCoord.xy/vec2(256., 128.)*.3В том же kick.js есть кнопочка «Share»
Чем оно отличается от того же OpenGL, в котором всё это давно уже есть, мне пока решительно не понятно.
if (texCoord.y-texCoord.x*texCoord.x > 0) discard;Next, we triangulate the interior of the closed path and form a triangle for each quadratic Bézier curve.
суть которой сводится к триангуляции кривых безье на GPU
Здесь просто вытягиваем контраст относительно среднего значения (0.5).

h(p, q) {
if q - сосед 1 или 5 {return 2 * q.x + 1}
if q - сосед 3 или 7 {return 2 * q.y + 1}
в остальных случаях {return 2 * (q.x + q.y + 1)}
}
static inline void Compare(Grid &g, Point &p, int x, int y, int offsetx, int offsety)
{
int add;
Point other = Get(g, x + offsetx, y + offsety);
if(offsety == 0) {
add = 2 * other.dx + 1;
}
else if(offsetx == 0) {
add = 2 * other.dy + 1;
}
else {
add = 2 * (other.dy + other.dx + 1);
}
other.f += add;
if (other.f < p.f)
{
p.f = other.f;
if(offsety == 0) {
p.dx = other.dx + 1;
p.dy = other.dy;
}
else if(offsetx == 0) {
p.dy = other.dy + 1;
p.dx = other.dx;
}
else {
p.dy = other.dy + 1;
p.dx = other.dx + 1;
}
}
}
static inline void Compare(Grid &g, Point &p, int x, int y, int offsetx, int offsety)
{
Point newPoint;
Point other = Get(g, x + offsetx, y + offsety);
newPoint.dx = (other.dx + abs(offsetx));
newPoint.dy = (other.dy + abs(offsety));
newPoint.f = newPoint.dx*newPoint.dx + newPoint.dy*newPoint.dy;
if (newPoint.f < p.f)
{
p = newPoint;
}
}
struct Point
{
short dx, dy;
};
static inline void Compare(Grid &g, Point &p, int x, int y, int offsetx, int offsety)
{
Point newPoint;
int newDist;
Point other = Get(g, x + offsetx, y + offsety);
newPoint.dx = (other.dx + abs(offsetx));
newPoint.dy = (other.dy + abs(offsety));
newDist = newPoint.dx*newPoint.dx + newPoint.dy*newPoint.dy;
if ( newDist < (p.dx*p.dx + p.dy*p.dy) )
{
p = newPoint;
}
}
Так как мы храним дельты по осям: dx и dy, а сравнивать нам нужно дистанцию (и записывать минимальную), то нам придется каждый раз вычислять квадрат расстояния dx*dx+dy*dy, чтобы мы могли его сравнить. Авторы решили сэкономить на этом.
Signed Distance Field или как сделать из растра вектор