@flighthq/effects-gl 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/glBevelEffect.d.ts +4 -0
- package/dist/glBevelEffect.d.ts.map +1 -0
- package/dist/glBevelEffect.js +132 -0
- package/dist/glBevelEffect.js.map +1 -0
- package/dist/glBloomEffect.d.ts.map +1 -1
- package/dist/glBloomEffect.js +5 -5
- package/dist/glBloomEffect.js.map +1 -1
- package/dist/glBlurEffect.d.ts +8 -0
- package/dist/glBlurEffect.d.ts.map +1 -0
- package/dist/glBlurEffect.js +65 -0
- package/dist/glBlurEffect.js.map +1 -0
- package/dist/glColorLutPass.d.ts +3 -0
- package/dist/glColorLutPass.d.ts.map +1 -0
- package/dist/glColorLutPass.js +75 -0
- package/dist/glColorLutPass.js.map +1 -0
- package/dist/glColorMatrixPass.d.ts +3 -0
- package/dist/glColorMatrixPass.d.ts.map +1 -0
- package/dist/glColorMatrixPass.js +33 -0
- package/dist/glColorMatrixPass.js.map +1 -0
- package/dist/glConvolutionEffect.d.ts +5 -0
- package/dist/glConvolutionEffect.d.ts.map +1 -0
- package/dist/glConvolutionEffect.js +94 -0
- package/dist/glConvolutionEffect.js.map +1 -0
- package/dist/glDropShadowEffect.d.ts +4 -0
- package/dist/glDropShadowEffect.d.ts.map +1 -0
- package/dist/glDropShadowEffect.js +51 -0
- package/dist/glDropShadowEffect.js.map +1 -0
- package/dist/glEffectBlitShader.d.ts +10 -0
- package/dist/glEffectBlitShader.d.ts.map +1 -0
- package/dist/glEffectBlitShader.js +62 -0
- package/dist/glEffectBlitShader.js.map +1 -0
- package/dist/glEffectBoxBlur.d.ts +15 -0
- package/dist/glEffectBoxBlur.d.ts.map +1 -0
- package/dist/glEffectBoxBlur.js +89 -0
- package/dist/glEffectBoxBlur.js.map +1 -0
- package/dist/glEffectGradientRamp.d.ts +9 -0
- package/dist/glEffectGradientRamp.d.ts.map +1 -0
- package/dist/glEffectGradientRamp.js +64 -0
- package/dist/glEffectGradientRamp.js.map +1 -0
- package/dist/glEffectTintShader.d.ts +7 -0
- package/dist/glEffectTintShader.d.ts.map +1 -0
- package/dist/glEffectTintShader.js +80 -0
- package/dist/glEffectTintShader.js.map +1 -0
- package/dist/glGradientBevelEffect.d.ts +4 -0
- package/dist/glGradientBevelEffect.d.ts.map +1 -0
- package/dist/glGradientBevelEffect.js +121 -0
- package/dist/glGradientBevelEffect.js.map +1 -0
- package/dist/glGradientGlowEffect.d.ts +4 -0
- package/dist/glGradientGlowEffect.d.ts.map +1 -0
- package/dist/glGradientGlowEffect.js +71 -0
- package/dist/glGradientGlowEffect.js.map +1 -0
- package/dist/glInnerGlowEffect.d.ts +4 -0
- package/dist/glInnerGlowEffect.d.ts.map +1 -0
- package/dist/glInnerGlowEffect.js +77 -0
- package/dist/glInnerGlowEffect.js.map +1 -0
- package/dist/glInnerShadowEffect.d.ts +4 -0
- package/dist/glInnerShadowEffect.d.ts.map +1 -0
- package/dist/glInnerShadowEffect.js +84 -0
- package/dist/glInnerShadowEffect.js.map +1 -0
- package/dist/glMedianEffect.d.ts +5 -0
- package/dist/glMedianEffect.d.ts.map +1 -0
- package/dist/glMedianEffect.js +73 -0
- package/dist/glMedianEffect.js.map +1 -0
- package/dist/glOuterGlowEffect.d.ts +4 -0
- package/dist/glOuterGlowEffect.d.ts.map +1 -0
- package/dist/glOuterGlowEffect.js +45 -0
- package/dist/glOuterGlowEffect.js.map +1 -0
- package/dist/glRenderEffectPipeline.d.ts +2 -2
- package/dist/glRenderEffectPipeline.d.ts.map +1 -1
- package/dist/glRenderEffectPipeline.js +64 -8
- package/dist/glRenderEffectPipeline.js.map +1 -1
- package/dist/glRenderEffectRegistrar.d.ts +1 -0
- package/dist/glRenderEffectRegistrar.d.ts.map +1 -1
- package/dist/glRenderEffectRegistrar.js +52 -38
- package/dist/glRenderEffectRegistrar.js.map +1 -1
- package/dist/index.d.ts +16 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -10
- package/dist/index.js.map +1 -1
- package/package.json +11 -6
- package/src/glBevelEffect.test.ts +13 -0
- package/src/glBlurEffect.test.ts +19 -0
- package/src/glColorLutPass.test.ts +7 -0
- package/src/glColorMatrixPass.test.ts +7 -0
- package/src/glConvolutionEffect.test.ts +13 -0
- package/src/glDropShadowEffect.test.ts +13 -0
- package/src/glEffectBlitShader.test.ts +13 -0
- package/src/glEffectBoxBlur.test.ts +7 -0
- package/src/glEffectGradientRamp.test.ts +7 -0
- package/src/glEffectTintShader.test.ts +13 -0
- package/src/glGradientBevelEffect.test.ts +13 -0
- package/src/glGradientGlowEffect.test.ts +13 -0
- package/src/glInnerGlowEffect.test.ts +13 -0
- package/src/glInnerShadowEffect.test.ts +13 -0
- package/src/glMedianEffect.test.ts +13 -0
- package/src/glOuterGlowEffect.test.ts +13 -0
- package/src/glRenderEffectRegistrar.test.ts +36 -6
- package/dist/glBrightnessContrastEffect.d.ts +0 -4
- package/dist/glBrightnessContrastEffect.d.ts.map +0 -1
- package/dist/glBrightnessContrastEffect.js +0 -28
- package/dist/glBrightnessContrastEffect.js.map +0 -1
- package/dist/glChannelMixerEffect.d.ts +0 -4
- package/dist/glChannelMixerEffect.d.ts.map +0 -1
- package/dist/glChannelMixerEffect.js +0 -30
- package/dist/glChannelMixerEffect.js.map +0 -1
- package/dist/glColorGradeEffect.d.ts +0 -4
- package/dist/glColorGradeEffect.d.ts.map +0 -1
- package/dist/glColorGradeEffect.js +0 -46
- package/dist/glColorGradeEffect.js.map +0 -1
- package/dist/glExposureEffect.d.ts +0 -4
- package/dist/glExposureEffect.d.ts.map +0 -1
- package/dist/glExposureEffect.js +0 -24
- package/dist/glExposureEffect.js.map +0 -1
- package/dist/glGrayscaleEffect.d.ts +0 -4
- package/dist/glGrayscaleEffect.d.ts.map +0 -1
- package/dist/glGrayscaleEffect.js +0 -25
- package/dist/glGrayscaleEffect.js.map +0 -1
- package/dist/glHueSaturationEffect.d.ts +0 -4
- package/dist/glHueSaturationEffect.d.ts.map +0 -1
- package/dist/glHueSaturationEffect.js +0 -67
- package/dist/glHueSaturationEffect.js.map +0 -1
- package/dist/glInvertEffect.d.ts +0 -4
- package/dist/glInvertEffect.d.ts.map +0 -1
- package/dist/glInvertEffect.js +0 -24
- package/dist/glInvertEffect.js.map +0 -1
- package/dist/glLiftGammaGainEffect.d.ts +0 -4
- package/dist/glLiftGammaGainEffect.d.ts.map +0 -1
- package/dist/glLiftGammaGainEffect.js +0 -44
- package/dist/glLiftGammaGainEffect.js.map +0 -1
- package/dist/glLookupTableGradeEffect.d.ts +0 -4
- package/dist/glLookupTableGradeEffect.d.ts.map +0 -1
- package/dist/glLookupTableGradeEffect.js +0 -28
- package/dist/glLookupTableGradeEffect.js.map +0 -1
- package/dist/glSepiaEffect.d.ts +0 -4
- package/dist/glSepiaEffect.d.ts.map +0 -1
- package/dist/glSepiaEffect.js +0 -29
- package/dist/glSepiaEffect.js.map +0 -1
- package/src/glBrightnessContrastEffect.test.ts +0 -16
- package/src/glChannelMixerEffect.test.ts +0 -13
- package/src/glColorGradeEffect.test.ts +0 -13
- package/src/glExposureEffect.test.ts +0 -13
- package/src/glGrayscaleEffect.test.ts +0 -13
- package/src/glHueSaturationEffect.test.ts +0 -13
- package/src/glInvertEffect.test.ts +0 -13
- package/src/glLiftGammaGainEffect.test.ts +0 -13
- package/src/glLookupTableGradeEffect.test.ts +0 -13
- package/src/glSepiaEffect.test.ts +0 -13
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyOuterGlowEffectToGl, defaultGlOuterGlowEffectRunner } from './glOuterGlowEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyOuterGlowEffectToGl', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyOuterGlowEffectToGl).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultGlOuterGlowEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultGlOuterGlowEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
registerBlurGlRenderEffects,
|
|
6
6
|
registerColorGlRenderEffects,
|
|
7
7
|
registerColorGradeGlRenderEffects,
|
|
8
|
+
registerCompositeGlRenderEffects,
|
|
8
9
|
registerCustomShaderGlRenderEffect,
|
|
9
10
|
registerDefaultGlRenderEffects,
|
|
10
11
|
registerScreenSpaceGlRenderEffects,
|
|
@@ -87,11 +88,18 @@ describe('registerColorGlRenderEffects', () => {
|
|
|
87
88
|
expect(typeof registerColorGlRenderEffects).toBe('function');
|
|
88
89
|
});
|
|
89
90
|
|
|
90
|
-
it('registers
|
|
91
|
+
it('registers ToneMapEffect and WhiteBalanceEffect runners', () => {
|
|
91
92
|
const state = {} as never;
|
|
92
93
|
registerColorGlRenderEffects(state);
|
|
93
|
-
expect(hasGlRenderEffectRunner(state, '
|
|
94
|
-
expect(hasGlRenderEffectRunner(state, '
|
|
94
|
+
expect(hasGlRenderEffectRunner(state, 'ToneMapEffect')).toBe(true);
|
|
95
|
+
expect(hasGlRenderEffectRunner(state, 'WhiteBalanceEffect')).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('does not register the moved pointwise color adjustments (ColorGrade/HueSaturation)', () => {
|
|
99
|
+
const state = {} as never;
|
|
100
|
+
registerColorGlRenderEffects(state);
|
|
101
|
+
expect(hasGlRenderEffectRunner(state, 'ColorGradeEffect')).toBe(false);
|
|
102
|
+
expect(hasGlRenderEffectRunner(state, 'HueSaturationEffect')).toBe(false);
|
|
95
103
|
});
|
|
96
104
|
|
|
97
105
|
it('does not register DitherEffect (moved to stylize band)', () => {
|
|
@@ -106,11 +114,33 @@ describe('registerColorGradeGlRenderEffects', () => {
|
|
|
106
114
|
expect(typeof registerColorGradeGlRenderEffects).toBe('function');
|
|
107
115
|
});
|
|
108
116
|
|
|
109
|
-
it('registers
|
|
117
|
+
it('registers ToneMapEffect and WhiteBalanceEffect runners', () => {
|
|
110
118
|
const state = {} as never;
|
|
111
119
|
registerColorGradeGlRenderEffects(state);
|
|
112
|
-
expect(hasGlRenderEffectRunner(state, '
|
|
113
|
-
expect(hasGlRenderEffectRunner(state, '
|
|
120
|
+
expect(hasGlRenderEffectRunner(state, 'ToneMapEffect')).toBe(true);
|
|
121
|
+
expect(hasGlRenderEffectRunner(state, 'WhiteBalanceEffect')).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe('registerCompositeGlRenderEffects', () => {
|
|
126
|
+
it('is a function', () => {
|
|
127
|
+
expect(typeof registerCompositeGlRenderEffects).toBe('function');
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('registers the seven former-filter composite effect runners', () => {
|
|
131
|
+
const state = {} as never;
|
|
132
|
+
registerCompositeGlRenderEffects(state);
|
|
133
|
+
for (const kind of [
|
|
134
|
+
'BevelEffect',
|
|
135
|
+
'DropShadowEffect',
|
|
136
|
+
'GradientBevelEffect',
|
|
137
|
+
'GradientGlowEffect',
|
|
138
|
+
'InnerGlowEffect',
|
|
139
|
+
'InnerShadowEffect',
|
|
140
|
+
'OuterGlowEffect',
|
|
141
|
+
]) {
|
|
142
|
+
expect(hasGlRenderEffectRunner(state, kind)).toBe(true);
|
|
143
|
+
}
|
|
114
144
|
});
|
|
115
145
|
});
|
|
116
146
|
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { BrightnessContrastEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types';
|
|
2
|
-
export declare function applyBrightnessContrastEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<BrightnessContrastEffect>): void;
|
|
3
|
-
export declare const defaultGlBrightnessContrastEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glBrightnessContrastEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glBrightnessContrastEffect.d.ts","sourceRoot":"","sources":["../src/glBrightnessContrastEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKrH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GACzC,IAAI,CAQN;AAED,eAAO,MAAM,uCAAuC,EAAE,oBAErD,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Brightness/contrast: shift then scale about mid-grey.
|
|
4
|
-
export function applyBrightnessContrastEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const brightness = effect.brightness ?? 0;
|
|
6
|
-
const contrast = effect.contrast ?? 1;
|
|
7
|
-
const program = getGlEffectProgram(state, 'colorGrade.brightnessContrast', BRIGHTNESS_CONTRAST_FRAGMENT_SRC);
|
|
8
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
9
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_brightness'), brightness);
|
|
10
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_contrast'), contrast);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
export const defaultGlBrightnessContrastEffectRunner = (ctx, effect) => {
|
|
14
|
-
applyBrightnessContrastEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
15
|
-
};
|
|
16
|
-
const BRIGHTNESS_CONTRAST_FRAGMENT_SRC = `#version 300 es
|
|
17
|
-
precision highp float;
|
|
18
|
-
in vec2 v_texCoord;
|
|
19
|
-
uniform sampler2D u_texture0;
|
|
20
|
-
uniform float u_brightness;
|
|
21
|
-
uniform float u_contrast;
|
|
22
|
-
out vec4 o_color;
|
|
23
|
-
void main() {
|
|
24
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
25
|
-
vec3 rgb = (c.rgb + u_brightness - 0.5) * u_contrast + 0.5;
|
|
26
|
-
o_color = vec4(clamp(rgb, 0.0, 1.0), c.a);
|
|
27
|
-
}`;
|
|
28
|
-
//# sourceMappingURL=glBrightnessContrastEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glBrightnessContrastEffect.js","sourceRoot":"","sources":["../src/glBrightnessContrastEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,wDAAwD;AACxD,MAAM,UAAU,iCAAiC,CAC/C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAA0C;IAE1C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,+BAA+B,EAAE,gCAAgC,CAAC,CAAC;IAC7G,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC3F,iCAAiC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAkC,CAAC,CAAC;AACzG,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG;;;;;;;;;;;EAWvC,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ChannelMixerEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types';
|
|
2
|
-
export declare function applyChannelMixerEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<ChannelMixerEffect>): void;
|
|
3
|
-
export declare const defaultGlChannelMixerEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glChannelMixerEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glChannelMixerEffect.d.ts","sourceRoot":"","sources":["../src/glChannelMixerEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAK/G,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAON;AAED,eAAO,MAAM,iCAAiC,EAAE,oBAE/C,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Channel mixer: apply a 3x4 row-major RGB->RGB matrix plus per-row offset, uploaded as 12 floats.
|
|
4
|
-
export function applyChannelMixerEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const matrix = new Float32Array(12);
|
|
6
|
-
for (let i = 0; i < 12; i++)
|
|
7
|
-
matrix[i] = effect.matrix[i] ?? IDENTITY_CHANNEL_MIXER[i];
|
|
8
|
-
const program = getGlEffectProgram(state, 'colorGrade.channelMixer', CHANNEL_MIXER_FRAGMENT_SRC);
|
|
9
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
10
|
-
gl.uniform1fv(gl.getUniformLocation(p.program, 'u_matrix'), matrix);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
export const defaultGlChannelMixerEffectRunner = (ctx, effect) => {
|
|
14
|
-
applyChannelMixerEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
15
|
-
};
|
|
16
|
-
const IDENTITY_CHANNEL_MIXER = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0];
|
|
17
|
-
const CHANNEL_MIXER_FRAGMENT_SRC = `#version 300 es
|
|
18
|
-
precision highp float;
|
|
19
|
-
in vec2 v_texCoord;
|
|
20
|
-
uniform sampler2D u_texture0;
|
|
21
|
-
uniform float u_matrix[12];
|
|
22
|
-
out vec4 o_color;
|
|
23
|
-
void main() {
|
|
24
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
25
|
-
float r = u_matrix[0] * c.r + u_matrix[1] * c.g + u_matrix[2] * c.b + u_matrix[3];
|
|
26
|
-
float g = u_matrix[4] * c.r + u_matrix[5] * c.g + u_matrix[6] * c.b + u_matrix[7];
|
|
27
|
-
float b = u_matrix[8] * c.r + u_matrix[9] * c.g + u_matrix[10] * c.b + u_matrix[11];
|
|
28
|
-
o_color = vec4(clamp(vec3(r, g, b), 0.0, 1.0), c.a);
|
|
29
|
-
}`;
|
|
30
|
-
//# sourceMappingURL=glChannelMixerEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glChannelMixerEffect.js","sourceRoot":"","sources":["../src/glChannelMixerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,mGAAmG;AACnG,MAAM,UAAU,2BAA2B,CACzC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,EAAE,0BAA0B,CAAC,CAAC;IACjG,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA4B,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvF,MAAM,0BAA0B,GAAG;;;;;;;;;;;;EAYjC,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ColorGradeEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types';
|
|
2
|
-
export declare function applyColorGradeEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<ColorGradeEffect>): void;
|
|
3
|
-
export declare const defaultGlColorGradeEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glColorGradeEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glColorGradeEffect.d.ts","sourceRoot":"","sources":["../src/glColorGradeEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAK7G,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAgBN;AAED,eAAO,MAAM,+BAA+B,EAAE,oBAE7C,CAAC"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Color grade: combined exposure, brightness, contrast, saturation, and temperature/tint shift.
|
|
4
|
-
export function applyColorGradeEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const exposure = effect.exposure ?? 0;
|
|
6
|
-
const contrast = effect.contrast ?? 1;
|
|
7
|
-
const saturation = effect.saturation ?? 1;
|
|
8
|
-
const temperature = effect.temperature ?? 0;
|
|
9
|
-
const tint = effect.tint ?? 0;
|
|
10
|
-
const brightness = effect.brightness ?? 0;
|
|
11
|
-
const program = getGlEffectProgram(state, 'colorGrade.colorGrade', COLOR_GRADE_FRAGMENT_SRC);
|
|
12
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
13
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_exposure'), Math.pow(2, exposure));
|
|
14
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_contrast'), contrast);
|
|
15
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_saturation'), saturation);
|
|
16
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_temperature'), temperature);
|
|
17
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_tint'), tint);
|
|
18
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_brightness'), brightness);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
export const defaultGlColorGradeEffectRunner = (ctx, effect) => {
|
|
22
|
-
applyColorGradeEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
23
|
-
};
|
|
24
|
-
const COLOR_GRADE_FRAGMENT_SRC = `#version 300 es
|
|
25
|
-
precision highp float;
|
|
26
|
-
in vec2 v_texCoord;
|
|
27
|
-
uniform sampler2D u_texture0;
|
|
28
|
-
uniform float u_exposure;
|
|
29
|
-
uniform float u_contrast;
|
|
30
|
-
uniform float u_saturation;
|
|
31
|
-
uniform float u_temperature;
|
|
32
|
-
uniform float u_tint;
|
|
33
|
-
uniform float u_brightness;
|
|
34
|
-
out vec4 o_color;
|
|
35
|
-
void main() {
|
|
36
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
37
|
-
vec3 rgb = c.rgb * u_exposure + u_brightness;
|
|
38
|
-
rgb.r += u_temperature * 0.5;
|
|
39
|
-
rgb.b -= u_temperature * 0.5;
|
|
40
|
-
rgb.g += u_tint * 0.5;
|
|
41
|
-
float l = dot(rgb, vec3(0.2126, 0.7152, 0.0722));
|
|
42
|
-
rgb = mix(vec3(l), rgb, u_saturation);
|
|
43
|
-
rgb = (rgb - 0.5) * u_contrast + 0.5;
|
|
44
|
-
o_color = vec4(clamp(rgb, 0.0, 1.0), c.a);
|
|
45
|
-
}`;
|
|
46
|
-
//# sourceMappingURL=glColorGradeEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glColorGradeEffect.js","sourceRoot":"","sources":["../src/glColorGradeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,gGAAgG;AAChG,MAAM,UAAU,yBAAyB,CACvC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAkC;IAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,CAAC,CAAC;IAC7F,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;QAC7E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/D,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACnF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA0B,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;EAqB/B,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ExposureEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types';
|
|
2
|
-
export declare function applyExposureEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<ExposureEffect>): void;
|
|
3
|
-
export declare const defaultGlExposureEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glExposureEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glExposureEffect.d.ts","sourceRoot":"","sources":["../src/glExposureEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAK3G,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CAMN;AAED,eAAO,MAAM,6BAA6B,EAAE,oBAE3C,CAAC"}
|
package/dist/glExposureEffect.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Exposure: scale linear color by 2^stops. Single-pass reference recipe.
|
|
4
|
-
export function applyExposureEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const exposure = effect.exposure ?? 0;
|
|
6
|
-
const program = getGlEffectProgram(state, 'exposure', EXPOSURE_FRAGMENT_SRC);
|
|
7
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
8
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_exposure'), Math.pow(2, exposure));
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
export const defaultGlExposureEffectRunner = (ctx, effect) => {
|
|
12
|
-
applyExposureEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
13
|
-
};
|
|
14
|
-
const EXPOSURE_FRAGMENT_SRC = `#version 300 es
|
|
15
|
-
precision highp float;
|
|
16
|
-
in vec2 v_texCoord;
|
|
17
|
-
uniform sampler2D u_texture0;
|
|
18
|
-
uniform float u_exposure;
|
|
19
|
-
out vec4 o_color;
|
|
20
|
-
void main() {
|
|
21
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
22
|
-
o_color = vec4(c.rgb * u_exposure, c.a);
|
|
23
|
-
}`;
|
|
24
|
-
//# sourceMappingURL=glExposureEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glExposureEffect.js","sourceRoot":"","sources":["../src/glExposureEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CACrC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAgC;IAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;IAC7E,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACjF,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;EAS5B,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, GrayscaleEffect } from '@flighthq/types';
|
|
2
|
-
export declare function applyGrayscaleEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<GrayscaleEffect>): void;
|
|
3
|
-
export declare const defaultGlGrayscaleEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glGrayscaleEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glGrayscaleEffect.d.ts","sourceRoot":"","sources":["../src/glGrayscaleEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK5G,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAMN;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAE5C,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Grayscale: mix toward luminance by intensity.
|
|
4
|
-
export function applyGrayscaleEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const intensity = effect.intensity ?? 1;
|
|
6
|
-
const program = getGlEffectProgram(state, 'colorGrade.grayscale', GRAYSCALE_FRAGMENT_SRC);
|
|
7
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
8
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_intensity'), intensity);
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
export const defaultGlGrayscaleEffectRunner = (ctx, effect) => {
|
|
12
|
-
applyGrayscaleEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
13
|
-
};
|
|
14
|
-
const GRAYSCALE_FRAGMENT_SRC = `#version 300 es
|
|
15
|
-
precision highp float;
|
|
16
|
-
in vec2 v_texCoord;
|
|
17
|
-
uniform sampler2D u_texture0;
|
|
18
|
-
uniform float u_intensity;
|
|
19
|
-
out vec4 o_color;
|
|
20
|
-
void main() {
|
|
21
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
22
|
-
float l = dot(c.rgb, vec3(0.2126, 0.7152, 0.0722));
|
|
23
|
-
o_color = vec4(mix(c.rgb, vec3(l), u_intensity), c.a);
|
|
24
|
-
}`;
|
|
25
|
-
//# sourceMappingURL=glGrayscaleEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glGrayscaleEffect.js","sourceRoot":"","sources":["../src/glGrayscaleEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,gDAAgD;AAChD,MAAM,UAAU,wBAAwB,CACtC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAiC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;IAC1F,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAClF,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;;EAU7B,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, HueSaturationEffect } from '@flighthq/types';
|
|
2
|
-
export declare function applyHueSaturationEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<HueSaturationEffect>): void;
|
|
3
|
-
export declare const defaultGlHueSaturationEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glHueSaturationEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glHueSaturationEffect.d.ts","sourceRoot":"","sources":["../src/glHueSaturationEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAKhH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,IAAI,CAUN;AAED,eAAO,MAAM,kCAAkC,EAAE,oBAEhD,CAAC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Hue/saturation/lightness: convert to HSL, adjust, convert back.
|
|
4
|
-
export function applyHueSaturationEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const hue = effect.hue ?? 0;
|
|
6
|
-
const saturation = effect.saturation ?? 1;
|
|
7
|
-
const lightness = effect.lightness ?? 0;
|
|
8
|
-
const program = getGlEffectProgram(state, 'colorGrade.hueSaturation', HUE_SATURATION_FRAGMENT_SRC);
|
|
9
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
10
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_hue'), hue / 360);
|
|
11
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_saturation'), saturation);
|
|
12
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_lightness'), lightness);
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
export const defaultGlHueSaturationEffectRunner = (ctx, effect) => {
|
|
16
|
-
applyHueSaturationEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
17
|
-
};
|
|
18
|
-
const HUE_SATURATION_FRAGMENT_SRC = `#version 300 es
|
|
19
|
-
precision highp float;
|
|
20
|
-
in vec2 v_texCoord;
|
|
21
|
-
uniform sampler2D u_texture0;
|
|
22
|
-
uniform float u_hue;
|
|
23
|
-
uniform float u_saturation;
|
|
24
|
-
uniform float u_lightness;
|
|
25
|
-
out vec4 o_color;
|
|
26
|
-
vec3 rgb2hsl(vec3 c) {
|
|
27
|
-
float mx = max(c.r, max(c.g, c.b));
|
|
28
|
-
float mn = min(c.r, min(c.g, c.b));
|
|
29
|
-
float l = (mx + mn) * 0.5;
|
|
30
|
-
float h = 0.0;
|
|
31
|
-
float s = 0.0;
|
|
32
|
-
float d = mx - mn;
|
|
33
|
-
if (d > 0.0001) {
|
|
34
|
-
s = l < 0.5 ? d / (mx + mn) : d / (2.0 - mx - mn);
|
|
35
|
-
if (mx == c.r) h = (c.g - c.b) / d + (c.g < c.b ? 6.0 : 0.0);
|
|
36
|
-
else if (mx == c.g) h = (c.b - c.r) / d + 2.0;
|
|
37
|
-
else h = (c.r - c.g) / d + 4.0;
|
|
38
|
-
h /= 6.0;
|
|
39
|
-
}
|
|
40
|
-
return vec3(h, s, l);
|
|
41
|
-
}
|
|
42
|
-
float hue2rgb(float p, float q, float t) {
|
|
43
|
-
if (t < 0.0) t += 1.0;
|
|
44
|
-
if (t > 1.0) t -= 1.0;
|
|
45
|
-
if (t < 1.0 / 6.0) return p + (q - p) * 6.0 * t;
|
|
46
|
-
if (t < 1.0 / 2.0) return q;
|
|
47
|
-
if (t < 2.0 / 3.0) return p + (q - p) * (2.0 / 3.0 - t) * 6.0;
|
|
48
|
-
return p;
|
|
49
|
-
}
|
|
50
|
-
vec3 hsl2rgb(vec3 hsl) {
|
|
51
|
-
float h = hsl.x;
|
|
52
|
-
float s = hsl.y;
|
|
53
|
-
float l = hsl.z;
|
|
54
|
-
if (s <= 0.0) return vec3(l);
|
|
55
|
-
float q = l < 0.5 ? l * (1.0 + s) : l + s - l * s;
|
|
56
|
-
float p = 2.0 * l - q;
|
|
57
|
-
return vec3(hue2rgb(p, q, h + 1.0 / 3.0), hue2rgb(p, q, h), hue2rgb(p, q, h - 1.0 / 3.0));
|
|
58
|
-
}
|
|
59
|
-
void main() {
|
|
60
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
61
|
-
vec3 hsl = rgb2hsl(c.rgb);
|
|
62
|
-
hsl.x = fract(hsl.x + u_hue);
|
|
63
|
-
hsl.y = clamp(hsl.y * u_saturation, 0.0, 1.0);
|
|
64
|
-
hsl.z = clamp(hsl.z + u_lightness, 0.0, 1.0);
|
|
65
|
-
o_color = vec4(hsl2rgb(hsl), c.a);
|
|
66
|
-
}`;
|
|
67
|
-
//# sourceMappingURL=glHueSaturationEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glHueSaturationEffect.js","sourceRoot":"","sources":["../src/glHueSaturationEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,kEAAkE;AAClE,MAAM,UAAU,4BAA4B,CAC1C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAqC;IAErC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,CAAC;IACnG,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA6B,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDlC,CAAC"}
|
package/dist/glInvertEffect.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, InvertEffect } from '@flighthq/types';
|
|
2
|
-
export declare function applyInvertEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<InvertEffect>): void;
|
|
3
|
-
export declare const defaultGlInvertEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glInvertEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glInvertEffect.d.ts","sourceRoot":"","sources":["../src/glInvertEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKzG,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,IAAI,CAMN;AAED,eAAO,MAAM,2BAA2B,EAAE,oBAEzC,CAAC"}
|
package/dist/glInvertEffect.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Invert: mix toward 1 - rgb by intensity.
|
|
4
|
-
export function applyInvertEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const intensity = effect.intensity ?? 1;
|
|
6
|
-
const program = getGlEffectProgram(state, 'colorGrade.invert', INVERT_FRAGMENT_SRC);
|
|
7
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
8
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_intensity'), intensity);
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
export const defaultGlInvertEffectRunner = (ctx, effect) => {
|
|
12
|
-
applyInvertEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
13
|
-
};
|
|
14
|
-
const INVERT_FRAGMENT_SRC = `#version 300 es
|
|
15
|
-
precision highp float;
|
|
16
|
-
in vec2 v_texCoord;
|
|
17
|
-
uniform sampler2D u_texture0;
|
|
18
|
-
uniform float u_intensity;
|
|
19
|
-
out vec4 o_color;
|
|
20
|
-
void main() {
|
|
21
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
22
|
-
o_color = vec4(mix(c.rgb, 1.0 - c.rgb, u_intensity), c.a);
|
|
23
|
-
}`;
|
|
24
|
-
//# sourceMappingURL=glInvertEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glInvertEffect.js","sourceRoot":"","sources":["../src/glInvertEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,2CAA2C;AAC3C,MAAM,UAAU,qBAAqB,CACnC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAA8B;IAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IACpF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC/E,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;EAS1B,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, LiftGammaGainEffect } from '@flighthq/types';
|
|
2
|
-
export declare function applyLiftGammaGainEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<LiftGammaGainEffect>): void;
|
|
3
|
-
export declare const defaultGlLiftGammaGainEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glLiftGammaGainEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glLiftGammaGainEffect.d.ts","sourceRoot":"","sources":["../src/glLiftGammaGainEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAMhH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,IAAI,CAgBN;AAED,eAAO,MAAM,kCAAkC,EAAE,oBAEhD,CAAC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Lift/gamma/gain: unpack packed-RGBA neutrals to per-channel offsets/exponents/multipliers in JS.
|
|
4
|
-
// Neutral packed values: lift 0x000000ff, gamma 0x808080ff, gain 0xffffffff.
|
|
5
|
-
export function applyLiftGammaGainEffectToGl(state, source, dest, effect) {
|
|
6
|
-
const lift = unpackColor(effect.lift ?? 0x000000ff);
|
|
7
|
-
const gammaRaw = unpackColor(effect.gamma ?? 0x808080ff);
|
|
8
|
-
const gain = unpackColor(effect.gain ?? 0xffffffff);
|
|
9
|
-
// Map gamma's 0.5-neutral to a 1.0-neutral exponent so 0x808080 leaves the image unchanged.
|
|
10
|
-
const gamma = [
|
|
11
|
-
1 / Math.max(gammaRaw[0] * 2, 1e-3),
|
|
12
|
-
1 / Math.max(gammaRaw[1] * 2, 1e-3),
|
|
13
|
-
1 / Math.max(gammaRaw[2] * 2, 1e-3),
|
|
14
|
-
];
|
|
15
|
-
const program = getGlEffectProgram(state, 'colorGrade.liftGammaGain', LIFT_GAMMA_GAIN_FRAGMENT_SRC);
|
|
16
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
17
|
-
gl.uniform3f(gl.getUniformLocation(p.program, 'u_lift'), lift[0], lift[1], lift[2]);
|
|
18
|
-
gl.uniform3f(gl.getUniformLocation(p.program, 'u_gamma'), gamma[0], gamma[1], gamma[2]);
|
|
19
|
-
gl.uniform3f(gl.getUniformLocation(p.program, 'u_gain'), gain[0], gain[1], gain[2]);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
export const defaultGlLiftGammaGainEffectRunner = (ctx, effect) => {
|
|
23
|
-
applyLiftGammaGainEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
24
|
-
};
|
|
25
|
-
// Unpack a packed RGBA integer (0xRRGGBBAA) into normalized [r, g, b] floats. Alpha is dropped — these
|
|
26
|
-
// grade values describe RGB channels only.
|
|
27
|
-
function unpackColor(c) {
|
|
28
|
-
return [((c >>> 24) & 255) / 255, ((c >>> 16) & 255) / 255, ((c >>> 8) & 255) / 255];
|
|
29
|
-
}
|
|
30
|
-
const LIFT_GAMMA_GAIN_FRAGMENT_SRC = `#version 300 es
|
|
31
|
-
precision highp float;
|
|
32
|
-
in vec2 v_texCoord;
|
|
33
|
-
uniform sampler2D u_texture0;
|
|
34
|
-
uniform vec3 u_lift;
|
|
35
|
-
uniform vec3 u_gamma;
|
|
36
|
-
uniform vec3 u_gain;
|
|
37
|
-
out vec4 o_color;
|
|
38
|
-
void main() {
|
|
39
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
40
|
-
vec3 rgb = c.rgb * u_gain + u_lift * (1.0 - c.rgb);
|
|
41
|
-
rgb = pow(max(rgb, 0.0), u_gamma);
|
|
42
|
-
o_color = vec4(clamp(rgb, 0.0, 1.0), c.a);
|
|
43
|
-
}`;
|
|
44
|
-
//# sourceMappingURL=glLiftGammaGainEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glLiftGammaGainEffect.js","sourceRoot":"","sources":["../src/glLiftGammaGainEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,mGAAmG;AACnG,6EAA6E;AAC7E,MAAM,UAAU,4BAA4B,CAC1C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAqC;IAErC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;IACpD,4FAA4F;IAC5F,MAAM,KAAK,GAAsC;QAC/C,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QACnC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QACnC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;KACpC,CAAC;IACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,CAAC,CAAC;IACpG,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA6B,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,uGAAuG;AACvG,2CAA2C;AAC3C,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;EAanC,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, LookupTableGradeEffect } from '@flighthq/types';
|
|
2
|
-
export declare function applyLookupTableGradeEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<LookupTableGradeEffect>): void;
|
|
3
|
-
export declare const defaultGlLookupTableGradeEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glLookupTableGradeEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glLookupTableGradeEffect.d.ts","sourceRoot":"","sources":["../src/glLookupTableGradeEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAOnH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACvC,IAAI,CAMN;AAED,eAAO,MAAM,qCAAqC,EAAE,oBAEnD,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// LUT grade: passthrough with a strength mix. A real 3D LUT grade needs an uploaded LUT cube texture
|
|
4
|
-
// (size from effect.size) sampled per pixel; that texture path is not yet wired, so this keeps the
|
|
5
|
-
// pass compiling and color-neutral until the LUT upload is added.
|
|
6
|
-
export function applyLookupTableGradeEffectToGl(state, source, dest, effect) {
|
|
7
|
-
const strength = effect.strength ?? 1;
|
|
8
|
-
const program = getGlEffectProgram(state, 'colorGrade.lutGrade', LUT_GRADE_FRAGMENT_SRC);
|
|
9
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
10
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_strength'), strength);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
export const defaultGlLookupTableGradeEffectRunner = (ctx, effect) => {
|
|
14
|
-
applyLookupTableGradeEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
15
|
-
};
|
|
16
|
-
const LUT_GRADE_FRAGMENT_SRC = `#version 300 es
|
|
17
|
-
precision highp float;
|
|
18
|
-
in vec2 v_texCoord;
|
|
19
|
-
uniform sampler2D u_texture0;
|
|
20
|
-
uniform float u_strength;
|
|
21
|
-
out vec4 o_color;
|
|
22
|
-
void main() {
|
|
23
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
24
|
-
// Passthrough: a real 3D LUT samples an uploaded LUT cube here, then mixes by u_strength.
|
|
25
|
-
vec3 graded = c.rgb;
|
|
26
|
-
o_color = vec4(mix(c.rgb, graded, u_strength), c.a);
|
|
27
|
-
}`;
|
|
28
|
-
//# sourceMappingURL=glLookupTableGradeEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glLookupTableGradeEffect.js","sourceRoot":"","sources":["../src/glLookupTableGradeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qGAAqG;AACrG,mGAAmG;AACnG,kEAAkE;AAClE,MAAM,UAAU,+BAA+B,CAC7C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAwC;IAExC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;IACzF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,+BAA+B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAgC,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;;;EAW7B,CAAC"}
|
package/dist/glSepiaEffect.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, SepiaEffect } from '@flighthq/types';
|
|
2
|
-
export declare function applySepiaEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<SepiaEffect>): void;
|
|
3
|
-
export declare const defaultGlSepiaEffectRunner: GlRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=glSepiaEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glSepiaEffect.d.ts","sourceRoot":"","sources":["../src/glSepiaEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKxG,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAMN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC"}
|
package/dist/glSepiaEffect.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { drawGlFullscreenPass } from '@flighthq/render-gl';
|
|
2
|
-
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
-
// Sepia: mix toward a sepia matrix transform by intensity.
|
|
4
|
-
export function applySepiaEffectToGl(state, source, dest, effect) {
|
|
5
|
-
const intensity = effect.intensity ?? 1;
|
|
6
|
-
const program = getGlEffectProgram(state, 'colorGrade.sepia', SEPIA_FRAGMENT_SRC);
|
|
7
|
-
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
|
8
|
-
gl.uniform1f(gl.getUniformLocation(p.program, 'u_intensity'), intensity);
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
export const defaultGlSepiaEffectRunner = (ctx, effect) => {
|
|
12
|
-
applySepiaEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
13
|
-
};
|
|
14
|
-
const SEPIA_FRAGMENT_SRC = `#version 300 es
|
|
15
|
-
precision highp float;
|
|
16
|
-
in vec2 v_texCoord;
|
|
17
|
-
uniform sampler2D u_texture0;
|
|
18
|
-
uniform float u_intensity;
|
|
19
|
-
out vec4 o_color;
|
|
20
|
-
void main() {
|
|
21
|
-
vec4 c = texture(u_texture0, v_texCoord);
|
|
22
|
-
vec3 sepia = vec3(
|
|
23
|
-
dot(c.rgb, vec3(0.393, 0.769, 0.189)),
|
|
24
|
-
dot(c.rgb, vec3(0.349, 0.686, 0.168)),
|
|
25
|
-
dot(c.rgb, vec3(0.272, 0.534, 0.131))
|
|
26
|
-
);
|
|
27
|
-
o_color = vec4(mix(c.rgb, sepia, u_intensity), c.a);
|
|
28
|
-
}`;
|
|
29
|
-
//# sourceMappingURL=glSepiaEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glSepiaEffect.js","sourceRoot":"","sources":["../src/glSepiaEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,2DAA2D;AAC3D,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAClF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC9E,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAqB,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;EAczB,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
applyBrightnessContrastEffectToGl,
|
|
3
|
-
defaultGlBrightnessContrastEffectRunner,
|
|
4
|
-
} from './glBrightnessContrastEffect';
|
|
5
|
-
|
|
6
|
-
describe('applyBrightnessContrastEffectToGl', () => {
|
|
7
|
-
it('is a function', () => {
|
|
8
|
-
expect(typeof applyBrightnessContrastEffectToGl).toBe('function');
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
describe('defaultGlBrightnessContrastEffectRunner', () => {
|
|
13
|
-
it('is a function', () => {
|
|
14
|
-
expect(typeof defaultGlBrightnessContrastEffectRunner).toBe('function');
|
|
15
|
-
});
|
|
16
|
-
});
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { applyChannelMixerEffectToGl, defaultGlChannelMixerEffectRunner } from './glChannelMixerEffect';
|
|
2
|
-
|
|
3
|
-
describe('applyChannelMixerEffectToGl', () => {
|
|
4
|
-
it('is a function', () => {
|
|
5
|
-
expect(typeof applyChannelMixerEffectToGl).toBe('function');
|
|
6
|
-
});
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
describe('defaultGlChannelMixerEffectRunner', () => {
|
|
10
|
-
it('is a function', () => {
|
|
11
|
-
expect(typeof defaultGlChannelMixerEffectRunner).toBe('function');
|
|
12
|
-
});
|
|
13
|
-
});
|