Removing string concat operation of updateUniformParam()

This patch contains one bug fix and one improvement.


  1. bug

    when deleting “m_”, only prefix should be removed but currently all “m_” matches are removed.


  2. 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(&quot;m_&quot;, &quot;&quot;);<br />
    
  •    if (paramDef == null &amp;&amp; name.startsWith(&quot;m_&quot;)) {<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(&quot;m_&quot;+paramName);<br />
    
  •        shader.removeUniform(paramName);<br />
    

}

}



void updateUniformParam(String paramName, VarType type, Object value, boolean ifNotOwner) {


  •    paramName=&quot;m_&quot;+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(&quot;g_&quot;)) {<br />
    
  •            uniform.name = name;<br />
    
  •        } else {<br />
    
  •            uniform.name = &quot;m_&quot;+name;<br />
    
  •        }<br />
    

uniforms.put(name, uniform);

}

return uniform;



[/patch]

nice!

I admit the replaceAll was a bit blunt :stuck_out_tongue: