git-svn-id: svn://db.shs.com.ru/libs@626 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-11-22 15:20:52 +00:00
parent 5e2b563d57
commit 09248aae34
128 changed files with 16038 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
// vert //
void main(void) {
gl_Position = qgl_ftransform();
}
// frag //
uniform sampler2D fb_hover, fb_selection;
uniform vec4 hover_id, hover_color, selection_color;
uniform float hover_fill, selection_fill, has_hover, has_selection;
ivec2 tc;
vec4 diffVector(in sampler2D map, in vec4 id) {
vec4 ds0 = abs(texelFetchOffset(map, tc, 0, ivec2(-1, 0)) - id);
vec4 ds1 = abs(texelFetchOffset(map, tc, 0, ivec2( 1, 0)) - id);
vec4 ds2 = abs(texelFetchOffset(map, tc, 0, ivec2(0, -1)) - id);
vec4 ds3 = abs(texelFetchOffset(map, tc, 0, ivec2(0, 1)) - id);
return vec4(dot(ds0, vec4(1)), dot(ds1, vec4(1)), dot(ds2, vec4(1)), dot(ds3, vec4(1)));
}
vec2 diffPair(in vec4 dv) {
const float _c = 64;
return vec2(step(1e-6, dot(dv, vec4(1))),
step(1e-3, (dv.r * _c) * (dv.g * _c) * (dv.b * _c) * (dv.a * _c)));
}
float diffAlpha(in vec2 dp, in float fill) {
return mix(dp.x - dp.y, dp.x - dp.y - dp.y + 1, fill);
}
void main(void) {
tc = ivec2(gl_FragCoord.xy);
float hh = clamp(dot(hover_id, vec4(1)), 0, 1);
vec2 dp = diffPair(diffVector(fb_hover, hover_id));
float v = diffAlpha(dp, hover_fill);
qgl_FragData[2] = has_hover*hh*v*vec4(hover_color.bgr, hover_color.a);
dp = diffPair(diffVector(fb_selection, vec4(1)));
v = diffAlpha(dp, selection_fill);
qgl_FragData[3] = has_selection*v*vec4(selection_color.bgr, selection_color.a);
//qgl_FragData[3] = vec4(has_selection);
}