/** * Finds if a variable is a world or a material parameter * @param var the variable * @return true if the variable is a Word or material parameter */ protected boolean isWorldOrMaterialParam(ShaderNodeVariable var) { return var.getNameSpace().equals("MatParam") || var.getNameSpace().equals("WorldParam"); }
/** * returns the name space to append for a variable. * Attributes, WorldParam and MatParam names space must not be appended * @param var the variable * @return the namespace to append for this variable */ protected String getAppendableNameSpace(ShaderNodeVariable var) { String namePrefix = var.getNameSpace() + "_"; if (namePrefix.equals("Attr_") || namePrefix.equals("WorldParam_") || namePrefix.equals("MatParam_")) { namePrefix = ""; } return namePrefix; }
/** * Append a variable initialization to the code * * @param source the StringBuilder to use * @param var the variable to initialize * @param initValue the init value to assign to the variable */ protected void initVariable(StringBuilder source, ShaderNodeVariable var, String initValue) { appendIndent(source); source.append(var.getNameSpace()); source.append("_"); source.append(var.getName()); source.append(" = "); source.append(initValue); source.append(";\n"); } }
/** * Appends an output assignment to a shader globalOutputName = * nameSpace_varName; * * @param source the source StringBuilter to append the code. * @param globalOutputName the name of the global output (can be gl_Position * or gl_FragColor etc...). * @param var the variable to assign to the output. */ protected void appendOutput(StringBuilder source, String globalOutputName, ShaderNodeVariable var) { appendIndent(source); source.append(globalOutputName); source.append(" = "); source.append(var.getNameSpace()); source.append("_"); source.append(var.getName()); source.append(";\n"); }
@Override public String toString() { final StringBuilder builder = new StringBuilder(leftVariable.toString()); if (!leftSwizzling.isEmpty()) { builder.append('.').append(leftSwizzling); } builder.append(" = "); if (rightVariable != null) { builder.append(rightVariable.getType()) .append(' ') .append(rightVariable.getNameSpace()) .append('.') .append(rightVariable.getName()); if (!rightSwizzling.isEmpty()) { builder.append('.').append(rightSwizzling); } } else if (rightExpression != null) { builder.append(rightExpression); } if (condition != null && !condition.isEmpty()) { builder.append(" : ").append(condition); } return builder.toString(); }
if (!leftVar.getNameSpace().equals(shaderNode.getName())) { out.write(leftVar.getNameSpace()); out.write("."); if (!rightVar.getNameSpace().equals(shaderNode.getName())) { out.write(rightVar.getNameSpace()); out.write(".");
source.append(" "); if (appendNameSpace) { source.append(var.getNameSpace()); source.append("_");
source.append(" "); source.append(leftVariable.getNameSpace()); source.append("_"); source.append(leftVariable.getName()); appendIndent(source); source.append(leftVariable.getNameSpace()); source.append("_"); source.append(leftVariable.getName());
unusedNodes.remove(rightVariable.getNameSpace());
if (left.getNameSpace().equals(ShaderGenerator.NAME_SPACE_GLOBAL)) { left.setType("vec4"); // Globals are all vec4 for now (maybe forever...) storeGlobal(left, statement); } else { throw new MatParseException("Only Global nameSpace is allowed for outputMapping, got" + left.getNameSpace(), statement);
} else if (left.getType().startsWith("sampler") && (right == null || !right.getNameSpace().equals(ShaderGenerator.NAME_SPACE_MAT_PARAM))) { throw new MatParseException("Samplers can only be assigned to MatParams", statement); if (right.getNameSpace().equals(ShaderGenerator.NAME_SPACE_GLOBAL)) { right.setType("vec4"); // Globals are all vec4 for now (maybe forever...) storeGlobal(right, statement); } else if (right.getNameSpace().equals(ShaderGenerator.NAME_SPACE_VERTEX_ATTRIBUTE)) { if (definition.getType() == ShaderType.Fragment) { throw new MatParseException("Cannot have an attribute as input in a fragment shader" + right.getName(), statement); } else if (right.getNameSpace().equals(ShaderGenerator.NAME_SPACE_MAT_PARAM)) { } else if (right.getNameSpace().equals(ShaderGenerator.NAME_SPACE_WORLD_PARAM)) { ShaderNode node = nodes.get(right.getNameSpace()); throw new MatParseException("Undeclared node" + right.getNameSpace() + ". Make sure this node is declared before the current node", statement);
private void assertEqualsVariables(ShaderNodeVariable v1, ShaderNodeVariable v2) { assertEquals(v1.getName(), v2.getName()); assertEquals(v1.getNameSpace(), v2.getNameSpace()); assertEquals(v1.getMultiplicity(), v2.getMultiplicity()); assertEquals(v1.getType(), v2.getType()); assertEquals(v1.getCondition(), v2.getCondition()); }
/** * Finds if a variable is a world or a material parameter * @param var the variable * @return true if the variable is a Word or material parameter */ protected boolean isWorldOrMaterialParam(ShaderNodeVariable var) { return var.getNameSpace().equals("MatParam") || var.getNameSpace().equals("WorldParam"); }
/** * returns the name space to append for a variable. * Attributes, WorldParam and MatParam names space must not be appended * @param var the variable * @return the namespace to append for this variable */ protected String getAppendableNameSpace(ShaderNodeVariable var) { String namePrefix = var.getNameSpace() + "_"; if (namePrefix.equals("Attr_") || namePrefix.equals("WorldParam_") || namePrefix.equals("MatParam_")) { namePrefix = ""; } return namePrefix; }
/** * Appends an output assignment to a shader globalOutputName = * nameSpace_varName; * * @param source the source StringBuilter to append the code. * @param globalOutputName the name of the global output (can be gl_Position * or gl_FragColor etc...). * @param var the variable to assign to the output. */ protected void appendOutput(StringBuilder source, String globalOutputName, ShaderNodeVariable var) { appendIndent(source); source.append(globalOutputName); source.append(" = "); source.append(var.getNameSpace()); source.append("_"); source.append(var.getName()); source.append(";\n"); }
/** * Append a variable initialization to the code * * @param source the StringBuilder to use * @param var the variable to initialize * @param initValue the init value to assign to the variable */ protected void initVariable(StringBuilder source, ShaderNodeVariable var, String initValue) { appendIndent(source); source.append(var.getNameSpace()); source.append("_"); source.append(var.getName()); source.append(" = "); source.append(initValue); source.append(";\n"); } }
@Override public String toString() { return "\n{" + leftVariable.toString() + (leftSwizzling.length() > 0 ? ("." + leftSwizzling) : "") + " = " + rightVariable.getType() + " " + rightVariable.getNameSpace() + "." + rightVariable.getName() + (rightSwizzling.length() > 0 ? ("." + rightSwizzling) : "") + " : " + condition + "}"; }
private void writeVariableMapping(OutputStreamWriter out, ShaderNode shaderNode, VariableMapping mapping, Collection<MatParam> matParams) throws IOException { out.write(" "); if(!mapping.getLeftVariable().getNameSpace().equals(shaderNode.getName())) { out.write(mapping.getLeftVariable().getNameSpace()); out.write("."); } out.write(mapping.getLeftVariable().getName()); if(!mapping.getLeftSwizzling().equals("")){ out.write("."); out.write(mapping.getLeftSwizzling()); } out.write(" = "); if(!mapping.getRightVariable().getNameSpace().equals(shaderNode.getName())) { out.write(mapping.getRightVariable().getNameSpace()); out.write("."); } out.write(mapping.getRightVariable().getName().replaceFirst("g_","").replaceFirst("m_","")); if(!mapping.getRightSwizzling().equals("")){ out.write("."); out.write(mapping.getRightSwizzling()); } if (mapping.getCondition() != null){ out.write(" : "); out.write(formatCondition(mapping.getCondition(),matParams)); } out.write("\n"); }
for (Statement statement1 : statement.getContents()) { VariableMapping mapping = readInputMapping(statement1); techniqueDef.getShaderGenerationInfo().getUnusedNodes().remove(mapping.getRightVariable().getNameSpace()); shaderNode.getInputMapping().add(mapping);
if (left.getNameSpace().equals("Global")) { left.setType("vec4");//Globals are all vec4 for now (maybe forever...) storeGlobal(left, statement1); } else { throw new MatParseException("Only Global nameSpace is allowed for outputMapping, got" + left.getNameSpace(), statement1);