Implements correct error handling for DetachShader

TRAC #11663 Signed-off-by: Andrew Lewycky Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/trunk@125 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 79f6677d
...@@ -1108,13 +1108,36 @@ void __stdcall glDetachShader(GLuint program, GLuint shader) ...@@ -1108,13 +1108,36 @@ void __stdcall glDetachShader(GLuint program, GLuint shader)
if (context) if (context)
{ {
gl::Program *programObject = context->getProgram(program); gl::Program *programObject = context->getProgram(program);
gl::Shader *shaderObject = context->getShader(shader); gl::Shader *shaderObject = context->getShader(shader);
if (!programObject || !shaderObject) if (!programObject)
{
gl::Shader *shaderByProgramHandle;
shaderByProgramHandle = context->getShader(program);
if (!shaderByProgramHandle)
{
return error(GL_INVALID_VALUE);
}
else
{
return error(GL_INVALID_OPERATION);
}
}
if (!shaderObject)
{
gl::Program *programByShaderHandle = context->getProgram(shader);
if (!programByShaderHandle)
{ {
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
else
{
return error(GL_INVALID_OPERATION);
}
}
if (!programObject->detachShader(shaderObject)) if (!programObject->detachShader(shaderObject))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment