stringBuf.append("#define SRGB 1\n"); stringBuf.append("#define ").append(source.getType().name().toUpperCase()).append("_SHADER 1\n");
/** * Sets the shaders that this technique definition will use. * * @param shaderNames EnumMap containing all shader names for this stage * @param shaderLanguages EnumMap containing all shader languages for this stage */ public void setShaderFile(EnumMap<Shader.ShaderType, String> shaderNames, EnumMap<Shader.ShaderType, String> shaderLanguages) { requiredCaps.clear(); weight = 0; for (Shader.ShaderType shaderType : shaderNames.keySet()) { String language = shaderLanguages.get(shaderType); String shaderFile = shaderNames.get(shaderType); this.shaderLanguages.put(shaderType, language); this.shaderNames.put(shaderType, shaderFile); Caps cap = Caps.valueOf(language); requiredCaps.add(cap); weight = Math.max(weight, cap.ordinal()); if (shaderType.equals(Shader.ShaderType.Geometry)) { requiredCaps.add(Caps.GeometryShader); } else if (shaderType.equals(Shader.ShaderType.TessellationControl)) { requiredCaps.add(Caps.TesselationShader); } } }
private void readShaderStatement(String statement) throws IOException { String[] split = statement.split(":"); if (split.length != 2) { throw new IOException("Shader statement syntax incorrect" + statement); } String[] typeAndLang = split[0].split(whitespacePattern); for (Shader.ShaderType shaderType : Shader.ShaderType.values()) { if (typeAndLang[0].equals(shaderType.toString() + "Shader")) { readShaderDefinition(shaderType, split[1].trim(), Arrays.copyOfRange(typeAndLang, 1, typeAndLang.length)); } } }
stringBuf.append("#define SRGB 1\n"); stringBuf.append("#define ").append(source.getType().name().toUpperCase()).append("_SHADER 1\n");
shaderNodeDefinition.setType(Shader.ShaderType.valueOf(type)); } else if (line.startsWith("Shader ")) { readShaderStatement(statement);
} else { shader = new Shader(); for (ShaderType type : ShaderType.values()) { String language = shaderLanguages.get(type); String shaderSourceAssetName = shaderNames.get(type);
/** * Generate vertex and fragment shaders for the given technique * * @return a Shader program */ public Shader generateShader(String definesSourceCode) { if (techniqueDef == null) { throw new UnsupportedOperationException("The shaderGenerator was not " + "properly initialized, call " + "initialize(TechniqueDef) before any generation"); } String techniqueName = techniqueDef.getName(); ShaderGenerationInfo info = techniqueDef.getShaderGenerationInfo(); Shader shader = new Shader(); for (ShaderType type : ShaderType.values()) { String extension = type.getExtension(); String language = getLanguageAndVersion(type); String shaderSourceCode = buildShader(techniqueDef.getShaderNodes(), info, type); if (shaderSourceCode != null) { String shaderSourceAssetName = techniqueName + "." + extension; shader.addSource(type, shaderSourceAssetName, shaderSourceCode, definesSourceCode, language); } } techniqueDef = null; return shader; }
/** * Sets the shaders that this technique definition will use. * * @param shaderNames EnumMap containing all shader names for this stage * @param shaderLanguages EnumMap containing all shader languages for this stage */ public void setShaderFile(EnumMap<Shader.ShaderType, String> shaderNames, EnumMap<Shader.ShaderType, String> shaderLanguages) { requiredCaps.clear(); weight = 0; for (Shader.ShaderType shaderType : shaderNames.keySet()) { String language = shaderLanguages.get(shaderType); String shaderFile = shaderNames.get(shaderType); this.shaderLanguages.put(shaderType, language); this.shaderNames.put(shaderType, shaderFile); Caps cap = Caps.valueOf(language); requiredCaps.add(cap); weight = Math.max(weight, cap.ordinal()); if (shaderType.equals(Shader.ShaderType.Geometry)) { requiredCaps.add(Caps.GeometryShader); } else if (shaderType.equals(Shader.ShaderType.TessellationControl)) { requiredCaps.add(Caps.TesselationShader); } } }
private void writeShaders(TechniqueDef techniqueDef, OutputStreamWriter out) throws IOException { if (techniqueDef.getShaderProgramNames().size() > 0) { for (Shader.ShaderType shaderType : techniqueDef.getShaderProgramNames().keySet()) { // System.err.println(shaderType + " " +techniqueDef.getShaderProgramNames().get(shaderType) + " " +techniqueDef.getShaderProgramLanguage(shaderType)) out.write(" "); out.write(shaderType.name()); out.write("Shader "); out.write(techniqueDef.getShaderProgramLanguage(shaderType)); out.write(": "); out.write(techniqueDef.getShaderProgramNames().get(shaderType)); out.write("\n"); } out.write("\n"); } }
@Override public String toString(){ String nameTxt = ""; if (name != null) nameTxt = "name="+name+", "; if (defines != null) nameTxt += "defines, "; return getClass().getSimpleName() + "["+nameTxt+"type=" + sourceType.name()+", language=" + language + "]"; }
private void readShaderStatement(String statement) throws IOException { String[] split = statement.split(":"); if (split.length != 2) { throw new IOException("Shader statement syntax incorrect" + statement); } String[] typeAndLang = split[0].split(whitespacePattern); for (Shader.ShaderType shaderType : Shader.ShaderType.values()) { if (typeAndLang[0].equals(shaderType.toString() + "Shader")) { readShaderDefinition(shaderType, split[1].trim(), Arrays.copyOfRange(typeAndLang, 1, typeAndLang.length)); } } }
@Override public String toString(){ String nameTxt = ""; if (name != null) nameTxt = "name="+name+", "; if (defines != null) nameTxt += "defines, "; return getClass().getSimpleName() + "["+nameTxt+"type=" + shaderType.name()+"]"; }
shaderNodeDefinition.setType(ShaderType.valueOf(type)); } else if (line.startsWith("Shader ")) { readShaderStatement(statement);
} else { shader = new Shader(); for (ShaderType type : ShaderType.values()) { String language = shaderLanguages.get(type); String shaderSourceAssetName = shaderNames.get(type);
/** * Generate vertex and fragment shaders for the given technique * * @return a Shader program */ public Shader generateShader(String definesSourceCode) { if (techniqueDef == null) { throw new UnsupportedOperationException("The shaderGenerator was not " + "properly initialized, call " + "initialize(TechniqueDef) before any generation"); } String techniqueName = techniqueDef.getName(); ShaderGenerationInfo info = techniqueDef.getShaderGenerationInfo(); Shader shader = new Shader(); for (ShaderType type : ShaderType.values()) { String extension = type.getExtension(); String language = getLanguageAndVersion(type); String shaderSourceCode = buildShader(techniqueDef.getShaderNodes(), info, type); if (shaderSourceCode != null) { String shaderSourceAssetName = techniqueName + "." + extension; shader.addSource(type, shaderSourceAssetName, shaderSourceCode, definesSourceCode, language); } } techniqueDef = null; return shader; }
private void writeShaders(TechniqueDef techniqueDef, OutputStreamWriter out) throws IOException { if (techniqueDef.getShaderProgramNames().size() > 0) { for (Shader.ShaderType shaderType : techniqueDef.getShaderProgramNames().keySet()) { // System.err.println(shaderType + " " +techniqueDef.getShaderProgramNames().get(shaderType) + " " +techniqueDef.getShaderProgramLanguage(shaderType)) out.write(" "); out.write(shaderType.name()); out.write("Shader "); out.write(techniqueDef.getShaderProgramLanguage(shaderType)); out.write(": "); out.write(techniqueDef.getShaderProgramNames().get(shaderType)); out.write("\n"); } out.write("\n"); } }
@Override public String toString(){ String nameTxt = ""; if (name != null) nameTxt = "name="+name+", "; if (defines != null) nameTxt += "defines, "; return getClass().getSimpleName() + "["+nameTxt+"type=" + sourceType.name()+", language=" + language + "]"; }