REVIEWED: Issue with shader linkage
This commit is contained in:
parent
50a716c0d9
commit
2edf5a9584
2 changed files with 11 additions and 6 deletions
11
src/rcore.c
11
src/rcore.c
|
@ -2446,10 +2446,6 @@ Shader LoadShader(const char *vsFileName, const char *fsFileName)
|
||||||
Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
|
Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
|
||||||
{
|
{
|
||||||
Shader shader = { 0 };
|
Shader shader = { 0 };
|
||||||
shader.locs = (int *)RL_CALLOC(RL_MAX_SHADER_LOCATIONS, sizeof(int));
|
|
||||||
|
|
||||||
// NOTE: All locations must be reseted to -1 (no location)
|
|
||||||
for (int i = 0; i < RL_MAX_SHADER_LOCATIONS; i++) shader.locs[i] = -1;
|
|
||||||
|
|
||||||
shader.id = rlLoadShaderCode(vsCode, fsCode);
|
shader.id = rlLoadShaderCode(vsCode, fsCode);
|
||||||
|
|
||||||
|
@ -2465,6 +2461,11 @@ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
|
||||||
// vertex texcoord2 location = 5
|
// vertex texcoord2 location = 5
|
||||||
|
|
||||||
// NOTE: If any location is not found, loc point becomes -1
|
// NOTE: If any location is not found, loc point becomes -1
|
||||||
|
|
||||||
|
shader.locs = (int *)RL_CALLOC(RL_MAX_SHADER_LOCATIONS, sizeof(int));
|
||||||
|
|
||||||
|
// All locations reseted to -1 (no location)
|
||||||
|
for (int i = 0; i < RL_MAX_SHADER_LOCATIONS; i++) shader.locs[i] = -1;
|
||||||
|
|
||||||
// Get handles to GLSL input attibute locations
|
// Get handles to GLSL input attibute locations
|
||||||
shader.locs[SHADER_LOC_VERTEX_POSITION] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION);
|
shader.locs[SHADER_LOC_VERTEX_POSITION] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION);
|
||||||
|
@ -2497,6 +2498,8 @@ void UnloadShader(Shader shader)
|
||||||
if (shader.id != rlGetShaderIdDefault())
|
if (shader.id != rlGetShaderIdDefault())
|
||||||
{
|
{
|
||||||
rlUnloadShaderProgram(shader.id);
|
rlUnloadShaderProgram(shader.id);
|
||||||
|
|
||||||
|
// NOTE: If shader loading failed, it should be 0
|
||||||
RL_FREE(shader.locs);
|
RL_FREE(shader.locs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3643,12 +3643,14 @@ unsigned int rlLoadShaderCode(const char *vsCode, const char *fsCode)
|
||||||
// NOTE: We detach shader before deletion to make sure memory is freed
|
// NOTE: We detach shader before deletion to make sure memory is freed
|
||||||
if (vertexShaderId != RLGL.State.defaultVShaderId)
|
if (vertexShaderId != RLGL.State.defaultVShaderId)
|
||||||
{
|
{
|
||||||
glDetachShader(id, vertexShaderId);
|
// WARNING: Shader program linkage could fail and returned id is 0
|
||||||
|
if (id > 0) glDetachShader(id, vertexShaderId);
|
||||||
glDeleteShader(vertexShaderId);
|
glDeleteShader(vertexShaderId);
|
||||||
}
|
}
|
||||||
if (fragmentShaderId != RLGL.State.defaultFShaderId)
|
if (fragmentShaderId != RLGL.State.defaultFShaderId)
|
||||||
{
|
{
|
||||||
glDetachShader(id, fragmentShaderId);
|
// WARNING: Shader program linkage could fail and returned id is 0
|
||||||
|
if (id > 0) glDetachShader(id, fragmentShaderId);
|
||||||
glDeleteShader(fragmentShaderId);
|
glDeleteShader(fragmentShaderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue