# HG changeset patch # User Matti Hamalainen # Date 1574394554 -7200 # Node ID c1897cfc846342d3c80a2eb55f1d9198ddaa332c # Parent f080349584b8be30b5e5399f6ae92199f50bd989 Add shader compilation error handling. diff -r f080349584b8 -r c1897cfc8463 gldragon.cpp --- a/gldragon.cpp Fri Nov 22 05:29:34 2019 +0200 +++ b/gldragon.cpp Fri Nov 22 05:49:14 2019 +0200 @@ -254,15 +254,26 @@ } -GLuint dmCompileShader(const GLenum stype, const std::string &src) +bool dmCompileShader(const GLenum stype, const std::string &src, GLuint &shader) { - GLuint shader = glCreateShader(stype); + GLint status; const char *tmp = src.c_str(); + shader = glCreateShader(stype); glShaderSource(shader, 1, &tmp, 0); glCompileShader(shader); - return shader; + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + if (status == GL_TRUE) + return true; + else + { + char err[512]; + glGetShaderInfoLog(shader, sizeof(err), NULL, err); + printf("ERROR: %s\n", + err); + return false; + } } @@ -420,8 +431,10 @@ { for (DMModel &model : scene.models) { - model.id_fs = dmCompileShader(GL_FRAGMENT_SHADER, model.fragShaderStr); - model.id_vs = dmCompileShader(GL_VERTEX_SHADER, model.vertShaderStr); + if (!dmCompileShader(GL_FRAGMENT_SHADER, model.fragShaderStr, model.id_fs) || + !dmCompileShader(GL_VERTEX_SHADER, model.vertShaderStr, model.id_vs)) + goto exit; + dmLinkModelShaders(model); } }