Implements correct error handling for DetachShader
TRAC #11663
Signed-off-by: Andrew Lewycky
Signed-off-by: Daniel Koch
Author: Shannon Woods
git-svn-id: http://angleproject.googlecode.com/svn/trunk@125 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 61fbed1..13f6e21 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -1108,12 +1108,35 @@
if (context)
{
+
gl::Program *programObject = context->getProgram(program);
gl::Shader *shaderObject = context->getShader(shader);
-
- if (!programObject || !shaderObject)
+
+ if (!programObject)
{
- return error(GL_INVALID_VALUE);
+ 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);
+ }
+ else
+ {
+ return error(GL_INVALID_OPERATION);
+ }
}
if (!programObject->detachShader(shaderObject))