Skip to content

Commit e510a50

Browse files
Updated shader implementation
1 parent 55e0390 commit e510a50

File tree

6 files changed

+61
-72
lines changed

6 files changed

+61
-72
lines changed

src/Accessibility/shaders/ColorShift.js

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@ export default class ColorShift extends Lightning.shaders.WebGLDefaultShader {
3636
}
3737

3838
setupUniforms(operation) {
39-
const gl = this.gl
40-
4139
super.setupUniforms(operation)
42-
this._setUniform('brightness', this._brightness || 0.0, gl.uniform1f)
43-
this._setUniform('contrast', this._contrast || 1.0, gl.uniform1f)
44-
this._setUniform('gamma', this._gamma || 1.0, gl.uniform1f)
40+
const gl = this.gl
41+
this._setUniform(
42+
'colorAdjust',
43+
[this._brightness || 0.0, this._contrast || 1.0, this._gamma || 1.0],
44+
gl.uniform3fv
45+
)
4546
}
4647
}
4748

@@ -53,36 +54,34 @@ ColorShift.before = `
5354
precision lowp float;
5455
# endif
5556
#endif
56-
57+
5758
varying vec2 vTextureCoord;
5859
varying vec4 vColor;
5960
uniform sampler2D uSampler;
60-
uniform float brightness;
61-
uniform float contrast;
62-
uniform float gamma;
63-
61+
uniform vec3 colorAdjust;
62+
6463
const mat3 RGBtoOpponentMat = mat3(0.2814, -0.0971, -0.0930, 0.6938, 0.1458,-0.2529, 0.0638, -0.0250, 0.4665);
65-
const mat3 OpponentToRGBMat = mat3(1.1677, 0.9014, 0.7214, -6.4315, 2.5970, 0.1257, -0.5044, 0.0159, 2.0517);
64+
const mat3 OpponentToRGBMat = mat3(1.1677, 0.9014, 0.7214, -6.4315, 2.5970, 0.1257, -0.5044, 0.0159, 2.0517);
6665
`
6766

68-
ColorShift.after = `
67+
ColorShift.after = `
6968
vec3 brightnessContrast(vec3 value, float brightness, float contrast)
7069
{
7170
return (value - 0.5) * contrast + 0.5 + brightness;
72-
}
73-
71+
}
72+
7473
vec3 updateGamma(vec3 value, float param)
7574
{
7675
return vec3(pow(abs(value.r), param),pow(abs(value.g), param),pow(abs(value.b), param));
77-
}
78-
76+
}
77+
7978
void main(void){
80-
vec4 fragColor = texture2D(uSampler, vTextureCoord);
81-
vec4 color = vision(filter(fragColor)) * vColor;
82-
83-
vec3 bc = brightnessContrast(color.rgb,brightness,contrast);
84-
vec3 ga = updateGamma(bc.rgb, gamma);
85-
86-
gl_FragColor = vec4(ga.rgb, color.a);
87-
}
79+
vec4 fragColor = texture2D(uSampler, vTextureCoord);
80+
vec4 color = filter(fragColor) * vColor;
81+
82+
vec3 bc = brightnessContrast(color.rgb,colorAdjust[0],colorAdjust[1]);
83+
vec3 ga = updateGamma(bc.rgb, colorAdjust[2]);
84+
85+
gl_FragColor = vec4(ga.rgb, color.a);
86+
}
8887
`

src/Accessibility/shaders/DeuteranopiaShader.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,21 @@ export default class DeuteranopiaShader extends ColorShift {}
2323

2424
DeuteranopiaShader.fragmentShaderSource = `
2525
${ColorShift.before}
26-
vec4 filter( vec4 color )
27-
{
28-
vec3 opponentColor = RGBtoOpponentMat * vec3(color.r, color.g, color.b);
29-
opponentColor.x -= opponentColor.y * 1.5;
30-
vec3 rgbColor = OpponentToRGBMat * opponentColor;
31-
return vec4(rgbColor.r, rgbColor.g, rgbColor.b, color.a);
32-
}
33-
3426
vec4 vision(vec4 color)
3527
{
3628
vec4 r = vec4( 0.43, 0.72, -0.15, 0.0 );
3729
vec4 g = vec4( 0.34, 0.57, 0.09, 0.0 );
3830
vec4 b = vec4(-0.02, 0.03, 1.00, 0.0 );
39-
40-
return vec4(dot(color, r), dot(color, g), dot(color, b), color.a);
31+
32+
return vec4(dot(color, r), dot(color, g), dot(color, b), color.a);
33+
}
34+
35+
vec4 filter( vec4 color )
36+
{
37+
vec3 opponentColor = RGBtoOpponentMat * vec3(color.r, color.g, color.b);
38+
opponentColor.x -= opponentColor.y * 1.5;
39+
vec3 rgbColor = OpponentToRGBMat * opponentColor;
40+
return vision(vec4(rgbColor.r, rgbColor.g, rgbColor.b, color.a));
4141
}
42-
${ColorShift.after}
42+
${ColorShift.after}
4343
`

src/Accessibility/shaders/MonochromacyShader.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,9 @@ export default class MonochromacyShader extends ColorShift {}
2424
MonochromacyShader.fragmentShaderSource = `
2525
${ColorShift.before}
2626
vec4 filter( vec4 color )
27-
{
27+
{
2828
float grey = dot(color.rgb, vec3(0.299, 0.587, 0.114));
29-
return vec4(vec3(grey, grey, grey), 1.0 );
30-
}
31-
32-
vec4 vision(vec4 color)
33-
{
34-
return color;
29+
return vec4(vec3(grey, grey, grey), 1.0 );
3530
}
3631
${ColorShift.after}
3732
`

src/Accessibility/shaders/NormalShader.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,5 @@ NeutralShader.fragmentShaderSource = `
2727
{
2828
return color;
2929
}
30-
31-
vec4 vision(vec4 color)
32-
{
33-
return color;
34-
}
3530
${ColorShift.after}
3631
`

src/Accessibility/shaders/ProtanopiaShader.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,22 @@ import ColorShift from './ColorShift'
2222
export default class ProtanopiaShader extends ColorShift {}
2323

2424
ProtanopiaShader.fragmentShaderSource = `
25-
${ColorShift.before}
26-
vec4 filter( vec4 color )
27-
{
28-
vec3 opponentColor = RGBtoOpponentMat * vec3(color.r, color.g, color.b);
29-
opponentColor.x -= opponentColor.y * 1.5;
30-
vec3 rgbColor = OpponentToRGBMat * opponentColor;
31-
return vec4(rgbColor.r, rgbColor.g, rgbColor.b, color.a);
32-
}
33-
25+
${ColorShift.before}
3426
vec4 vision(vec4 color)
3527
{
3628
vec4 r = vec4( 0.20, 0.99, -0.19, 0.0);
3729
vec4 g = vec4( 0.16, 0.79, 0.04, 0.0);
3830
vec4 b = vec4( 0.01, -0.01, 1.00, 0.0);
39-
40-
return vec4(dot(color, r), dot(color, g), dot(color, b), color.a);
31+
32+
return vec4(dot(color, r), dot(color, g), dot(color, b), color.a);
4133
}
42-
${ColorShift.after}
34+
35+
vec4 filter( vec4 color )
36+
{
37+
vec3 opponentColor = RGBtoOpponentMat * vec3(color.r, color.g, color.b);
38+
opponentColor.x -= opponentColor.y * 1.5;
39+
vec3 rgbColor = OpponentToRGBMat * opponentColor;
40+
return vision(vec4(rgbColor.r, rgbColor.g, rgbColor.b, color.a));
41+
}
42+
${ColorShift.after}
4343
`

src/Accessibility/shaders/TritanopiaShader.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,22 @@ import ColorShift from './ColorShift'
2222
export default class TritanopiaShader extends ColorShift {}
2323

2424
TritanopiaShader.fragmentShaderSource = `
25-
${ColorShift.before}
26-
vec4 filter( vec4 color )
27-
{
28-
vec3 opponentColor = RGBtoOpponentMat * vec3(color.r, color.g, color.b);
29-
opponentColor.x -= ((3.0 * opponentColor.z) - opponentColor.y) * 0.25;
30-
vec3 rgbColor = OpponentToRGBMat * opponentColor;
31-
return vec4(rgbColor.r, rgbColor.g, rgbColor.b, color.a);
32-
}
33-
25+
${ColorShift.before}
3426
vec4 vision(vec4 color)
3527
{
3628
vec4 r = vec4( 0.97, 0.11, -0.08, 0.0 );
3729
vec4 g = vec4( 0.02, 0.82, 0.16, 0.0 );
3830
vec4 b = vec4(-0.06, 0.88, 0.18, 0.0 );
39-
40-
return vec4(dot(color, r), dot(color, g), dot(color, b), color.a);
41-
}
42-
${ColorShift.after}
31+
32+
return vec4(dot(color, r), dot(color, g), dot(color, b), color.a);
33+
}
34+
35+
vec4 filter( vec4 color )
36+
{
37+
vec3 opponentColor = RGBtoOpponentMat * vec3(color.r, color.g, color.b);
38+
opponentColor.x -= ((3.0 * opponentColor.z) - opponentColor.y) * 0.25;
39+
vec3 rgbColor = OpponentToRGBMat * opponentColor;
40+
return vision(vec4(rgbColor.r, rgbColor.g, rgbColor.b, color.a));
41+
}
42+
${ColorShift.after}
4343
`

0 commit comments

Comments
 (0)