Skip to content

Commit 50658b8

Browse files
committed
MPO: add ability to disable an override
1 parent db691da commit 50658b8

File tree

4 files changed

+62
-4
lines changed

4 files changed

+62
-4
lines changed

jme3-core/src/main/java/com/jme3/material/MatParamOverride.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
public final class MatParamOverride extends MatParam {
3737

38+
private boolean enabled = true;
39+
3840
public MatParamOverride() {
3941
super();
4042
}
@@ -43,4 +45,36 @@ public MatParamOverride(VarType type, String name, Object value) {
4345
super(type, name, value);
4446
}
4547

48+
@Override
49+
public boolean equals(Object obj) {
50+
return super.equals(obj) && this.enabled == ((MatParamOverride) obj).enabled;
51+
}
52+
53+
@Override
54+
public int hashCode() {
55+
int hash = super.hashCode();
56+
hash = 59 * hash + (enabled ? 1 : 0);
57+
return hash;
58+
}
59+
public boolean isEnabled() {
60+
return enabled;
61+
}
62+
63+
public void setEnabled(boolean enabled) {
64+
this.enabled = enabled;
65+
}
66+
67+
@Override
68+
public void write(JmeExporter ex) throws IOException {
69+
super.write(ex);
70+
OutputCapsule oc = ex.getCapsule(this);
71+
oc.write(enabled, "enabled", true);
72+
}
73+
74+
@Override
75+
public void read(JmeImporter im) throws IOException {
76+
super.read(im);
77+
InputCapsule ic = im.getCapsule(this);
78+
enabled = ic.readBoolean("enabled", true);
79+
}
4680
}

jme3-core/src/main/java/com/jme3/material/Material.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ private void updateShaderMaterialParameters(Renderer renderer, Shader shader, Ar
792792
VarType type = override.getVarType();
793793

794794
MatParam paramDef = def.getMaterialParam(override.getName());
795-
if (paramDef == null || paramDef.getVarType() != type) {
795+
if (paramDef == null || paramDef.getVarType() != type || !override.isEnabled()) {
796796
continue;
797797
}
798798

jme3-core/src/main/java/com/jme3/material/Technique.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ Shader makeCurrent(RenderManager renderManager, ArrayList<MatParamOverride> over
128128
dynamicDefines.setAll(paramDefines);
129129

130130
for (MatParamOverride override : overrides) {
131+
if (!override.isEnabled()) {
132+
continue;
133+
}
131134
Integer defineId = def.getShaderParamDefineId(override.name);
132135
if (defineId != null) {
133136
if (def.getDefineIdType(defineId) == override.type) {

jme3-core/src/test/java/com/jme3/material/TechniqueDefMatParamOverrideTest.java renamed to jme3-core/src/test/java/com/jme3/material/MaterialMatParamOverrideTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
import java.util.HashMap;
5656
import java.util.Map;
5757

58-
public class TechniqueDefMatParamOverrideTest {
58+
public class MaterialMatParamOverrideTest {
5959

6060
private static final HashSet<String> IGNORED_UNIFORMS = new HashSet<String>(
6161
Arrays.asList(new String[]{"m_ParallaxHeight", "m_Shininess"}));
@@ -119,6 +119,27 @@ public void testFloatOverride() {
119119
outUniforms(uniform("AlphaDiscardThreshold", VarType.Float, 2.79f));
120120
}
121121

122+
@Test
123+
public void testMpoDisable() {
124+
material("Common/MatDefs/Light/Lighting.j3md");
125+
inputMp(mpoFloat("AlphaDiscardThreshold", 3.12f));
126+
127+
MatParamOverride override = mpoFloat("AlphaDiscardThreshold", 2.79f);
128+
inputMpo(override);
129+
outDefines(def("DISCARD_ALPHA", VarType.Float, 2.79f));
130+
outUniforms(uniform("AlphaDiscardThreshold", VarType.Float, 2.79f));
131+
132+
reset();
133+
override.setEnabled(false);
134+
outDefines(def("DISCARD_ALPHA", VarType.Float, 3.12f));
135+
outUniforms(uniform("AlphaDiscardThreshold", VarType.Float, 3.12f));
136+
137+
reset();
138+
override.setEnabled(true);
139+
outDefines(def("DISCARD_ALPHA", VarType.Float, 2.79f));
140+
outUniforms(uniform("AlphaDiscardThreshold", VarType.Float, 2.79f));
141+
}
142+
122143
@Test
123144
public void testIntMpoOnly() {
124145
material("Common/MatDefs/Light/Lighting.j3md");
@@ -349,13 +370,13 @@ public boolean equals(Object obj) {
349370
private final NullRenderer renderer = new NullRenderer() {
350371
@Override
351372
public void setShader(Shader shader) {
352-
TechniqueDefMatParamOverrideTest.this.usedShader = shader;
373+
MaterialMatParamOverrideTest.this.usedShader = shader;
353374
evaluated = true;
354375
}
355376

356377
@Override
357378
public void setTexture(int unit, Texture texture) {
358-
TechniqueDefMatParamOverrideTest.this.usedTextures[unit] = texture;
379+
MaterialMatParamOverrideTest.this.usedTextures[unit] = texture;
359380
}
360381
};
361382
private final RenderManager renderManager = new RenderManager(renderer);

0 commit comments

Comments
 (0)