Refactoring of the shader system to allow addition of new shaderstages
This commit is contained in:
parent
ab4d665b3e
commit
0d3292c83a
jme3-core/src
main/java/com/jme3
plugins/java/com/jme3/material/plugins
tools/java/jme3tools/shadercheck
@ -402,6 +402,7 @@ public class DesktopAssetManager implements AssetManager {
|
||||
}
|
||||
shader = shaderGenerator.generateShader();
|
||||
} else {
|
||||
|
||||
String vertName = key.getVertName();
|
||||
String fragName = key.getFragName();
|
||||
|
||||
|
@ -190,11 +190,7 @@ public class Technique /* implements Savable */ {
|
||||
|
||||
private void loadShader(AssetManager manager,EnumSet<Caps> rendererCaps) {
|
||||
|
||||
ShaderKey key = new ShaderKey(def.getVertexShaderName(),
|
||||
def.getFragmentShaderName(),
|
||||
getAllDefines(),
|
||||
def.getVertexShaderLanguage(),
|
||||
def.getFragmentShaderLanguage());
|
||||
ShaderKey key = new ShaderKey(getAllDefines(),def.getShaderProgramLanguages(),def.getShaderProgramNames());
|
||||
|
||||
if (getDef().isUsingShaderNodes()) {
|
||||
manager.getShaderGenerator(rendererCaps).initialize(this);
|
||||
|
@ -34,15 +34,10 @@ package com.jme3.material;
|
||||
import com.jme3.export.*;
|
||||
import com.jme3.renderer.Caps;
|
||||
import com.jme3.renderer.Renderer;
|
||||
import com.jme3.shader.DefineList;
|
||||
import com.jme3.shader.ShaderNode;
|
||||
import com.jme3.shader.UniformBinding;
|
||||
import com.jme3.shader.VarType;
|
||||
import com.jme3.shader.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Describes a technique definition.
|
||||
@ -56,6 +51,8 @@ public class TechniqueDef implements Savable {
|
||||
*/
|
||||
public static final int SAVABLE_VERSION = 1;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Describes light rendering mode.
|
||||
*/
|
||||
@ -100,10 +97,8 @@ public class TechniqueDef implements Savable {
|
||||
private EnumSet<Caps> requiredCaps = EnumSet.noneOf(Caps.class);
|
||||
private String name;
|
||||
|
||||
private String vertName;
|
||||
private String fragName;
|
||||
private String vertLanguage;
|
||||
private String fragLanguage;
|
||||
private EnumMap<Shader.ShaderType,String> shaderLanguage;
|
||||
private EnumMap<Shader.ShaderType,String> shaderName;
|
||||
|
||||
private DefineList presetDefines;
|
||||
private boolean usesShaders;
|
||||
@ -129,6 +124,7 @@ public class TechniqueDef implements Savable {
|
||||
* for default techniques.
|
||||
*/
|
||||
public TechniqueDef(String name){
|
||||
this();
|
||||
this.name = name == null ? "Default" : name;
|
||||
}
|
||||
|
||||
@ -136,6 +132,8 @@ public class TechniqueDef implements Savable {
|
||||
* Serialization only. Do not use.
|
||||
*/
|
||||
public TechniqueDef(){
|
||||
shaderLanguage=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
shaderName=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -244,11 +242,10 @@ public class TechniqueDef implements Savable {
|
||||
* @param fragLanguage The fragment shader language
|
||||
*/
|
||||
public void setShaderFile(String vertexShader, String fragmentShader, String vertLanguage, String fragLanguage){
|
||||
this.vertName = vertexShader;
|
||||
this.fragName = fragmentShader;
|
||||
this.vertLanguage = vertLanguage;
|
||||
this.fragLanguage = fragLanguage;
|
||||
|
||||
this.shaderLanguage.put(Shader.ShaderType.Vertex,shaderLanguage.get(vertLanguage));
|
||||
this.shaderName.put(Shader.ShaderType.Vertex,shaderName.get(vertexShader));
|
||||
this.shaderLanguage.put(Shader.ShaderType.Fragment,shaderLanguage.get(fragLanguage));
|
||||
this.shaderName.put(Shader.ShaderType.Fragment,shaderName.get(fragmentShader));
|
||||
Caps vertCap = Caps.valueOf(vertLanguage);
|
||||
requiredCaps.add(vertCap);
|
||||
Caps fragCap = Caps.valueOf(fragLanguage);
|
||||
@ -257,6 +254,26 @@ public class TechniqueDef implements Savable {
|
||||
usesShaders = true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the shaders that this technique definition will use.
|
||||
*
|
||||
* @param shaderName EnumMap containing all shader names for this stage
|
||||
* @param shaderLanguage EnumMap containing all shader languages for this stage
|
||||
*/
|
||||
public void setShaderFile(EnumMap<Shader.ShaderType, String> shaderName, EnumMap<Shader.ShaderType, String> shaderLanguage) {
|
||||
for (Shader.ShaderType shaderType : shaderName.keySet()) {
|
||||
this.shaderLanguage.put(shaderType,shaderLanguage.get(shaderType));
|
||||
this.shaderName.put(shaderType,shaderName.get(shaderType));
|
||||
if(shaderType.equals(Shader.ShaderType.Geometry)){
|
||||
requiredCaps.add(Caps.GeometryShader);
|
||||
}else if(shaderType.equals(Shader.ShaderType.TesselationControl)){
|
||||
requiredCaps.add(Caps.TesselationShader);
|
||||
}
|
||||
}
|
||||
usesShaders=true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the define name which the given material parameter influences.
|
||||
*
|
||||
@ -329,7 +346,7 @@ public class TechniqueDef implements Savable {
|
||||
* @return the name of the fragment shader to be used.
|
||||
*/
|
||||
public String getFragmentShaderName() {
|
||||
return fragName;
|
||||
return shaderName.get(Shader.ShaderType.Fragment);
|
||||
}
|
||||
|
||||
|
||||
@ -340,7 +357,7 @@ public class TechniqueDef implements Savable {
|
||||
* @return the name of the vertex shader to be used.
|
||||
*/
|
||||
public String getVertexShaderName() {
|
||||
return vertName;
|
||||
return shaderName.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -348,21 +365,34 @@ public class TechniqueDef implements Savable {
|
||||
*/
|
||||
@Deprecated
|
||||
public String getShaderLanguage() {
|
||||
return vertLanguage;
|
||||
return shaderLanguage.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the language of the fragment shader used in this technique.
|
||||
*/
|
||||
public String getFragmentShaderLanguage() {
|
||||
return fragLanguage;
|
||||
return shaderLanguage.get(Shader.ShaderType.Fragment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the language of the vertex shader used in this technique.
|
||||
*/
|
||||
public String getVertexShaderLanguage() {
|
||||
return vertLanguage;
|
||||
return shaderLanguage.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
/**Returns the language for each shader program
|
||||
* @param shaderType
|
||||
*/
|
||||
public String getShaderProgramLanguage(Shader.ShaderType shaderType){
|
||||
return shaderLanguage.get(shaderType);
|
||||
}
|
||||
/**Returns the name for each shader program
|
||||
* @param shaderType
|
||||
*/
|
||||
public String getShaderProgramName(Shader.ShaderType shaderType){
|
||||
return shaderName.get(shaderType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -406,10 +436,18 @@ public class TechniqueDef implements Savable {
|
||||
public void write(JmeExporter ex) throws IOException{
|
||||
OutputCapsule oc = ex.getCapsule(this);
|
||||
oc.write(name, "name", null);
|
||||
oc.write(vertName, "vertName", null);
|
||||
oc.write(fragName, "fragName", null);
|
||||
oc.write(vertLanguage, "vertLanguage", null);
|
||||
oc.write(vertLanguage, "fragLanguage", null);
|
||||
|
||||
oc.write(shaderName.get(Shader.ShaderType.Vertex), "vertName", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.Fragment), "fragName", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.Geometry), "geomName", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.TesselationControl), "tsctrlName", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.TesselationEvaluation), "tsevalName", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.Vertex), "vertLanguage", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.Fragment), "fragLanguage", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.Geometry), "geomLanguage", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.TesselationControl), "tsctrlLanguage", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.TesselationEvaluation), "tsevalLanguage", null);
|
||||
|
||||
oc.write(presetDefines, "presetDefines", null);
|
||||
oc.write(lightMode, "lightMode", LightMode.Disable);
|
||||
oc.write(shadowMode, "shadowMode", ShadowMode.Disable);
|
||||
@ -428,8 +466,11 @@ public class TechniqueDef implements Savable {
|
||||
public void read(JmeImporter im) throws IOException{
|
||||
InputCapsule ic = im.getCapsule(this);
|
||||
name = ic.readString("name", null);
|
||||
vertName = ic.readString("vertName", null);
|
||||
fragName = ic.readString("fragName", null);
|
||||
shaderName.put(Shader.ShaderType.Vertex,ic.readString("vertName", null));
|
||||
shaderName.put(Shader.ShaderType.Fragment,ic.readString("fragName", null));
|
||||
shaderName.put(Shader.ShaderType.Geometry,ic.readString("geomName", null));
|
||||
shaderName.put(Shader.ShaderType.TesselationControl,ic.readString("tsctrlName", null));
|
||||
shaderName.put(Shader.ShaderType.TesselationEvaluation,ic.readString("tsevalName", null));
|
||||
presetDefines = (DefineList) ic.readSavable("presetDefines", null);
|
||||
lightMode = ic.readEnum("lightMode", LightMode.class, LightMode.Disable);
|
||||
shadowMode = ic.readEnum("shadowMode", ShadowMode.class, ShadowMode.Disable);
|
||||
@ -438,12 +479,15 @@ public class TechniqueDef implements Savable {
|
||||
|
||||
if (ic.getSavableVersion(TechniqueDef.class) == 0) {
|
||||
// Old version
|
||||
vertLanguage = ic.readString("shaderLang", null);
|
||||
fragLanguage = vertLanguage;
|
||||
shaderLanguage.put(Shader.ShaderType.Vertex,ic.readString("shaderLang", null));
|
||||
shaderLanguage.put(Shader.ShaderType.Fragment,shaderLanguage.get(Shader.ShaderType.Vertex));
|
||||
} else {
|
||||
// New version
|
||||
vertLanguage = ic.readString("vertLanguage", null);
|
||||
fragLanguage = ic.readString("fragLanguage", null);;
|
||||
shaderLanguage.put(Shader.ShaderType.Vertex,ic.readString("vertLanguage", null));
|
||||
shaderLanguage.put(Shader.ShaderType.Fragment,ic.readString("fragLanguage", null));
|
||||
shaderLanguage.put(Shader.ShaderType.Geometry,ic.readString("geomLanguage", null));
|
||||
shaderLanguage.put(Shader.ShaderType.TesselationControl,ic.readString("tsctrlLanguage", null));
|
||||
shaderLanguage.put(Shader.ShaderType.TesselationEvaluation,ic.readString("tsevalLanguage", null));
|
||||
}
|
||||
|
||||
usesNodes = ic.readBoolean("usesNodes", false);
|
||||
@ -461,6 +505,16 @@ public class TechniqueDef implements Savable {
|
||||
usesShaders = true;
|
||||
}
|
||||
|
||||
//todo: add javadoc
|
||||
public EnumMap<Shader.ShaderType, String> getShaderProgramNames() {
|
||||
return shaderName;
|
||||
}
|
||||
|
||||
//todo: add javadoc
|
||||
public EnumMap<Shader.ShaderType, String> getShaderProgramLanguages() {
|
||||
return shaderLanguage;
|
||||
}
|
||||
|
||||
public ShaderGenerationInfo getShaderGenerationInfo() {
|
||||
return shaderGenerationInfo;
|
||||
}
|
||||
@ -469,8 +523,9 @@ public class TechniqueDef implements Savable {
|
||||
this.shaderGenerationInfo = shaderGenerationInfo;
|
||||
}
|
||||
|
||||
//todo: make toString return something usefull
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TechniqueDef{" + "requiredCaps=" + requiredCaps + ", name=" + name + ", vertName=" + vertName + ", fragName=" + fragName + ", vertLanguage=" + vertLanguage + ", fragLanguage=" + fragLanguage + ", presetDefines=" + presetDefines + ", usesShaders=" + usesShaders + ", usesNodes=" + usesNodes + ", shaderNodes=" + shaderNodes + ", shaderGenerationInfo=" + shaderGenerationInfo + ", renderState=" + renderState + ", forcedRenderState=" + forcedRenderState + ", lightMode=" + lightMode + ", shadowMode=" + shadowMode + ", defineParams=" + defineParams + ", worldBinds=" + worldBinds + '}';
|
||||
return "TechniqueDef{" + "requiredCaps=" + requiredCaps + ", name=" + name /*+ ", vertName=" + vertName + ", fragName=" + fragName + ", vertLanguage=" + vertLanguage + ", fragLanguage=" + fragLanguage */+ ", presetDefines=" + presetDefines + ", usesShaders=" + usesShaders + ", usesNodes=" + usesNodes + ", shaderNodes=" + shaderNodes + ", shaderGenerationInfo=" + shaderGenerationInfo + ", renderState=" + renderState + ", forcedRenderState=" + forcedRenderState + ", lightMode=" + lightMode + ", shadowMode=" + shadowMode + ", defineParams=" + defineParams + ", worldBinds=" + worldBinds + '}';
|
||||
}
|
||||
}
|
||||
|
@ -37,25 +37,30 @@ import com.jme3.export.JmeExporter;
|
||||
import com.jme3.export.JmeImporter;
|
||||
import com.jme3.export.OutputCapsule;
|
||||
import java.io.IOException;
|
||||
import java.util.EnumMap;
|
||||
|
||||
public class ShaderKey extends AssetKey<Shader> {
|
||||
|
||||
protected String fragName;
|
||||
protected EnumMap<Shader.ShaderType,String> shaderLanguage;
|
||||
protected EnumMap<Shader.ShaderType,String> shaderName;
|
||||
protected DefineList defines;
|
||||
protected String vertLanguage;
|
||||
protected String fragLanguage;
|
||||
protected int cachedHashedCode = 0;
|
||||
protected boolean usesShaderNodes = false;
|
||||
|
||||
public ShaderKey(){
|
||||
shaderLanguage=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
shaderName=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
}
|
||||
|
||||
public ShaderKey(String vertName, String fragName, DefineList defines, String vertLanguage, String fragLanguage){
|
||||
super(vertName);
|
||||
this.fragName = fragName;
|
||||
public ShaderKey(DefineList defines, EnumMap<Shader.ShaderType,String> shaderLanguage,EnumMap<Shader.ShaderType,String> shaderName){
|
||||
super(shaderName.get(Shader.ShaderType.Vertex));
|
||||
this.shaderLanguage=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
this.shaderName=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
this.defines = defines;
|
||||
this.vertLanguage = vertLanguage;
|
||||
this.fragLanguage = fragLanguage;
|
||||
for (Shader.ShaderType shaderType : shaderName.keySet()) {
|
||||
this.shaderName.put(shaderType,shaderName.get(shaderType));
|
||||
this.shaderLanguage.put(shaderType,shaderLanguage.get(shaderType));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -68,13 +73,15 @@ public class ShaderKey extends AssetKey<Shader> {
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return "V="+name + " F=" + fragName + (defines != null ? defines : "");
|
||||
//todo:
|
||||
return "V="+name+";";
|
||||
}
|
||||
|
||||
//todo: make equals and hashCode work
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
final ShaderKey other = (ShaderKey) obj;
|
||||
if (name.equals(other.name) && fragName.equals(other.fragName)){
|
||||
if (name.equals(other.name) && shaderName.get(Shader.ShaderType.Fragment).equals(other.shaderName.get(Shader.ShaderType.Fragment))){
|
||||
if (defines != null && other.defines != null) {
|
||||
return defines.equals(other.defines);
|
||||
} else if (defines != null || other.defines != null) {
|
||||
@ -91,7 +98,7 @@ public class ShaderKey extends AssetKey<Shader> {
|
||||
if (cachedHashedCode == 0) {
|
||||
int hash = 7;
|
||||
hash = 41 * hash + name.hashCode();
|
||||
hash = 41 * hash + fragName.hashCode();
|
||||
hash = 41 * hash + shaderName.get(Shader.ShaderType.Fragment).hashCode();
|
||||
hash = 41 * hash + (defines != null ? defines.hashCode() : 0);
|
||||
cachedHashedCode = hash;
|
||||
}
|
||||
@ -103,11 +110,11 @@ public class ShaderKey extends AssetKey<Shader> {
|
||||
}
|
||||
|
||||
public String getVertName(){
|
||||
return name;
|
||||
return shaderName.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
public String getFragName() {
|
||||
return fragName;
|
||||
return shaderName.get(Shader.ShaderType.Fragment);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -115,15 +122,15 @@ public class ShaderKey extends AssetKey<Shader> {
|
||||
*/
|
||||
@Deprecated
|
||||
public String getLanguage() {
|
||||
return vertLanguage;
|
||||
return shaderLanguage.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
public String getVertexShaderLanguage() {
|
||||
return vertLanguage;
|
||||
return shaderLanguage.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
public String getFragmentShaderLanguage() {
|
||||
return fragLanguage;
|
||||
return shaderLanguage.get(Shader.ShaderType.Vertex);
|
||||
}
|
||||
|
||||
public boolean isUsesShaderNodes() {
|
||||
@ -138,18 +145,32 @@ public class ShaderKey extends AssetKey<Shader> {
|
||||
public void write(JmeExporter ex) throws IOException{
|
||||
super.write(ex);
|
||||
OutputCapsule oc = ex.getCapsule(this);
|
||||
oc.write(fragName, "fragment_name", null);
|
||||
oc.write(vertLanguage, "language", null);
|
||||
oc.write(fragLanguage, "frag_language", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.Fragment), "fragment_name", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.Geometry), "geometry_name", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.TesselationControl), "tessControl_name", null);
|
||||
oc.write(shaderName.get(Shader.ShaderType.TesselationEvaluation), "tessEval_name", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.Vertex), "language", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.Fragment), "frag_language", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.Geometry), "geom_language", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.TesselationControl), "tsctrl_language", null);
|
||||
oc.write(shaderLanguage.get(Shader.ShaderType.TesselationEvaluation), "tseval_language", null);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(JmeImporter im) throws IOException{
|
||||
super.read(im);
|
||||
InputCapsule ic = im.getCapsule(this);
|
||||
fragName = ic.readString("fragment_name", null);
|
||||
vertLanguage = ic.readString("language", null);
|
||||
fragLanguage = ic.readString("frag_language", null);
|
||||
shaderName.put(Shader.ShaderType.Vertex,name);
|
||||
shaderName.put(Shader.ShaderType.Fragment,ic.readString("fragment_name", null));
|
||||
shaderName.put(Shader.ShaderType.Geometry,ic.readString("geometry_name", null));
|
||||
shaderName.put(Shader.ShaderType.TesselationControl,ic.readString("tessControl_name", null));
|
||||
shaderName.put(Shader.ShaderType.TesselationEvaluation,ic.readString("tessEval_name", null));
|
||||
shaderLanguage.put(Shader.ShaderType.Vertex,ic.readString("language", null));
|
||||
shaderLanguage.put(Shader.ShaderType.Fragment,ic.readString("frag_language", null));
|
||||
shaderLanguage.put(Shader.ShaderType.Geometry,ic.readString("geom_language", null));
|
||||
shaderLanguage.put(Shader.ShaderType.TesselationControl,ic.readString("tsctrl_language", null));
|
||||
shaderLanguage.put(Shader.ShaderType.TesselationEvaluation,ic.readString("tseval_language", null));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ import com.jme3.material.TechniqueDef.ShadowMode;
|
||||
import com.jme3.math.ColorRGBA;
|
||||
import com.jme3.math.Vector2f;
|
||||
import com.jme3.math.Vector3f;
|
||||
import com.jme3.shader.Shader;
|
||||
import com.jme3.shader.VarType;
|
||||
import com.jme3.texture.Texture;
|
||||
import com.jme3.texture.Texture.WrapMode;
|
||||
@ -50,6 +51,7 @@ import com.jme3.util.blockparser.BlockLanguageParser;
|
||||
import com.jme3.util.blockparser.Statement;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@ -69,15 +71,14 @@ public class J3MLoader implements AssetLoader {
|
||||
private TechniqueDef technique;
|
||||
private RenderState renderState;
|
||||
|
||||
private String vertLanguage;
|
||||
private String fragLanguage;
|
||||
|
||||
private String vertName;
|
||||
private String fragName;
|
||||
private EnumMap<Shader.ShaderType,String> shaderLanguage;
|
||||
private EnumMap<Shader.ShaderType,String> shaderName;
|
||||
|
||||
private static final String whitespacePattern = "\\p{javaWhitespace}+";
|
||||
|
||||
public J3MLoader(){
|
||||
shaderLanguage=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
shaderName=new EnumMap<Shader.ShaderType, String>(Shader.ShaderType.class);
|
||||
}
|
||||
|
||||
|
||||
@ -92,14 +93,17 @@ public class J3MLoader implements AssetLoader {
|
||||
throw new IOException("Shader statement syntax incorrect: " + statement);
|
||||
}
|
||||
|
||||
if (typeAndLang[0].equals("VertexShader")) {
|
||||
vertName = split[1].trim();
|
||||
vertLanguage = typeAndLang[1];
|
||||
} else if (typeAndLang[0].equals("FragmentShader")) {
|
||||
fragName = split[1].trim();
|
||||
fragLanguage = typeAndLang[1];
|
||||
for (Shader.ShaderType shaderType : Shader.ShaderType.values()) {
|
||||
if(typeAndLang[0].equals(shaderType.toString()+"Shader")){
|
||||
readShaderDefinition(shaderType,split[1].trim(),typeAndLang[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void readShaderDefinition(Shader.ShaderType shaderType,String name,String language){
|
||||
shaderName.put(shaderType,name);
|
||||
shaderLanguage.put(shaderType,language);
|
||||
}
|
||||
|
||||
// LightMode <MODE>
|
||||
private void readLightMode(String statement) throws IOException{
|
||||
@ -470,16 +474,14 @@ public class J3MLoader implements AssetLoader {
|
||||
technique.setShaderFile(technique.hashCode() + "", technique.hashCode() + "", "GLSL100", "GLSL100");
|
||||
}
|
||||
|
||||
if (vertName != null && fragName != null){
|
||||
technique.setShaderFile(vertName, fragName, vertLanguage, fragLanguage);
|
||||
if(shaderName.containsKey(Shader.ShaderType.Vertex) && shaderName.containsKey(Shader.ShaderType.Fragment)){
|
||||
technique.setShaderFile(shaderName,shaderLanguage);
|
||||
}
|
||||
|
||||
materialDef.addTechniqueDef(technique);
|
||||
technique = null;
|
||||
vertName = null;
|
||||
fragName = null;
|
||||
vertLanguage = null;
|
||||
fragLanguage = null;
|
||||
shaderLanguage.clear();
|
||||
shaderName.clear();
|
||||
}
|
||||
|
||||
private void loadFromRoot(List<Statement> roots) throws IOException{
|
||||
@ -597,7 +599,7 @@ public class J3MLoader implements AssetLoader {
|
||||
|
||||
protected void initNodesLoader() {
|
||||
if (!isUseNodes) {
|
||||
isUseNodes = fragName == null && vertName == null;
|
||||
isUseNodes = shaderName.get(Shader.ShaderType.Vertex) == null && shaderName.get(Shader.ShaderType.Fragment) == null;
|
||||
if (isUseNodes) {
|
||||
if(nodesLoaderDelegate == null){
|
||||
nodesLoaderDelegate = new ShaderNodeLoaderDelegate();
|
||||
|
@ -38,11 +38,8 @@ public class ShaderCheck {
|
||||
for (TechniqueDef techDef : def.getDefaultTechniques()){
|
||||
DefineList dl = new DefineList();
|
||||
dl.addFrom(techDef.getShaderPresetDefines());
|
||||
ShaderKey shaderKey = new ShaderKey(techDef.getVertexShaderName(),
|
||||
techDef.getFragmentShaderName(),
|
||||
dl,
|
||||
techDef.getVertexShaderLanguage(),
|
||||
techDef.getFragmentShaderLanguage());
|
||||
ShaderKey shaderKey = new ShaderKey(dl,techDef.getShaderProgramLanguages(),techDef.getShaderProgramNames());
|
||||
|
||||
Shader shader = assetManager.loadShader(shaderKey);
|
||||
|
||||
for (Validator validator : validators){
|
||||
|
Loading…
x
Reference in New Issue
Block a user