spatial: fix bug in remove/clear MPO

add unit test for those methods
This commit is contained in:
Kirill Vainer 2016-03-05 19:31:26 -05:00
parent 5be03af564
commit 5d2f2b19e6
3 changed files with 76 additions and 3 deletions

View File

@ -608,16 +608,16 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
}
public void removeMatParamOverride(MatParamOverride override) {
if (worldOverrides.remove(override)) {
if (localOverrides.remove(override)) {
setMatParamOverrideRefresh();
}
}
public void clearMatParamOverrides() {
if (!worldOverrides.isEmpty()) {
if (!localOverrides.isEmpty()) {
setMatParamOverrideRefresh();
}
worldOverrides.clear();
localOverrides.clear();
}
/**

View File

@ -196,6 +196,7 @@ public class TechniqueDefMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
outDefines(def("NUM_BONES", VarType.Int, 1234));
outUniforms(uniform("NumberOfBones", VarType.Int, 1234));
@ -245,6 +246,7 @@ public class TechniqueDefMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
outDefines();
outUniforms();
}
@ -287,6 +289,7 @@ public class TechniqueDefMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
outDefines();
outUniforms();
outTextures();
@ -312,6 +315,7 @@ public class TechniqueDefMatParamOverrideTest {
reset();
geometry.clearMatParamOverrides();
geometry.updateGeometricState();
outDefines(def("DIFFUSEMAP", VarType.Texture2D, tex1));
outUniforms(uniform("DiffuseMap", VarType.Int, 0));
outTextures(tex1);

View File

@ -78,6 +78,75 @@ public class SceneMatParamOverrideTest {
return scene;
}
@Test
public void testOverrides_Empty() {
Node n = new Node("Node");
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
n.updateGeometricState();
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
}
@Test
public void testOverrides_AddRemove() {
MatParamOverride override = mpoBool("Test", true);
Node n = new Node("Node");
n.removeMatParamOverride(override);
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
n.addMatParamOverride(override);
assertSame(n.getLocalOverrides().get(0), override);
assertTrue(n.getWorldOverrides().isEmpty());
n.updateGeometricState();
assertSame(n.getLocalOverrides().get(0), override);
assertSame(n.getWorldOverrides().get(0), override);
n.removeMatParamOverride(override);
assertTrue(n.getLocalOverrides().isEmpty());
assertSame(n.getWorldOverrides().get(0), override);
n.updateGeometricState();
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
}
@Test
public void testOverrides_Clear() {
MatParamOverride override = mpoBool("Test", true);
Node n = new Node("Node");
n.clearMatParamOverrides();
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
n.addMatParamOverride(override);
n.clearMatParamOverrides();
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
n.addMatParamOverride(override);
n.updateGeometricState();
n.clearMatParamOverrides();
assertTrue(n.getLocalOverrides().isEmpty());
assertSame(n.getWorldOverrides().get(0), override);
n.updateGeometricState();
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
n.addMatParamOverride(override);
n.clearMatParamOverrides();
n.updateGeometricState();
assertTrue(n.getLocalOverrides().isEmpty());
assertTrue(n.getWorldOverrides().isEmpty());
}
@Test
public void testOverrides_AddAfterAttach() {
Node scene = createDummyScene();