UNPKG

@absulit/points

Version:

A Generative Art library made in WebGPU

74 lines (72 loc) 2.54 kB
/* @ts-self-types="./color.d.ts" */ const RED=` const RED = vec4(1.,0.,0.,1.); `;const GREEN=` const GREEN = vec4(0.,1.,0.,1.); `;const BLUE=` const BLUE = vec4(0.,0.,1.,1.); `;const YELLOW=` const YELLOW = vec4(1.,1.,0.,1.); `;const CYAN=` const CYAN = vec4(0.,1.,1.,1.); `;const MAGENTA=` const MAGENTA = vec4(1.,0.,1.,1.); `;const WHITE=` const WHITE = vec4(1.,1.,1.,1.); `;const BLACK=` const BLACK = vec4(0.,0.,0.,1.); `;const layer=` // https://stackoverflow.com/a/24501192/507186 // math has been corrected from the stackoverflow method // to avoid a black like/ring fn layer(back:vec4f, front: vec4f) -> vec4f { let rgb = front.rgb * front.a + back.rgb * (1. - front.a); let a = front.a + back.a * (1. - front.a); return vec4f(rgb, a); } `;const layerPremultiplied=` fn layerPremultiplied(back: vec4f, front: vec4f) -> vec4f { let out_a = front.a + back.a * (1. - front.a); let out_rgb = (front.rgb * front.a) + (back.rgb * back.a * (1. - front.a)); return vec4f(out_rgb, out_a); } `;const RGBAFromHSV=` fn hsvAux(h:f32, s:f32, v:f32, n:f32) -> f32 { let k:f32 = (n + h * 6.) % 6.; return v - v * s * max(min(min(k, 4. - k), 1.), 0.); }; fn RGBAFromHSV(h:f32, s:f32, v:f32) -> vec4f{ return vec4f(hsvAux(h, s, v, 5.), hsvAux(h, s, v, 3.), hsvAux(h, s, v, 1.), 1.); } `;const bloom=` fn bloom(input:f32, iterations:i32, intensity:f32) -> f32 { var output = 0.; let iterationsF32 = f32(iterations); for (var k = 0; k < iterations; k++) { let kf32 = f32(k); for (var n = 0; n < iterations; n++) { let coef = cos(2. * PI * kf32 * f32(n) / iterationsF32 ); output += input * coef * intensity; } } return output; } `;const brightness=` fn brightness(color:vec4f) -> f32 { // // Standard // LuminanceA = (0.2126*R) + (0.7152*G) + (0.0722*B) // // Percieved A // LuminanceB = (0.299*R + 0.587*G + 0.114*B) // // Perceived B, slower to calculate // LuminanceC = sqrt(0.299*(R**2) + 0.587*(G**2) + 0.114*(B**2)) return (0.2126 * color.r) + (0.7152 * color.g) + (0.0722 * color.b); } `;const brightnessB=` fn brightnessB(color:vec4f) -> f32 { return (0.299 * color.r) + (0.587 * color.g) + (0.114 * color.b); } `;const brightnessC=` fn brightnessC(color:vec4f) -> f32 { return (0.2126 * pow(color.r, 2.)) + (0.7152 * pow(color.g, 2.)) + (0.0722 * pow(color.b, 2.)); } `;export{BLACK,BLUE,CYAN,GREEN,MAGENTA,RED,RGBAFromHSV,WHITE,YELLOW,bloom,brightness,brightnessB,brightnessC,layer,layerPremultiplied};