1 #ifndef SRC_WX_GLSL_H_
2 #define SRC_WX_GLSL_H_
3 
4 #define MAX_PREV 7
5 
6 #define MAX_SHADERS 20
7 #define MAX_TEXTURES 20
8 #define MAX_PARAMETERS 100
9 
10 #define MAX_USER_SHADERS 20
11 //#define SDL2_SHADER_DEBUG
12 
13 struct shader_scale {
14         int mode[2];
15         float value[2];
16 };
17 
18 struct shader_state {
19         float input_size[2];
20         float input_texture_size[2];
21         float output_texture_size[2];
22         float output_size[2];
23         float tex_coords[8];
24 };
25 
26 struct shader_vbo {
27         int vertex_coord;
28         int tex_coord;
29         int color;
30 };
31 
32 struct shader_texture {
33         int id;
34         int width;
35         int height;
36         int type;
37         int internal_format;
38         int format;
39         int min_filter;
40         int mag_filter;
41         int wrap_mode;
42         void* data;
43         int mipmap;
44 };
45 
46 struct shader_lut_texture {
47         char name[50];
48         struct shader_texture texture;
49 };
50 
51 struct shader_fbo {
52         int id;
53         struct shader_texture texture;
54         int srgb;
55         int mipmap_input;
56 };
57 
58 struct shader_prev {
59         struct shader_fbo fbo;
60         struct shader_vbo vbo;
61 };
62 
63 struct shader_input {
64         int texture;
65         int input_size;
66         int texture_size;
67         int tex_coord;
68 };
69 
70 struct shader_uniforms {
71         int mvp_matrix;
72         int vertex_coord;
73         int tex_coord;
74         int color;
75 
76         int texture;
77         int input_size;
78         int texture_size;
79         int output_size;
80 
81         int frame_count;
82         int frame_direction;
83 
84         struct shader_input orig;
85         struct shader_input pass[MAX_SHADERS];
86         struct shader_input prev_pass[MAX_SHADERS];
87         struct shader_input prev[MAX_PREV];
88 
89         int parameters[MAX_PARAMETERS];
90         int lut_textures[MAX_TEXTURES];
91 };
92 
93 struct shader_program {
94         int vertex_shader;
95         int fragment_shader;
96         int id;
97 };
98 
99 struct shader_parameter {
100         char id[64];
101         char description[64];
102         float default_value;
103         float value;
104         float min;
105         float max;
106         float step;
107 };
108 
109 struct shader_pass {
110         int active;
111         char alias[64];
112         int vertex_array;
113         int frame_count_mod;
114         struct shader_program program;
115         struct shader_uniforms uniforms;
116         struct shader_fbo fbo;
117         struct shader_vbo vbo;
118         struct shader_state state;
119         struct shader_scale scale;
120 };
121 
122 struct glsl_shader {
123         int active;
124         char name[64];
125 
126         int num_passes;
127         struct shader_pass passes[MAX_SHADERS];
128 
129         int num_lut_textures;
130         struct shader_lut_texture lut_textures[MAX_TEXTURES];
131 
132         int num_parameters;
133         struct shader_parameter parameters[MAX_PARAMETERS];
134 
135         struct shader_pass prev_scene;
136         struct shader_prev prev[MAX_PREV+1];
137 
138         int last_prev_update;
139         int has_prev;
140 
141         float shader_refresh_rate;
142 
143         int input_filter_linear;
144 };
145 
146 typedef struct glsl_t {
147         int num_shaders;
148         struct glsl_shader shaders[MAX_USER_SHADERS];
149         struct shader_pass scene;
150         struct shader_pass final_pass;
151         struct shader_pass fs_color;
152 #ifdef SDL2_SHADER_DEBUG
153         struct shader_pass debug;
154 #endif
155         int srgb;
156 } glsl_t;
157 
158 #endif
159