-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathoperators.h
53 lines (48 loc) · 1.11 KB
/
operators.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
struct OperatorPixels {
struct {
uint8_t r, g, b;
} pix0;
struct {
uint8_t r, g, b;
} pix1;
struct {
uint8_t r, g, b;
} paint;
uint8_t brightness;
};
// fade between pix0 and inverted pix0
// depending on pix1 brightness
void invert_op(struct OperatorPixels &p) {
uint8_t bright = p.brightness;
if (bright == 0)
return;
uint8_t ir = ~p.pix0.r;
uint8_t ig = ~p.pix0.g;
uint8_t ib = ~p.pix0.b;
if (bright == 255) {
p.pix0.r = ir;
p.pix0.g = ig;
p.pix0.b = ib;
return;
}
p.pix0.r = bblend8(p.pix0.r, ir, bright);
p.pix0.g = bblend8(p.pix0.g, ig, bright);
p.pix0.b = bblend8(p.pix0.b, ib, bright);
}
// fade between pix0 and "paint" colour
// depending on pix1 brightness
void alphamask_op(struct OperatorPixels &p) {
uint8_t bright = p.brightness;
if (bright == 0)
return;
else if (bright == 255) {
p.pix0.r = p.paint.r;
p.pix0.g = p.paint.g;
p.pix0.b = p.paint.b;
return;
}
p.pix0.r = bblend8(p.pix0.r, p.paint.r, bright);
p.pix0.g = bblend8(p.pix0.g, p.paint.g, bright);
p.pix0.b = bblend8(p.pix0.b, p.paint.b, bright);
}