diff --git a/jme3-core/src/main/java/com/jme3/shader/Glsl100ShaderGenerator.java b/jme3-core/src/main/java/com/jme3/shader/Glsl100ShaderGenerator.java
index 196b6021d..1300bf361 100644
--- a/jme3-core/src/main/java/com/jme3/shader/Glsl100ShaderGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/shader/Glsl100ShaderGenerator.java
@@ -228,6 +228,7 @@ public class Glsl100ShaderGenerator extends ShaderGenerator {
*
* 4. mapping outputs to global output if needed
*
+ *
*
* All of this is embed in a #if conditional statement if needed
*/
@@ -241,45 +242,17 @@ public class Glsl100ShaderGenerator extends ShaderGenerator {
final List declaredInputs = new ArrayList<>();
- for (VariableMapping mapping : shaderNode.getInputMapping()) {
-
- final ShaderNodeVariable rightVariable = mapping.getRightVariable();
- final ShaderNodeVariable leftVariable = mapping.getLeftVariable();
-
- //Variables fed with a sampler matparam or world param are replaced by the matparam itself
- //It avoids issue with samplers that have to be uniforms.
- if (rightVariable != null && isWorldOrMaterialParam(rightVariable) && rightVariable.getType().startsWith("sampler")) {
- nodeSource = replace(nodeSource, leftVariable, rightVariable.getPrefix() + rightVariable.getName());
- } else {
-
- if (leftVariable.getType().startsWith("sampler")) {
- throw new IllegalArgumentException("a Sampler must be a uniform");
- }
-
- map(mapping, source);
- }
-
- String newName = shaderNode.getName() + "_" + leftVariable.getName();
- if (!declaredInputs.contains(newName)) {
- nodeSource = replace(nodeSource, leftVariable, newName);
- declaredInputs.add(newName);
- }
- }
-
+ // Decalring variables with default values first
final ShaderNodeDefinition definition = shaderNode.getDefinition();
for (final ShaderNodeVariable var : definition.getInputs()) {
- if (var.getDefaultValue() == null) {
+ if (var.getType().startsWith("sampler")) {
continue;
}
final String fullName = shaderNode.getName() + "_" + var.getName();
- if (declaredInputs.contains(fullName)) {
- continue;
- }
-
final ShaderNodeVariable variable = new ShaderNodeVariable(var.getType(), shaderNode.getName(),
var.getName(), var.getMultiplicity());
@@ -291,6 +264,33 @@ public class Glsl100ShaderGenerator extends ShaderGenerator {
declaredInputs.add(fullName);
}
+ for (VariableMapping mapping : shaderNode.getInputMapping()) {
+
+ final ShaderNodeVariable rightVariable = mapping.getRightVariable();
+ final ShaderNodeVariable leftVariable = mapping.getLeftVariable();
+
+ String newName = shaderNode.getName() + "_" + leftVariable.getName();
+ boolean isDeclared = declaredInputs.contains(newName);
+ //Variables fed with a sampler matparam or world param are replaced by the matparam itself
+ //It avoids issue with samplers that have to be uniforms.
+ if (rightVariable != null && isWorldOrMaterialParam(rightVariable) && rightVariable.getType().startsWith("sampler")) {
+ nodeSource = replace(nodeSource, leftVariable, rightVariable.getPrefix() + rightVariable.getName());
+ } else {
+
+ if (leftVariable.getType().startsWith("sampler")) {
+ throw new IllegalArgumentException("a Sampler must be a uniform");
+ }
+ map(mapping, source, !isDeclared);
+ }
+
+ if (!isDeclared) {
+ nodeSource = replace(nodeSource, leftVariable, newName);
+ declaredInputs.add(newName);
+ }
+ }
+
+
+
for (ShaderNodeVariable var : definition.getOutputs()) {
ShaderNodeVariable v = new ShaderNodeVariable(var.getType(), shaderNode.getName(), var.getName(), var.getMultiplicity());
if (!declaredInputs.contains(shaderNode.getName() + "_" + var.getName())) {
@@ -304,7 +304,7 @@ public class Glsl100ShaderGenerator extends ShaderGenerator {
source.append(nodeSource);
for (VariableMapping mapping : shaderNode.getOutputMapping()) {
- map(mapping, source);
+ map(mapping, source, true);
}
endCondition(shaderNode.getCondition(), source);
comment(source, shaderNode, "End");
@@ -423,7 +423,7 @@ public class Glsl100ShaderGenerator extends ShaderGenerator {
* @param mapping the VariableMapping to append
* @param source the StringBuilder to use
*/
- protected void map(VariableMapping mapping, StringBuilder source) {
+ protected void map(VariableMapping mapping, StringBuilder source, boolean declare) {
final ShaderNodeVariable leftVariable = mapping.getLeftVariable();
final ShaderNodeVariable rightVariable = mapping.getRightVariable();
@@ -431,7 +431,7 @@ public class Glsl100ShaderGenerator extends ShaderGenerator {
startCondition(mapping.getCondition(), source);
appendIndent(source);
- if (!leftVariable.isShaderOutput()) {
+ if (!leftVariable.isShaderOutput() && declare) {
source.append(leftVariable.getType());
source.append(" ");
}
diff --git a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMix.j3sn b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMix.j3sn
index 414615b6a..bfa07d93d 100644
--- a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMix.j3sn
+++ b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMix.j3sn
@@ -10,9 +10,9 @@ ShaderNodeDefinitions{
@output outColor the mixed color
}
Input {
- vec4 color1
- vec4 color2
- float factor
+ vec4 color1 vec4(1.0)
+ vec4 color2 vec4(1.0)
+ float factor 0.5
}
Output {
vec4 outColor
diff --git a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMult.j3sn b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMult.j3sn
index 4d1f44328..657976e8a 100644
--- a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMult.j3sn
+++ b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Basic/ColorMult.j3sn
@@ -9,8 +9,8 @@ ShaderNodeDefinitions{
@output outColor the resulting color
}
Input {
- vec4 color1
- vec4 color2
+ vec4 color1 vec4(1.0)
+ vec4 color2 vec4(1.0)
}
Output {
vec4 outColor
diff --git a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/Mult.j3sn b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/Mult.j3sn
index 8a44949b4..2820438d5 100644
--- a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/Mult.j3sn
+++ b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/Mult.j3sn
@@ -9,8 +9,8 @@ ShaderNodeDefinitions{
@output outFloat the resulting coord
}
Input {
- float float1
- float float2
+ float float1 1.0
+ float float2 1.0
}
Output {
float outFloat
diff --git a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec2.j3sn b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec2.j3sn
index ab30d5015..dc6d4fcb1 100644
--- a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec2.j3sn
+++ b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec2.j3sn
@@ -9,8 +9,8 @@ ShaderNodeDefinitions{
@output outCoord the resulting coord
}
Input {
- vec2 coord1
- vec2 coord2
+ vec2 coord1 vec2(1.0)
+ vec2 coord2 vec2(1.0)
}
Output {
vec2 outCoord
diff --git a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec3.j3sn b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec3.j3sn
index ab3fdb4c1..3dcd63fbe 100644
--- a/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec3.j3sn
+++ b/jme3-core/src/main/resources/Common/MatDefs/ShaderNodes/Math/MultVec3.j3sn
@@ -9,8 +9,8 @@ ShaderNodeDefinitions{
@output outPos the resulting position
}
Input {
- vec2 pos1
- vec2 pos2
+ vec3 pos1 vec3(1.0)
+ vec3 pos2 vec3(1.0)
}
Output {
vec2 outPos