Skip to content

Commit 5d2f2b1

Browse files
committed
spatial: fix bug in remove/clear MPO
add unit test for those methods
1 parent 5be03af commit 5d2f2b1

File tree

3 files changed

+76
-3
lines changed

3 files changed

+76
-3
lines changed

jme3-core/src/main/java/com/jme3/scene/Spatial.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -608,16 +608,16 @@ public void addMatParamOverride(MatParamOverride override) {
608608
}
609609

610610
public void removeMatParamOverride(MatParamOverride override) {
611-
if (worldOverrides.remove(override)) {
611+
if (localOverrides.remove(override)) {
612612
setMatParamOverrideRefresh();
613613
}
614614
}
615615

616616
public void clearMatParamOverrides() {
617-
if (!worldOverrides.isEmpty()) {
617+
if (!localOverrides.isEmpty()) {
618618
setMatParamOverrideRefresh();
619619
}
620-
worldOverrides.clear();
620+
localOverrides.clear();
621621
}
622622

623623
/**

jme3-core/src/test/java/com/jme3/material/TechniqueDefMatParamOverrideTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ public void testRemove() {
196196

197197
reset();
198198
geometry.clearMatParamOverrides();
199+
geometry.updateGeometricState();
199200
outDefines(def("NUM_BONES", VarType.Int, 1234));
200201
outUniforms(uniform("NumberOfBones", VarType.Int, 1234));
201202

@@ -245,6 +246,7 @@ public void testRemoveMpoOnly() {
245246

246247
reset();
247248
geometry.clearMatParamOverrides();
249+
geometry.updateGeometricState();
248250
outDefines();
249251
outUniforms();
250252
}
@@ -287,6 +289,7 @@ public void testRemoveTexture() {
287289

288290
reset();
289291
geometry.clearMatParamOverrides();
292+
geometry.updateGeometricState();
290293
outDefines();
291294
outUniforms();
292295
outTextures();
@@ -312,6 +315,7 @@ public void testRemoveTextureOverride() {
312315

313316
reset();
314317
geometry.clearMatParamOverrides();
318+
geometry.updateGeometricState();
315319
outDefines(def("DIFFUSEMAP", VarType.Texture2D, tex1));
316320
outUniforms(uniform("DiffuseMap", VarType.Int, 0));
317321
outTextures(tex1);

jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,75 @@ private static Node createDummyScene() {
7878
return scene;
7979
}
8080

81+
@Test
82+
public void testOverrides_Empty() {
83+
Node n = new Node("Node");
84+
assertTrue(n.getLocalOverrides().isEmpty());
85+
assertTrue(n.getWorldOverrides().isEmpty());
86+
87+
n.updateGeometricState();
88+
assertTrue(n.getLocalOverrides().isEmpty());
89+
assertTrue(n.getWorldOverrides().isEmpty());
90+
}
91+
92+
@Test
93+
public void testOverrides_AddRemove() {
94+
MatParamOverride override = mpoBool("Test", true);
95+
Node n = new Node("Node");
96+
97+
n.removeMatParamOverride(override);
98+
assertTrue(n.getLocalOverrides().isEmpty());
99+
assertTrue(n.getWorldOverrides().isEmpty());
100+
101+
n.addMatParamOverride(override);
102+
103+
assertSame(n.getLocalOverrides().get(0), override);
104+
assertTrue(n.getWorldOverrides().isEmpty());
105+
n.updateGeometricState();
106+
107+
assertSame(n.getLocalOverrides().get(0), override);
108+
assertSame(n.getWorldOverrides().get(0), override);
109+
110+
n.removeMatParamOverride(override);
111+
assertTrue(n.getLocalOverrides().isEmpty());
112+
assertSame(n.getWorldOverrides().get(0), override);
113+
114+
n.updateGeometricState();
115+
assertTrue(n.getLocalOverrides().isEmpty());
116+
assertTrue(n.getWorldOverrides().isEmpty());
117+
}
118+
119+
@Test
120+
public void testOverrides_Clear() {
121+
MatParamOverride override = mpoBool("Test", true);
122+
Node n = new Node("Node");
123+
124+
n.clearMatParamOverrides();
125+
assertTrue(n.getLocalOverrides().isEmpty());
126+
assertTrue(n.getWorldOverrides().isEmpty());
127+
128+
n.addMatParamOverride(override);
129+
n.clearMatParamOverrides();
130+
assertTrue(n.getLocalOverrides().isEmpty());
131+
assertTrue(n.getWorldOverrides().isEmpty());
132+
133+
n.addMatParamOverride(override);
134+
n.updateGeometricState();
135+
n.clearMatParamOverrides();
136+
assertTrue(n.getLocalOverrides().isEmpty());
137+
assertSame(n.getWorldOverrides().get(0), override);
138+
139+
n.updateGeometricState();
140+
assertTrue(n.getLocalOverrides().isEmpty());
141+
assertTrue(n.getWorldOverrides().isEmpty());
142+
143+
n.addMatParamOverride(override);
144+
n.clearMatParamOverrides();
145+
n.updateGeometricState();
146+
assertTrue(n.getLocalOverrides().isEmpty());
147+
assertTrue(n.getWorldOverrides().isEmpty());
148+
}
149+
81150
@Test
82151
public void testOverrides_AddAfterAttach() {
83152
Node scene = createDummyScene();

0 commit comments

Comments
 (0)