Skip to content

Commit 34bd03c

Browse files
committed
Add a photo-sensitivity filter
This adds 2 filters actually: one only adjusting the colors, and the other combining the color adjustment with negative-lightness. These filters are not based on much data but on the feedback from a user suffering from visual strain. The photosensitivity-1 filter is the base transformation, mostly useful in combination with one of the negative filters (negative-lightness would be the go-to recommendation). photosensitivity-1-negative is the same filter but combined with negative-lightness for a ready-to-go experience, which plays nicer with dynamic filter change.
1 parent 43b925b commit 34bd03c

File tree

4 files changed

+246
-0
lines changed

4 files changed

+246
-0
lines changed

data/filters/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ filters_DATA = \
1313
nightmodeb \
1414
nightmodec \
1515
nightmoded \
16+
photosensitivity-1 \
17+
photosensitivity-1-negative \
1618
protanopia \
1719
sepia \
1820
swap-green-blue \

data/filters/photosensitivity-1

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
!!ARBfp1.0
2+
TEMP tex, temp;
3+
TEX tex, fragment.texcoord[0], texture[0], RECT;
4+
MUL temp.r, tex.r, 0.6;
5+
MUL temp.g, tex.g, 0.3;
6+
MUL temp.b, tex.b, 0.15;
7+
MOV temp.a, tex.a;
8+
MOV result.color, temp;
9+
END
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
# This is a combination of negative-lightness and photosensitivity-1
2+
!!ARBfp1.0
3+
# cgc version 3.1.0013, build date Apr 24 2012
4+
# command line args: -oglsl -profile arbfp1
5+
# source file: negative-lightness.frag
6+
#vendor NVIDIA Corporation
7+
#version 3.1.0.13
8+
#profile arbfp1
9+
#program negative_lightness_fragment
10+
#var float4 gl_FragColor : $vout.COLOR : COL : -1 : 1
11+
#const c0 = 1 0 0.5 2
12+
#const c1 = 4 60 360 120
13+
#const c2 = 180 240 0.016666668
14+
TEMP R0;
15+
TEMP R1;
16+
TEMP R2;
17+
TEMP R3;
18+
TEMP temp, neg;
19+
PARAM c0 = { 1.0, 0.0, 0.5, 2.0 };
20+
PARAM c1 = { 360.0, 4.0, 60.0, 120.0 };
21+
PARAM c2 = { 180.0, 240.0, 0.016666668 };
22+
TEX temp, fragment.texcoord[0], texture[0], RECT;
23+
MOV neg.a, temp.a;
24+
MOV R0.xyz, temp;
25+
26+
27+
ADD R1.x, R0, -R0.y;
28+
CMP R0.w, -R1.x, R0.x, R0.y;
29+
CMP R1.z, R1.x, R0.x, R0.y;
30+
ADD R1.w, R0.z, -R1.z;
31+
CMP R1.z, R1.w, R0, R1;
32+
ADD R1.y, R0.z, -R0.w;
33+
CMP R1.w, -R1.y, R0.z, R0;
34+
ADD R1.y, R1.w, -R1.z;
35+
ADD R0.w, -R1, R0.x;
36+
ABS R0.w, R0;
37+
RCP R2.y, R1.y;
38+
ADD R2.x, R0.y, -R0.z;
39+
MUL R3.x, R2.y, R2;
40+
ABS R2.x, R1.y;
41+
CMP R2.w, -R0, c0.y, c0.x;
42+
CMP R0.w, -R2.x, c0.x, c0.y;
43+
MUL R2.z, R0.w, R2.w;
44+
CMP R2.z, -R2, R3.x, c0.y;
45+
ADD R3.x, -R1.w, R0.y;
46+
ABS R2.w, R2;
47+
CMP R0.y, -R2.w, c0, c0.x;
48+
ABS R2.w, R3.x;
49+
ADD R3.x, R0.z, -R0;
50+
MUL R0.y, R0.w, R0;
51+
CMP R2.w, -R2, c0.y, c0.x;
52+
MUL R0.x, R0.y, R2.w;
53+
MAD R3.x, R2.y, R3, c0.w;
54+
CMP R0.x, -R0, R3, R2.z;
55+
ADD R2.z, -R1.w, R0;
56+
ABS R0.z, R2.w;
57+
CMP R0.z, -R0, c0.y, c0.x;
58+
MUL R0.y, R0, R0.z;
59+
ABS R2.z, R2;
60+
CMP R2.z, -R2, c0.y, c0.x;
61+
MUL R0.y, R0, R2.z;
62+
MAD R0.z, R1.x, R2.y, c1.y;
63+
CMP R0.x, -R0.y, R0.z, R0;
64+
ADD R0.y, R1.w, R1.z;
65+
MUL R0.z, R0.x, c1;
66+
CMP R0.x, -R2, R0.z, R0;
67+
MUL R0.z, R0.y, c0;
68+
RCP R1.z, R0.y;
69+
SGE R1.x, c0.z, R0.z;
70+
MUL R1.w, R1.y, R1.z;
71+
MUL R1.z, R0.w, R1.x;
72+
CMP R1.w, -R1.z, R1, c0.y;
73+
ADD R0.z, -R0, c0.x;
74+
ADD R1.z, -R0.y, c0.w;
75+
ABS R1.x, R1;
76+
CMP R0.y, -R1.x, c0, c0.x;
77+
RCP R1.x, R1.z;
78+
MUL R1.x, R1.y, R1;
79+
MUL R0.y, R0.w, R0;
80+
CMP R1.x, -R0.y, R1, R1.w;
81+
SLT R0.y, R0.x, c0;
82+
ADD R1.y, R0.x, c1.x;
83+
MUL R0.y, R0.w, R0;
84+
CMP R0.y, -R0, R1, R0.x;
85+
ADD R0.w, R0.y, -c1;
86+
ABS R0.x, R1;
87+
CMP R0.x, -R0, c0.y, c0;
88+
ABS R0.x, R0;
89+
CMP R0.x, -R0, c0.y, c0;
90+
SLT R1.y, c1.x, R0.w;
91+
ADD R1.z, R0.w, -c1.x;
92+
MUL R1.y, R0.x, R1;
93+
CMP R0.w, -R1.y, R1.z, R0;
94+
SLT R1.y, c1.x, R0.w;
95+
MUL R1.y, R1, R0.x;
96+
ADD R1.z, R0.w, -c1.x;
97+
CMP R0.w, -R1.y, R1.z, R0;
98+
SLT R1.y, R0.w, c0;
99+
MUL R1.y, R1, R0.x;
100+
ADD R1.z, R0.w, c1.x;
101+
CMP R0.w, -R1.y, R1.z, R0;
102+
SLT R1.y, R0.w, c0;
103+
MUL R1.y, R1, R0.x;
104+
ADD R1.z, R0.w, c1.x;
105+
CMP R1.z, -R1.y, R1, R0.w;
106+
ADD R1.y, R1.x, R0.z;
107+
MAD R2.x, R1, -R0.z, R1.y;
108+
SLT R1.w, R1.z, c1.z;
109+
ABS R0.w, R1;
110+
MUL R1.w, R1, R0.x;
111+
SGE R1.y, c0.z, R0.z;
112+
ADD R2.y, R1.x, c0.x;
113+
ABS R1.x, R1.y;
114+
MUL R1.y, R0.z, R2;
115+
CMP R1.x, -R1, c0.y, c0;
116+
CMP R1.y, -R1.x, R2.x, R1;
117+
CMP R0.w, -R0, c0.y, c0.x;
118+
MUL R2.x, R0.w, R0;
119+
MAD R0.w, R0.z, c0, -R1.y;
120+
ADD R1.x, -R0.w, R1.y;
121+
SLT R2.z, R1, c2.x;
122+
MUL R2.y, R2.x, R2.z;
123+
MUL R2.w, R1.z, R1.x;
124+
MAD R2.w, R2, c2.z, R0;
125+
CMP R2.w, -R1, R2, R0.z;
126+
CMP R2.y, -R2, R1, R2.w;
127+
ABS R2.z, R2;
128+
CMP R1.w, -R2.z, c0.y, c0.x;
129+
MUL R1.w, R2.x, R1;
130+
ADD R2.z, -R1, c2.y;
131+
SLT R2.x, R1.z, c2.y;
132+
MUL R1.z, R1.w, R2.x;
133+
SLT R2.w, c1.x, R0.y;
134+
MUL R2.z, R1.x, R2;
135+
MAD R2.z, R2, c2, R0.w;
136+
CMP R2.y, -R1.z, R2.z, R2;
137+
ADD R3.x, R0.y, -c1;
138+
MUL R2.w, R0.x, R2;
139+
CMP R2.w, -R2, R3.x, R0.y;
140+
SLT R3.x, c1, R2.w;
141+
MUL R3.x, R0, R3;
142+
ADD R3.y, R2.w, -c1.x;
143+
CMP R2.w, -R3.x, R3.y, R2;
144+
SLT R1.z, R2.w, c0.y;
145+
ADD R2.z, R2.w, c1.x;
146+
MUL R1.z, R0.x, R1;
147+
CMP R1.z, -R1, R2, R2.w;
148+
SLT R2.z, R1, c0.y;
149+
ADD R2.w, R1.z, c1.x;
150+
MUL R2.z, R0.x, R2;
151+
CMP R1.z, -R2, R2.w, R1;
152+
ABS R2.x, R2;
153+
CMP R2.z, -R2.x, c0.y, c0.x;
154+
MUL R1.w, R1, R2.z;
155+
SLT R2.x, R1.z, c1.z;
156+
ABS R2.z, R2.x;
157+
CMP neg.z, -R1.w, R0.w, R2.y;
158+
CMP R1.w, -R2.z, c0.y, c0.x;
159+
MUL R2.w, R1.x, R1.z;
160+
SLT R2.z, R1, c2.x;
161+
MUL R1.w, R0.x, R1;
162+
MUL R2.y, R1.w, R2.z;
163+
ABS R2.z, R2;
164+
CMP R2.z, -R2, c0.y, c0.x;
165+
MUL R1.w, R1, R2.z;
166+
ADD R2.z, -R1, c2.y;
167+
MAD R2.w, R2, c2.z, R0;
168+
MUL R2.x, R0, R2;
169+
CMP R2.x, -R2, R2.w, R0.z;
170+
CMP R2.x, -R2.y, R1.y, R2;
171+
SLT R2.y, R1.z, c2;
172+
ADD R2.w, R0.y, c1;
173+
MUL R2.z, R1.x, R2;
174+
MAD R0.y, R2.z, c2.z, R0.w;
175+
MUL R1.z, R1.w, R2.y;
176+
SLT R2.z, c1.x, R2.w;
177+
CMP R0.y, -R1.z, R0, R2.x;
178+
MUL R2.z, R0.x, R2;
179+
ADD R3.x, R2.w, -c1;
180+
CMP R2.z, -R2, R3.x, R2.w;
181+
SLT R1.z, c1.x, R2;
182+
MUL R1.z, R0.x, R1;
183+
ADD R2.x, R2.z, -c1;
184+
CMP R2.x, -R1.z, R2, R2.z;
185+
ABS R1.z, R2.y;
186+
SLT R2.y, R2.x, c0;
187+
ADD R2.z, R2.x, c1.x;
188+
MUL R2.y, R0.x, R2;
189+
CMP R2.y, -R2, R2.z, R2.x;
190+
CMP R2.x, -R1.z, c0.y, c0;
191+
MUL R1.w, R1, R2.x;
192+
SLT R1.z, R2.y, c0.y;
193+
ADD R2.z, R2.y, c1.x;
194+
MUL R1.z, R0.x, R1;
195+
CMP R1.z, -R1, R2, R2.y;
196+
CMP neg.y, -R1.w, R0.w, R0;
197+
SLT R2.x, R1.z, c1.z;
198+
MUL R2.z, R1.x, R1;
199+
ABS R0.y, R2.x;
200+
CMP R0.y, -R0, c0, c0.x;
201+
MUL R0.y, R0.x, R0;
202+
SLT R1.w, R1.z, c2.x;
203+
MUL R2.y, R0, R1.w;
204+
MUL R0.x, R0, R2;
205+
MAD R2.z, R2, c2, R0.w;
206+
CMP R0.z, -R0.x, R2, R0;
207+
ABS R0.x, R1.w;
208+
CMP R1.w, -R2.y, R1.y, R0.z;
209+
SLT R0.z, R1, c2.y;
210+
CMP R0.x, -R0, c0.y, c0;
211+
MUL R0.x, R0.y, R0;
212+
ABS R0.y, R0.z;
213+
MUL R1.y, R0.x, R0.z;
214+
ADD R1.z, -R1, c2.y;
215+
MUL R0.z, R1.x, R1;
216+
CMP R0.y, -R0, c0, c0.x;
217+
MAD R0.z, R0, c2, R0.w;
218+
CMP R0.z, -R1.y, R0, R1.w;
219+
MUL R0.x, R0, R0.y;
220+
CMP neg.x, -R0, R0.w, R0.z;
221+
222+
223+
# --- photosensitivity-1 BEGIN
224+
MUL neg.r, neg.r, 0.6;
225+
MUL neg.g, neg.g, 0.3;
226+
MUL neg.b, neg.b, 0.15;
227+
# --- photosensitivity-1 END
228+
229+
MUL neg.rgb, neg.a, neg;
230+
MUL neg, fragment.color, neg;
231+
MOV result.color, neg;
232+
END
233+
# 154 instructions, 4 R-regs

metadata/colorfilter.xml.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@
7575
<value>nightmodeb</value>
7676
<value>nightmodec</value>
7777
<value>nightmoded</value>
78+
<value>photosensitivity-1</value>
79+
<value>photosensitivity-1-negative</value>
7880
<value>protanopia</value>
7981
<value>sepia</value>
8082
<value>swap-green-blue</value>

0 commit comments

Comments
 (0)