Skip to content

Commit

Permalink
material: warn / ignore fixed function techniques
Browse files Browse the repository at this point in the history
  • Loading branch information
shadowislord committed Apr 10, 2016
1 parent b6729c4 commit 8bd5b59
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
5 changes: 2 additions & 3 deletions jme3-core/src/main/java/com/jme3/material/TechniqueDef.java
Expand Up @@ -134,13 +134,12 @@ public enum ShadowMode {
* <p>
* Used internally by the J3M/J3MD loader.
*
* @param name The name of the technique, should be set to <code>null</code>
* for default techniques.
* @param name The name of the technique
*/
public TechniqueDef(String name, int sortId){
this();
this.sortId = sortId;
this.name = name == null ? TechniqueDef.DEFAULT_TECHNIQUE_NAME : name;
this.name = name;
}

/**
Expand Down
Expand Up @@ -590,18 +590,19 @@ private static String createShaderPrologue(List<String> presetDefines) {
private void readTechnique(Statement techStat) throws IOException{
isUseNodes = false;
String[] split = techStat.getLine().split(whitespacePattern);


String name;
if (split.length == 1) {
String techniqueUniqueName = materialDef.getAssetName() + "@Default";
technique = new TechniqueDef(null, techniqueUniqueName.hashCode());
name = TechniqueDef.DEFAULT_TECHNIQUE_NAME;
} else if (split.length == 2) {
String techName = split[1];
String techniqueUniqueName = materialDef.getAssetName() + "@" + techName;
technique = new TechniqueDef(techName, techniqueUniqueName.hashCode());
name = split[1];
} else {
throw new IOException("Technique statement syntax incorrect");
}

String techniqueUniqueName = materialDef.getAssetName() + "@" + name;
technique = new TechniqueDef(name, techniqueUniqueName.hashCode());

for (Statement statement : techStat.getContents()){
readTechniqueStatement(statement);
}
Expand All @@ -619,6 +620,15 @@ private void readTechnique(Statement techStat) throws IOException{

if (shaderNames.containsKey(Shader.ShaderType.Vertex) && shaderNames.containsKey(Shader.ShaderType.Fragment)) {
technique.setShaderFile(shaderNames, shaderLanguages);
} else {
technique = null;
shaderLanguages.clear();
shaderNames.clear();
presetDefines.clear();
logger.log(Level.WARNING, "Fixed function technique was ignored");
logger.log(Level.WARNING, "Fixed function technique ''{0}'' was ignored for material {1}",
new Object[]{name, key});
return;
}

technique.setShaderPrologue(createShaderPrologue(presetDefines));
Expand Down
Expand Up @@ -55,6 +55,21 @@ public void setUp() throws Exception {
j3MLoader = new J3MLoader();
}

@Test
public void noDefaultTechnique_shouldBeSupported() throws IOException {
when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/no-default-technique.j3md"));
MaterialDef def = (MaterialDef) j3MLoader.load(assetInfo);
assertEquals(1, def.getTechniqueDefs("Test").size());
}

@Test
public void fixedPipelineTechnique_shouldBeIgnored() throws IOException {
when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/no-shader-specified.j3md"));
MaterialDef def = (MaterialDef) j3MLoader.load(assetInfo);
assertEquals(null, def.getTechniqueDefs("A"));
assertEquals(1, def.getTechniqueDefs("B").size());
}

@Test
public void multipleSameNamedTechniques_shouldBeSupported() throws IOException {
when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/same-name-technique.j3md"));
Expand Down

0 comments on commit 8bd5b59

Please sign in to comment.