Browse Source

* Sorting ID now reset properly when shader or texture changed

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7377 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
sha..rd 14 years ago
parent
commit
3ed2824cc3
1 changed files with 19 additions and 13 deletions
  1. 19 13
      engine/src/core/com/jme3/material/Material.java

+ 19 - 13
engine/src/core/com/jme3/material/Material.java

@@ -377,21 +377,22 @@ public class Material implements Cloneable, Savable, Comparable<Material> {
         name = checkSetParam(null, name);
 
         MatParamTexture val = getTextureParam(name);
-        if (val == null) {
+        if (val == null)
             throw new IllegalArgumentException("The given texture parameter is not set.");
-        } else {
-            int texUnit = val.getUnit();
-            paramValues.remove(name);
-            nextTexUnit--;
-            for (MatParam param : paramValues.values()) {
-                if (param instanceof MatParamTexture) {
-                    MatParamTexture texParam = (MatParamTexture) param;
-                    if (texParam.getUnit() > texUnit) {
-                        texParam.setUnit(texParam.getUnit() - 1);
-                    }
+        
+        int texUnit = val.getUnit();
+        paramValues.remove(name);
+        nextTexUnit--;
+        for (MatParam param : paramValues.values()) {
+            if (param instanceof MatParamTexture) {
+                MatParamTexture texParam = (MatParamTexture) param;
+                if (texParam.getUnit() > texUnit) {
+                    texParam.setUnit(texParam.getUnit() - 1);
                 }
             }
         }
+
+        sortingId = -1;
     }
 
     public void setTextureParam(String name, VarType type, Texture value) {
@@ -410,6 +411,9 @@ public class Material implements Cloneable, Savable, Comparable<Material> {
         if (technique != null) {
             technique.notifySetParam(name, type, nextTexUnit - 1);
         }
+        
+        // need to recompute sort ID
+        sortingId = -1;
     }
 
     /**
@@ -547,8 +551,7 @@ public class Material implements Cloneable, Savable, Comparable<Material> {
      * @param lightList
      */
     protected void updateLightListUniforms(Shader shader, Geometry g, int numLights) {
-        if (numLights == 0) // this shader does not do lighting, ignore.
-        {
+        if (numLights == 0){ // this shader does not do lighting, ignore.
             return;
         }
 
@@ -732,6 +735,9 @@ public class Material implements Cloneable, Savable, Comparable<Material> {
 
         technique = tech;
         tech.makeCurrent(def.getAssetManager());
+
+        // shader was changed
+        sortingId = -1;
     }
 
     private void autoSelectTechnique(RenderManager rm) {