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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
enum effect_display_type
{
standard,
levels
};
struct effect_supported_renderers
{
bool32 renderer_effect_gpu;
#if ARM
bool32 renderer_effect_neon;
#else
bool32 renderer_effect_avx;
bool32 renderer_effect_sse;
#endif
bool32 renderer_effect_scalar;
};
struct effect_header
{
char *Name;
void (*func)(source *, layer_bitmap_info *, memory *, property_channel []);
uint16 NumberOfProperties;
effect_display_type DisplayType;
// effect_supported_renderers SupportedRenderers;
property_header PropertyHeader[MAX_PROPERTIES_PER_EFFECT];
};
struct effect {
char *Name;
void (*func)(source *, layer_bitmap_info *, memory *, property_channel []);
uint16 NumberOfProperties;
effect_display_type DisplayType;
property_channel Property[MAX_PROPERTIES_PER_EFFECT];
bool32 IsSelected = 0;
bool32 UIIsCollapsed = 0;
bool32 IsActive = 1;
uint32 ImGuiID;
};
// TODO(fox): It'd probably be easier if we just switched to constructors at some point.
static effect_header EffectList[] {
{
"Solid Color",
&Effect_DrawColor, 2, standard, {
{"Color", { V4(0.0f, 0.0f, 0.0f, 1.0f) }, type_color, { NORMALIZED_COL_MIN }, { NORMALIZED_COL_MAX} },
{"Blend mode", { blend_normal }, type_blendmode},
}
},
{
"Levels",
&Effect_Levels, 6, levels, {
{"Start point", {0.0f}, type_real},
{"Mid point", {1.0f}, type_real},
{"End point", {1.0f}, type_real},
{"Start Col", { V4(0.0f)}, type_color},
{"Mid Col", { V4(1.0f)}, type_color},
{"End Col", { V4(1.0f)}, type_color},
}
},
{
"Gaussian Blur",
&Effect_GaussianBlur, 1, standard, {
{"Radius", {0.0f}, type_real, 0.0f, 500.0f},
}
}
};
|