@@ -193,28 +193,39 @@ void simple_renderer_init(Simple_Renderer *sr)
193193
194194void simple_renderer_reload_shaders (Simple_Renderer * sr )
195195{
196- for (int i = 0 ; i < COUNT_SIMPLE_SHADERS ; ++ i ) {
197- glDeleteProgram (sr -> programs [i ]);
198- }
199-
196+ GLuint programs [COUNT_SIMPLE_SHADERS ];
200197 GLuint shaders [2 ] = {0 };
201198
199+ bool ok = true;
200+
202201 if (!compile_shader_file (vert_shader_file_path , GL_VERTEX_SHADER , & shaders [0 ])) {
203- exit ( 1 ) ;
202+ ok = false ;
204203 }
205204
206205 for (int i = 0 ; i < COUNT_SIMPLE_SHADERS ; ++ i ) {
207206 if (!compile_shader_file (frag_shader_file_paths [i ], GL_FRAGMENT_SHADER , & shaders [1 ])) {
208- exit ( 1 ) ;
207+ ok = false ;
209208 }
210- sr -> programs [i ] = glCreateProgram ();
211- attach_shaders_to_program (shaders , sizeof (shaders ) / sizeof (shaders [0 ]), sr -> programs [i ]);
212- if (!link_program (sr -> programs [i ], __FILE__ , __LINE__ )) {
213- exit ( 1 ) ;
209+ programs [i ] = glCreateProgram ();
210+ attach_shaders_to_program (shaders , sizeof (shaders ) / sizeof (shaders [0 ]), programs [i ]);
211+ if (!link_program (programs [i ], __FILE__ , __LINE__ )) {
212+ ok = false ;
214213 }
215214 glDeleteShader (shaders [1 ]);
216215 }
217216 glDeleteShader (shaders [0 ]);
217+
218+ if (ok ) {
219+ for (int i = 0 ; i < COUNT_SIMPLE_SHADERS ; ++ i ) {
220+ glDeleteProgram (sr -> programs [i ]);
221+ sr -> programs [i ] = programs [i ];
222+ }
223+ printf ("Reloaded shaders successfully!\n" );
224+ } else {
225+ for (int i = 0 ; i < COUNT_SIMPLE_SHADERS ; ++ i ) {
226+ glDeleteProgram (programs [i ]);
227+ }
228+ }
218229}
219230
220231// TODO: Don't render triples of verticies that form a triangle that is completely outside of the screen
0 commit comments