This patch contains one bug fix and one improvement.
- bug
when deleting “m_”, only prefix should be removed but currently all “m_” matches are removed.
- improvement
updateUniformParam() is called frequently, and there is string concat operation.
It generates garbage and degrade performance.
How about using variable name itself instead of ‘m_’ prefix is added at hashmap search.
Then string concat operation can be removed on update call.
[patch]
Index: src/core/com/jme3/material/Material.java
===================================================================
— src/core/com/jme3/material/Material.java (revision 6555)
+++ src/core/com/jme3/material/Material.java (working copy)
@@ -279,8 +279,8 @@
private String checkSetParam(VarType type, String name) {
MatParam paramDef = def.getMaterialParam(name);
String newName=name;
-
if (paramDef == null) {<br />
-
newName=name.replaceAll("m_", "");<br />
-
if (paramDef == null && name.startsWith("m_")) {<br />
-
newName=name.substring(2);<br />
paramDef = def.getMaterialParam(newName);
if (paramDef == null) {
throw new IllegalArgumentException("Material parameter is not defined: " + name);
Index: src/core/com/jme3/material/Technique.java
===================================================================
— src/core/com/jme3/material/Technique.java (revision 6555)
+++ src/core/com/jme3/material/Technique.java (working copy)
@@ -130,13 +130,12 @@
needReload = true;
}
if (shader != null) {
-
shader.removeUniform("m_"+paramName);<br />
-
shader.removeUniform(paramName);<br />
}
}
void updateUniformParam(String paramName, VarType type, Object value, boolean ifNotOwner) {
-
paramName="m_"+paramName;<br />
Uniform u = shader.getUniform(paramName);
// if (ifNotOwner && u.getLastChanger() == owner)
Index: src/core/com/jme3/shader/Shader.java
===================================================================
— src/core/com/jme3/shader/Shader.java (revision 6555)
+++ src/core/com/jme3/shader/Shader.java (working copy)
@@ -321,7 +321,11 @@
Uniform uniform = uniforms.get(name);
if (uniform == null){
uniform = new Uniform();
-
uniform.name = name;<br />
-
if (name.startsWith("g_")) {<br />
-
uniform.name = name;<br />
-
} else {<br />
-
uniform.name = "m_"+name;<br />
-
}<br />
uniforms.put(name, uniform);
}
return uniform;
[/patch]