Skip to content

Commit 3129cfb

Browse files
committed
Merge remote-tracking branch 'tsoding/master'
2 parents fbabd0d + 7e61499 commit 3129cfb

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

src/simple_renderer.c

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -193,28 +193,39 @@ void simple_renderer_init(Simple_Renderer *sr)
193193

194194
void 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

Comments
 (0)