Compiler - implement shader and program queries
TRAC #11599
Signed-off-by: Shannon Woods
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@76 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 6757249..ec4f0fa 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -1928,8 +1928,7 @@
switch (pname)
{
case GL_DELETE_STATUS:
- UNIMPLEMENTED(); // FIXME
- *params = GL_FALSE;
+ *params = programObject->isFlaggedForDeletion();
return;
case GL_LINK_STATUS:
*params = programObject->isLinked();
@@ -1939,12 +1938,10 @@
*params = GL_TRUE;
return;
case GL_INFO_LOG_LENGTH:
- UNIMPLEMENTED(); // FIXME
- *params = 0;
+ *params = programObject->getInfoLogLength();
return;
case GL_ATTACHED_SHADERS:
- UNIMPLEMENTED(); // FIXME
- *params = 2;
+ *params = programObject->getAttachedShadersCount();
return;
case GL_ACTIVE_ATTRIBUTES:
UNIMPLEMENTED(); // FIXME
@@ -1985,7 +1982,19 @@
return error(GL_INVALID_VALUE);
}
- UNIMPLEMENTED(); // FIXME
+ gl::Context *context = gl::getContext();
+
+ if (context)
+ {
+ gl::Program *programObject = context->getProgram(program);
+
+ if (!programObject)
+ {
+ return error(GL_INVALID_VALUE);
+ }
+
+ programObject->getInfoLog(bufsize, length, infolog);
+ }
}
catch(std::bad_alloc&)
{
@@ -2030,19 +2039,16 @@
*params = shaderObject->getType();
return;
case GL_DELETE_STATUS:
- UNIMPLEMENTED(); // FIXME
- *params = GL_FALSE;
+ *params = shaderObject->isFlaggedForDeletion();
return;
case GL_COMPILE_STATUS:
*params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;
return;
case GL_INFO_LOG_LENGTH:
- UNIMPLEMENTED(); // FIXME
- *params = 0;
+ *params = shaderObject->getInfoLogLength();
return;
case GL_SHADER_SOURCE_LENGTH:
- UNIMPLEMENTED(); // FIXME
- *params = 1;
+ *params = shaderObject->getSourceLength();
return;
default:
return error(GL_INVALID_ENUM);
@@ -2067,7 +2073,19 @@
return error(GL_INVALID_VALUE);
}
- UNIMPLEMENTED(); // FIXME
+ gl::Context *context = gl::getContext();
+
+ if (context)
+ {
+ gl::Shader *shaderObject = context->getShader(shader);
+
+ if (!shaderObject)
+ {
+ return error(GL_INVALID_VALUE);
+ }
+
+ shaderObject->getInfoLog(bufsize, length, infolog);
+ }
}
catch(std::bad_alloc&)
{
@@ -2102,7 +2120,19 @@
return error(GL_INVALID_VALUE);
}
- UNIMPLEMENTED(); // FIXME
+ gl::Context *context = gl::getContext();
+
+ if (context)
+ {
+ gl::Shader *shaderObject = context->getShader(shader);
+
+ if (!shaderObject)
+ {
+ return error(GL_INVALID_VALUE);
+ }
+
+ shaderObject->getSource(bufsize, length, source);
+ }
}
catch(std::bad_alloc&)
{