UNPKG

@luma.gl/shadertools

Version:

Shader module system for luma.gl

42 lines (37 loc) 1.15 kB
/** @typedef {import('../../types').ShaderPass} ShaderPass */ const fs = `\ uniform float strength; vec4 ink_sampleColor(sampler2D texture, vec2 texSize, vec2 texCoord) { vec2 dx = vec2(1.0 / texSize.x, 0.0); vec2 dy = vec2(0.0, 1.0 / texSize.y); vec4 color = texture2D(texture, texCoord); float bigTotal = 0.0; float smallTotal = 0.0; vec3 bigAverage = vec3(0.0); vec3 smallAverage = vec3(0.0); for (float x = -2.0; x <= 2.0; x += 1.0) { for (float y = -2.0; y <= 2.0; y += 1.0) { vec3 sample = texture2D(texture, texCoord + dx * x + dy * y).rgb; bigAverage += sample; bigTotal += 1.0; if (abs(x) + abs(y) < 2.0) { smallAverage += sample; smallTotal += 1.0; } } } vec3 edge = max(vec3(0.0), bigAverage / bigTotal - smallAverage / smallTotal); float power = strength * strength * strength * strength * strength; return vec4(color.rgb - dot(edge, edge) * power * 100000.0, color.a); } `; const uniforms = { strength: {value: 0.25, min: 0, softMax: 1} }; /** @type {ShaderPass} */ export const ink = { name: 'ink', uniforms, fs, passes: [{sampler: true}] };