mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-27 21:48:31 +00:00
Corrected crash on shader loading
If shader file could not be found on loading it crashed, instead added fallback to default shader!
This commit is contained in:
21
src/rlgl.c
21
src/rlgl.c
@@ -2365,24 +2365,34 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
|
|||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#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;
|
if (vsFileName != NULL)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
char *vShaderStr = LoadText(vsFileName);
|
char *vShaderStr = LoadText(vsFileName);
|
||||||
|
|
||||||
|
if (vShaderStr != NULL)
|
||||||
|
{
|
||||||
vertexShaderId = CompileShader(vShaderStr, GL_VERTEX_SHADER);
|
vertexShaderId = CompileShader(vShaderStr, GL_VERTEX_SHADER);
|
||||||
free(vShaderStr);
|
free(vShaderStr);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fsFileName == NULL) fragmentShaderId = defaultVShaderId;
|
if (fsFileName != NULL)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
char* fShaderStr = LoadText(fsFileName);
|
char* fShaderStr = LoadText(fsFileName);
|
||||||
|
|
||||||
|
if (fShaderStr != NULL)
|
||||||
|
{
|
||||||
fragmentShaderId = CompileShader(fShaderStr, GL_FRAGMENT_SHADER);
|
fragmentShaderId = CompileShader(fShaderStr, GL_FRAGMENT_SHADER);
|
||||||
free(fShaderStr);
|
free(fShaderStr);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((vertexShaderId == defaultVShaderId) && (fragmentShaderId == defaultFShaderId)) shader = defaultShader;
|
||||||
|
else
|
||||||
|
{
|
||||||
shader.id = LoadShaderProgram(vertexShaderId, fragmentShaderId);
|
shader.id = LoadShaderProgram(vertexShaderId, fragmentShaderId);
|
||||||
|
|
||||||
if (vertexShaderId != defaultVShaderId) glDeleteShader(vertexShaderId);
|
if (vertexShaderId != defaultVShaderId) glDeleteShader(vertexShaderId);
|
||||||
@@ -2396,6 +2406,7 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
|
|||||||
|
|
||||||
// After shader loading, we TRY to set default location names
|
// After shader loading, we TRY to set default location names
|
||||||
if (shader.id > 0) SetShaderDefaultLocations(&shader);
|
if (shader.id > 0) SetShaderDefaultLocations(&shader);
|
||||||
|
}
|
||||||
|
|
||||||
// Get available shader uniforms
|
// Get available shader uniforms
|
||||||
// NOTE: This information is useful for debug...
|
// NOTE: This information is useful for debug...
|
||||||
|
Reference in New Issue
Block a user