فهرست منبع

Merge pull request #172 from kwando/master

Move update logic into DefineList.
shadowislord 11 سال پیش
والد
کامیت
57d4dbb1b1

+ 1 - 15
jme3-core/src/main/java/com/jme3/material/Technique.java

@@ -179,21 +179,7 @@ public class Technique /* implements Savable */ {
         }
         
         if (techniqueSwitched) {
-            // If the technique was switched, check if the define list changed
-            // based on material parameters.
-            
-            ListMap params = owner.getParamsMap();
-            
-            if (!defines.equalsParams(params, def)) {
-                // Defines were changed, update define list
-                defines.clear();
-                for(int i=0;i<params.size();i++) {
-                    MatParam param = (MatParam)params.getValue(i);
-                    String defineName = def.getShaderParamDefine(param.getName());
-                    if (defineName != null) {
-                        defines.set(defineName, param.getVarType(), param.getValue());
-                    }
-                }
+            if (defines.update(owner.getParamsMap(), def)) {
                 needReload = true;
             }
         }

+ 23 - 1
jme3-core/src/main/java/com/jme3/shader/DefineList.java

@@ -182,7 +182,29 @@ public class DefineList implements Savable, Cloneable {
         return defines.equals(other.defines);
     }
     
-    public boolean equalsParams(ListMap params, TechniqueDef def) {
+    /**
+     * Update defines if the define list changed based on material parameters.
+     * @param params
+     * @param def
+     * @return true if defines was updated
+     */
+    public boolean update(ListMap params, TechniqueDef def){
+        if(equalsParams(params, def)){
+            return false;
+        }
+         // Defines were changed, update define list
+        clear();
+        for(int i=0;i<params.size();i++) {
+            MatParam param = (MatParam)params.getValue(i);
+            String defineName = def.getShaderParamDefine(param.getName());
+            if (defineName != null) {
+                set(defineName, param.getVarType(), param.getValue());
+            }
+        }
+        return true;
+    }
+    
+    private boolean equalsParams(ListMap params, TechniqueDef def) {
         
         int size = 0;