Przeglądaj źródła

Fount a bug fixing later

Panagiotis Christopoulos Charitos 13 lat temu
rodzic
commit
df2ff7b49e
1 zmienionych plików z 23 dodań i 3 usunięć
  1. 23 3
      src/gl/ShaderProgram.cpp

+ 23 - 3
src/gl/ShaderProgram.cpp

@@ -569,7 +569,7 @@ void ShaderProgram::initUniAndAttribVars()
 	attribs.shrink_to_fit();
 	for(int i = 0; i < num; i++) // loop all attributes
 	{
-		ShaderProgramAttributeVariable& var = attribs[i];
+		ShaderProgramAttributeVariable& var = attribs[i]; bug /// XXX BUG
 
 		// Name
 		glGetActiveAttrib(glId, i, sizeof(name_), &length,
@@ -598,11 +598,31 @@ void ShaderProgram::initUniAndAttribVars()
 	// uni locations
 	//
 	glGetProgramiv(glId, GL_ACTIVE_UNIFORMS, &num);
-	unis.resize(num);
+	U unisCount = num;
+	
+	// Count the _useful_ uniforms
+	for(GLint i = 0; i < num; i++)
+	{
+		glGetActiveUniform(glId, i, sizeof(name_), &length,
+			&size, &type, &name_[0]);
+		name_[length] = '\0';
+
+		// See bellow for info
+		if(strchr(&name_[0], '[') != nullptr 
+			&& strstr(&name_[0], "[0]") != nullptr)
+		{
+			ANKI_ASSERT(size > 1);
+			continue;
+		}
+
+		--unisCount;
+	}
+
+	unis.resize(unisCount);
 	unis.shrink_to_fit();
 	for(GLint i = 0; i < num; i++) // loop all uniforms
 	{
-		ShaderProgramUniformVariable& var = unis[i];
+		ShaderProgramUniformVariable& var = unis[i]; bug/// XXX BUG
 
 		glGetActiveUniform(glId, i, sizeof(name_), &length,
 			&size, &type, &name_[0]);