Undecorate uniform names when computing max length
TRAC #12050
Signed-off-by: Andrew Lewycky
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@200 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Program.cpp b/src/libGLESv2/Program.cpp
index 10ab4a1..aa74319 100644
--- a/src/libGLESv2/Program.cpp
+++ b/src/libGLESv2/Program.cpp
@@ -1342,7 +1342,7 @@
return 0;
}
-// This methods needs to match OutputHLSL::decorate
+// This method needs to match OutputHLSL::decorate
std::string Program::decorate(const std::string &string)
{
if (string.substr(0, 3) != "gl_" && string.substr(0, 3) != "dx_")
@@ -1355,6 +1355,18 @@
}
}
+std::string Program::undecorate(const std::string &string)
+{
+ if (string.substr(0, 1) == "_")
+ {
+ return string.substr(1);
+ }
+ else
+ {
+ return string;
+ }
+}
+
bool Program::applyUniform1bv(GLint location, GLsizei count, const GLboolean *v)
{
BOOL *vector = new BOOL[count];
@@ -2118,14 +2130,9 @@
if (bufsize > 0)
{
- const char *string = mUniforms[uniform]->name.c_str();
+ std::string string = undecorate(mUniforms[uniform]->name);
- if(string[0] == '_') // Undecorate
- {
- string++;
- }
-
- strncpy(name, string, bufsize);
+ strncpy(name, string.c_str(), bufsize);
name[bufsize - 1] = '\0';
if (length)
@@ -2162,7 +2169,7 @@
{
if (!mUniforms[uniformIndex]->name.empty() && mUniforms[uniformIndex]->name.substr(0, 3) != "dx_")
{
- maxLength = std::max((int)(mUniforms[uniformIndex]->name.length() + 1), maxLength);
+ maxLength = std::max((int)(undecorate(mUniforms[uniformIndex]->name).length() + 1), maxLength);
}
}