aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2017-12-13 20:10:13 +0100
committerRay <raysan5@gmail.com>2017-12-13 20:10:13 +0100
commit2388cbc3cd73ab228a4d60f05becd51035c703ea (patch)
tree9f87cc026f46fffd5bb241b862b5cf1611410479 /src
parenta6f9cc5629841b7adf3d9ff21eaa2aaabb3e4bc1 (diff)
downloadraylib-2388cbc3cd73ab228a4d60f05becd51035c703ea.tar.gz
raylib-2388cbc3cd73ab228a4d60f05becd51035c703ea.zip
Corrected crash on shader loading
If shader file could not be found on loading it crashed, instead added fallback to default shader!
Diffstat (limited to 'src')
-rw-r--r--src/rlgl.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/rlgl.c b/src/rlgl.c
index 6ae7df4c..cdce92d0 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -2365,38 +2365,49 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
- unsigned int vertexShaderId, fragmentShaderId;
+ unsigned int vertexShaderId = defaultVShaderId;
+ unsigned int fragmentShaderId = defaultFShaderId;
- if (vsFileName == NULL) vertexShaderId = defaultVShaderId;
- else
+ if (vsFileName != NULL)
{
char *vShaderStr = LoadText(vsFileName);
- vertexShaderId = CompileShader(vShaderStr, GL_VERTEX_SHADER);
- free(vShaderStr);
+
+ if (vShaderStr != NULL)
+ {
+ vertexShaderId = CompileShader(vShaderStr, GL_VERTEX_SHADER);
+ free(vShaderStr);
+ }
}
- if (fsFileName == NULL) fragmentShaderId = defaultVShaderId;
- else
+ if (fsFileName != NULL)
{
char* fShaderStr = LoadText(fsFileName);
- fragmentShaderId = CompileShader(fShaderStr, GL_FRAGMENT_SHADER);
- free(fShaderStr);
+
+ if (fShaderStr != NULL)
+ {
+ fragmentShaderId = CompileShader(fShaderStr, GL_FRAGMENT_SHADER);
+ free(fShaderStr);
+ }
}
- shader.id = LoadShaderProgram(vertexShaderId, fragmentShaderId);
+ if ((vertexShaderId == defaultVShaderId) && (fragmentShaderId == defaultFShaderId)) shader = defaultShader;
+ else
+ {
+ shader.id = LoadShaderProgram(vertexShaderId, fragmentShaderId);
- if (vertexShaderId != defaultVShaderId) glDeleteShader(vertexShaderId);
- if (fragmentShaderId != defaultFShaderId) glDeleteShader(fragmentShaderId);
+ if (vertexShaderId != defaultVShaderId) glDeleteShader(vertexShaderId);
+ if (fragmentShaderId != defaultFShaderId) glDeleteShader(fragmentShaderId);
- if (shader.id == 0)
- {
- TraceLog(LOG_WARNING, "Custom shader could not be loaded");
- shader = defaultShader;
+ if (shader.id == 0)
+ {
+ TraceLog(LOG_WARNING, "Custom shader could not be loaded");
+ shader = defaultShader;
+ }
+
+ // After shader loading, we TRY to set default location names
+ if (shader.id > 0) SetShaderDefaultLocations(&shader);
}
- // After shader loading, we TRY to set default location names
- if (shader.id > 0) SetShaderDefaultLocations(&shader);
-
// Get available shader uniforms
// NOTE: This information is useful for debug...
int uniformCount = -1;