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; struct gl_effect { uint32 ShaderProgram; }; gl_effect GL_Effect; property_channel Property[MAX_PROPERTIES_PER_EFFECT]; bool32 UIIsCollapsed = 0; bool32 IsActive = 1; }; 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}, } } };