Because Material.render() is called every frame, and for code design
inheritance seems to be better than instanceof for this case.
[patch]
Index: src/core/com/jme3/material/Material.java
===================================================================
— src/core/com/jme3/material/Material.java (revision 6567)
+++ src/core/com/jme3/material/Material.java (working copy)
@@ -126,6 +126,15 @@
public int getUnit() {
return unit;
}
+
-
@Override<br />
-
public void apply(Renderer r, Technique technique) {<br />
-
TechniqueDef techDef = technique.getDef();<br />
-
r.setTexture(getUnit(), getTextureValue());<br />
-
if (techDef.isUsingShaders()) {<br />
-
technique.updateUniformParam(getName(), getVarType(), getUnit(), true);<br />
-
}<br />
-
}<br />
@Override
public void write(JmeExporter ex) throws IOException {
@@ -815,24 +824,7 @@
// setup textures and uniforms
for (int i = 0; i < paramValues.size(); i++) {
MatParam param = paramValues.getValue(i);
- if (param instanceof MatParamTexture) {
- MatParamTexture texParam = (MatParamTexture) param;
- r.setTexture(texParam.getUnit(), texParam.getTextureValue());
- if (techDef.isUsingShaders()) {
-
- technique.updateUniformParam(texParam.getName(),
- texParam.getVarType(),
- texParam.getUnit(), true);
- }
- } else {
- if (!techDef.isUsingShaders()) {
- continue;
- }
-
- technique.updateUniformParam(param.getName(),
- param.getVarType(),
- param.getValue(), true);
- }
+ param.apply(r, technique);
}
Shader shader = technique.getShader();
Index: src/core/com/jme3/material/MatParam.java
===================================================================
--- src/core/com/jme3/material/MatParam.java (revision 6567)
+++ src/core/com/jme3/material/MatParam.java (working copy)
@@ -37,6 +37,7 @@
import com.jme3.export.JmeImporter;
import com.jme3.export.OutputCapsule;
import com.jme3.export.Savable;
+import com.jme3.renderer.Renderer;
import com.jme3.shader.Uniform;
import com.jme3.shader.VarType;
import java.io.IOException;
@@ -148,5 +149,13 @@
public String toString(){
return type.name()+" "+name;
}
+
+ public void apply(Renderer r, Technique technique) {
+ TechniqueDef techDef = technique.getDef();
+ if (techDef.isUsingShaders()) {
+ technique.updateUniformParam(getName(), getVarType(), getValue(), true);
+ }
+
+ }
}
[/patch]