aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/plugins.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/plugins.h')
-rw-r--r--include/plugins.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/include/plugins.h b/include/plugins.h
new file mode 100644
index 0000000..7588b61
--- /dev/null
+++ b/include/plugins.h
@@ -0,0 +1,38 @@
+#ifndef GSR_PLUGINS_H
+#define GSR_PLUGINS_H
+
+#include "../plugin/plugin.h"
+#include <stdbool.h>
+#include "color_conversion.h"
+
+#define GSR_MAX_PLUGINS 128
+
+typedef bool (*gsr_plugin_init_func)(const gsr_plugin_init_params *params, gsr_plugin_init_return *ret);
+typedef void (*gsr_plugin_deinit_func)(void *userdata);
+
+typedef struct {
+ gsr_plugin_init_return data;
+ void *lib;
+ gsr_plugin_init_func gsr_plugin_init;
+ gsr_plugin_deinit_func gsr_plugin_deinit;
+} gsr_plugin;
+
+typedef struct {
+ gsr_plugin plugins[GSR_MAX_PLUGINS];
+ int num_plugins;
+
+ gsr_plugin_init_params init_params;
+ gsr_egl *egl;
+
+ unsigned int texture;
+ gsr_color_conversion color_conversion;
+} gsr_plugins;
+
+bool gsr_plugins_init(gsr_plugins *self, gsr_plugin_init_params init_params, gsr_egl *egl);
+/* Plugins are unloaded in reverse order */
+void gsr_plugins_deinit(gsr_plugins *self);
+
+bool gsr_plugins_load_plugin(gsr_plugins *self, const char *plugin_filepath);
+void gsr_plugins_draw(gsr_plugins *self);
+
+#endif /* GSR_PLUGINS_H */