@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
43 lines • 2.9 kB
JavaScript
import { TgdFilter } from "./filter.js";
export class TgdFilterHueRotation extends TgdFilter {
constructor({ hueShiftInDegrees = 0, name } = {}) {
super({
name: name ?? `TgdFilterHueRotation/${TgdFilter.id++}`,
fragmentShaderCode: [
"vec4 color = texture(uniTexture, varUV);",
"vec3 rgb = color.rgb;",
"const vec3 k = vec3(0.5773502691896258);",
"float cosAngle = cos(uniHueShift);",
"FragColor = vec4(",
[
"rgb * cosAngle ",
"+ cross(k, rgb) * sin(uniHueShift) ",
"+ k * dot(k, rgb) * (1.0 - cosAngle),",
"color.a",
],
");",
],
uniforms: {
uniHueShift: "float",
},
});
this.hueShift = 0;
this.setUniforms = ({ program }) => {
program.uniform1f("uniHueShift", this.hueShift);
};
this.hueShiftInDegrees = hueShiftInDegrees;
}
get hueShiftInRadians() {
return this.hueShift;
}
set hueShiftInRadians(v) {
this.hueShift = v;
}
get hueShiftInDegrees() {
return (this.hueShift * 180) / Math.PI;
}
set hueShiftInDegrees(v) {
this.hueShift = (v * Math.PI) / 180;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVlLXJvdGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpbHRlci9odWUtcm90YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0MsTUFBTSxVQUFVLENBQUE7QUFFcEUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFNBQVM7SUFHL0MsWUFBWSxFQUFFLGlCQUFpQixHQUFHLENBQUMsRUFBRSxJQUFJLEtBQTJELEVBQUU7UUFDbEcsS0FBSyxDQUFDO1lBQ0YsSUFBSSxFQUFFLElBQUksSUFBSSx3QkFBd0IsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3RELGtCQUFrQixFQUFFO2dCQUNoQiwwQ0FBMEM7Z0JBQzFDLHVCQUF1QjtnQkFDdkIsMENBQTBDO2dCQUMxQyxvQ0FBb0M7Z0JBQ3BDLG1CQUFtQjtnQkFDbkI7b0JBQ0ksaUJBQWlCO29CQUNqQixxQ0FBcUM7b0JBQ3JDLHVDQUF1QztvQkFDdkMsU0FBUztpQkFDWjtnQkFDRCxJQUFJO2FBQ1A7WUFDRCxRQUFRLEVBQUU7Z0JBQ04sV0FBVyxFQUFFLE9BQU87YUFDdkI7U0FDSixDQUFDLENBQUE7UUF0QkUsYUFBUSxHQUFHLENBQUMsQ0FBQTtRQXdDSixnQkFBVyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQWtDLEVBQVEsRUFBRTtZQUNoRixPQUFPLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkQsQ0FBQyxDQUFBO1FBbkJHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUM5QyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ3hCLENBQUM7SUFDRCxJQUFJLGlCQUFpQixDQUFDLENBQVM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7SUFDMUMsQ0FBQztJQUNELElBQUksaUJBQWlCLENBQUMsQ0FBUztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUE7SUFDdkMsQ0FBQztDQUtKIn0=