UNPKG

molstar

Version:

A comprehensive macromolecular library.

79 lines (61 loc) 2.3 kB
"use strict"; /** * Slightly adapted from https://github.com/mrdoob/three.js * MIT License Copyright (c) 2010-2020 three.js authors * * WebGL port of Subpixel Morphological Antialiasing (SMAA) v2.8 * Preset: SMAA 1x Medium (with color edge detection) * https://github.com/iryoku/smaa/releases/tag/v2.8 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.edges_frag = void 0; exports.edges_frag = ` precision highp float; precision highp int; precision highp sampler2D; uniform sampler2D tColor; uniform vec2 uTexSizeInv; varying vec2 vUv; varying vec4 vOffset[3]; vec4 SMAAColorEdgeDetectionPS(vec2 texcoord, vec4 offset[3], sampler2D colorTex) { vec2 threshold = vec2(dEdgeThreshold, dEdgeThreshold); // Calculate color deltas: vec4 delta; vec3 C = texture2D(colorTex, texcoord).rgb; vec3 Cleft = texture2D(colorTex, offset[0].xy).rgb; vec3 t = abs(C - Cleft); delta.x = max(max(t.r, t.g), t.b); vec3 Ctop = texture2D(colorTex, offset[0].zw).rgb; t = abs(C - Ctop); delta.y = max(max(t.r, t.g), t.b); // We do the usual threshold: vec2 edges = step(threshold, delta.xy); // Then discard if there is no edge: if (dot(edges, vec2(1.0, 1.0 )) == 0.0) discard; // Calculate right and bottom deltas: vec3 Cright = texture2D(colorTex, offset[1].xy).rgb; t = abs( C - Cright ); delta.z = max(max(t.r, t.g), t.b); vec3 Cbottom = texture2D(colorTex, offset[1].zw).rgb; t = abs(C - Cbottom); delta.w = max(max(t.r, t.g), t.b); // Calculate the maximum delta in the direct neighborhood: float maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w ); // Calculate left-left and top-top deltas: vec3 Cleftleft = texture2D(colorTex, offset[2].xy).rgb; t = abs( C - Cleftleft ); delta.z = max(max(t.r, t.g), t.b); vec3 Ctoptop = texture2D(colorTex, offset[2].zw).rgb; t = abs(C - Ctoptop); delta.w = max(max(t.r, t.g), t.b); // Calculate the final maximum delta: maxDelta = max(max(maxDelta, delta.z), delta.w); // Local contrast adaptation in action: edges.xy *= step(0.5 * maxDelta, delta.xy); return vec4(edges, 0.0, 0.0); } void main() { gl_FragColor = SMAAColorEdgeDetectionPS(vUv, vOffset, tColor); } `;