MPO: make sure child overrides parent

cleanup_build_scripts
Kirill Vainer 9 years ago
parent a2554874d3
commit f72df167c0
  1. 2
      jme3-core/src/main/java/com/jme3/scene/Spatial.java
  2. 46
      jme3-core/src/test/java/com/jme3/material/MaterialMatParamOverrideTest.java

@ -593,8 +593,8 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
worldOverrides.addAll(localOverrides);
} else {
assert (parent.refreshFlags & RF_MATPARAM_OVERRIDE) == 0;
worldOverrides.addAll(localOverrides);
worldOverrides.addAll(parent.worldOverrides);
worldOverrides.addAll(localOverrides);
}
}

@ -46,6 +46,7 @@ import org.junit.Assert;
import org.junit.Test;
import static com.jme3.scene.MPOTestUtils.*;
import com.jme3.scene.Node;
import com.jme3.shader.DefineList;
import com.jme3.system.NullRenderer;
import com.jme3.system.TestUtil;
@ -54,6 +55,7 @@ import com.jme3.texture.Texture;
import com.jme3.texture.Texture2D;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
/**
* Validates how {@link MatParamOverride MPOs} work on the material level.
@ -124,6 +126,18 @@ public class MaterialMatParamOverrideTest {
outUniforms(uniform("AlphaDiscardThreshold", VarType.Float, 2.79f));
}
@Test
@Test
public void testChildOverridesParent() {
material("Common/MatDefs/Light/Lighting.j3md");
inputParentMpo(mpoFloat("AlphaDiscardThreshold", 3.12f));
inputMpo(mpoFloat("AlphaDiscardThreshold", 2.79f));
outUniforms(uniform("AlphaDiscardThreshold", VarType.Float, 2.79f));
outDefines(def("DISCARD_ALPHA", VarType.Float, 2.79f));
}
@Test
public void testMpoDisable() {
material("Common/MatDefs/Light/Lighting.j3md");
@ -222,7 +236,7 @@ public class MaterialMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
root.updateGeometricState();
outDefines(def("NUM_BONES", VarType.Int, 1234));
outUniforms(uniform("NumberOfBones", VarType.Int, 1234));
@ -272,7 +286,7 @@ public class MaterialMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
root.updateGeometricState();
outDefines();
outUniforms();
}
@ -315,7 +329,7 @@ public class MaterialMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
root.updateGeometricState();
outDefines();
outUniforms();
outTextures();
@ -341,7 +355,7 @@ public class MaterialMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
root.updateGeometricState();
outDefines(def("DIFFUSEMAP", VarType.Texture2D, tex1));
outUniforms(uniform("DiffuseMap", VarType.Int, 0));
outTextures(tex1);
@ -369,9 +383,15 @@ public class MaterialMatParamOverrideTest {
}
}
private final Geometry geometry = new Geometry("geometry", new Box(1, 1, 1));
private final Geometry geometry = new Geometry("Geometry", new Box(1, 1, 1));
private final Node root = new Node("Root Node");
private final LightList lightList = new LightList(geometry);
@Before
public void setUp() {
root.attachChild(geometry);
}
private final NullRenderer renderer = new NullRenderer() {
@Override
public void setShader(Shader shader) {
@ -407,7 +427,17 @@ public class MaterialMatParamOverrideTest {
for (MatParamOverride override : overrides) {
geometry.addMatParamOverride(override);
}
geometry.updateGeometricState();
root.updateGeometricState();
}
private void inputParentMpo(MatParamOverride... overrides) {
if (evaluated) {
throw new IllegalStateException();
}
for (MatParamOverride override : overrides) {
root.addMatParamOverride(override);
}
root.updateGeometricState();
}
private void reset() {
@ -520,6 +550,10 @@ public class MaterialMatParamOverrideTest {
}
private void outUniforms(Uniform... uniforms) {
if (!evaluated) {
evaluateTechniqueDef();
}
HashSet<Uniform> actualUniforms = new HashSet<>();
for (Uniform uniform : usedShader.getUniformMap().values()) {

Loading…
Cancel
Save