summaryrefslogtreecommitdiff
path: root/effects.h
blob: 793cadf8cd486f1a639cb33b15916485d30f0e23 (plain)
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},
        }
    }
};