فهرست منبع

MPO: clear param for null textures

Kirill Vainer 9 سال پیش
والد
کامیت
5588e859cb
1فایلهای تغییر یافته به همراه19 افزوده شده و 13 حذف شده
  1. 19 13
      jme3-core/src/main/java/com/jme3/material/Material.java

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

@@ -788,21 +788,27 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
     private void updateShaderMaterialParameters(Renderer renderer, Shader shader, List<MatParamOverride> overrides) {
         int unit = 0;
 
-        for (MatParamOverride override : overrides) {
-            VarType type = override.getVarType();
+        if (overrides != null) {
+            for (MatParamOverride override : overrides) {
+                VarType type = override.getVarType();
 
-            MatParam paramDef = def.getMaterialParam(override.getName());
-            if (paramDef == null || paramDef.getVarType() != type || !override.isEnabled()) {
-                continue;
-            }
+                MatParam paramDef = def.getMaterialParam(override.getName());
+                if (paramDef == null || paramDef.getVarType() != type || !override.isEnabled()) {
+                    continue;
+                }
 
-            Uniform uniform = shader.getUniform(override.getPrefixedName());
-            if (type.isTextureType()) {
-                renderer.setTexture(unit, (Texture) override.getValue());
-                uniform.setValue(VarType.Int, unit);
-                unit++;
-            } else {
-                uniform.setValue(type, override.getValue());
+                Uniform uniform = shader.getUniform(override.getPrefixedName());
+                if (override.getValue() != null) {
+                    if (type.isTextureType()) {
+                        renderer.setTexture(unit, (Texture) override.getValue());
+                        uniform.setValue(VarType.Int, unit);
+                        unit++;
+                    } else {
+                        uniform.setValue(type, override.getValue());
+                    }
+                } else {
+                    uniform.clearValue();
+                }
             }
         }