added auto closing readers. (#738)
This commit is contained in:
parent
989c7926df
commit
66137d53b8
@ -31,12 +31,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.shader.plugins;
|
package com.jme3.shader.plugins;
|
||||||
|
|
||||||
import com.jme3.asset.AssetInfo;
|
import com.jme3.asset.*;
|
||||||
import com.jme3.asset.AssetKey;
|
|
||||||
import com.jme3.asset.AssetLoadException;
|
|
||||||
import com.jme3.asset.AssetLoader;
|
|
||||||
import com.jme3.asset.AssetManager;
|
|
||||||
import com.jme3.asset.cache.AssetCache;
|
import com.jme3.asset.cache.AssetCache;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
@ -49,7 +46,7 @@ import java.util.*;
|
|||||||
public class GLSLLoader implements AssetLoader {
|
public class GLSLLoader implements AssetLoader {
|
||||||
|
|
||||||
private AssetManager assetManager;
|
private AssetManager assetManager;
|
||||||
private Map<String, ShaderDependencyNode> dependCache = new HashMap<String, ShaderDependencyNode>();
|
private Map<String, ShaderDependencyNode> dependCache = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to load {@link ShaderDependencyNode}s.
|
* Used to load {@link ShaderDependencyNode}s.
|
||||||
@ -70,25 +67,27 @@ public class GLSLLoader implements AssetLoader {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link ShaderDependencyNode} from a stream representing shader code.
|
* Creates a {@link ShaderDependencyNode} from a stream representing shader code.
|
||||||
*
|
*
|
||||||
* @param in The input stream containing shader code
|
* @param reader the reader with shader code
|
||||||
* @param nodeName
|
* @param nodeName the node name.
|
||||||
* @return
|
* @return the shader dependency node
|
||||||
* @throws IOException
|
* @throws AssetLoadException if we failed to load the shader code.
|
||||||
*/
|
*/
|
||||||
private ShaderDependencyNode loadNode(Reader reader, String nodeName) {
|
private ShaderDependencyNode loadNode(Reader reader, String nodeName) {
|
||||||
ShaderDependencyNode node = new ShaderDependencyNode(nodeName);
|
|
||||||
|
|
||||||
|
ShaderDependencyNode node = new ShaderDependencyNode(nodeName);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
StringBuilder sbExt = new StringBuilder();
|
StringBuilder sbExt = new StringBuilder();
|
||||||
BufferedReader bufReader = null;
|
|
||||||
try {
|
try (final BufferedReader bufferedReader = new BufferedReader(reader)) {
|
||||||
bufReader = new BufferedReader(reader);
|
|
||||||
String ln;
|
String ln;
|
||||||
|
|
||||||
if (!nodeName.equals("[main]")) {
|
if (!nodeName.equals("[main]")) {
|
||||||
sb.append("// -- begin import ").append(nodeName).append(" --\n");
|
sb.append("// -- begin import ").append(nodeName).append(" --\n");
|
||||||
}
|
}
|
||||||
while ((ln = bufReader.readLine()) != null) {
|
|
||||||
|
while ((ln = bufferedReader.readLine()) != null) {
|
||||||
if (ln.trim().startsWith("#import ")) {
|
if (ln.trim().startsWith("#import ")) {
|
||||||
ln = ln.trim().substring(8).trim();
|
ln = ln.trim().substring(8).trim();
|
||||||
if (ln.startsWith("\"") && ln.endsWith("\"") && ln.length() > 3) {
|
if (ln.startsWith("\"") && ln.endsWith("\"") && ln.length() > 3) {
|
||||||
@ -118,13 +117,7 @@ public class GLSLLoader implements AssetLoader {
|
|||||||
if (!nodeName.equals("[main]")) {
|
if (!nodeName.equals("[main]")) {
|
||||||
sb.append("// -- end import ").append(nodeName).append(" --\n");
|
sb.append("// -- end import ").append(nodeName).append(" --\n");
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (final IOException ex) {
|
||||||
if (bufReader != null) {
|
|
||||||
try {
|
|
||||||
bufReader.close();
|
|
||||||
} catch (IOException ex1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new AssetLoadException("Failed to load shader node: " + nodeName, ex);
|
throw new AssetLoadException("Failed to load shader node: " + nodeName, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +130,7 @@ public class GLSLLoader implements AssetLoader {
|
|||||||
private ShaderDependencyNode nextIndependentNode() throws IOException {
|
private ShaderDependencyNode nextIndependentNode() throws IOException {
|
||||||
Collection<ShaderDependencyNode> allNodes = dependCache.values();
|
Collection<ShaderDependencyNode> allNodes = dependCache.values();
|
||||||
|
|
||||||
if (allNodes == null || allNodes.isEmpty()) {
|
if (allNodes.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +161,7 @@ public class GLSLLoader implements AssetLoader {
|
|||||||
return node.getSource();
|
return node.getSource();
|
||||||
} else {
|
} else {
|
||||||
StringBuilder sb = new StringBuilder(node.getSource());
|
StringBuilder sb = new StringBuilder(node.getSource());
|
||||||
List<String> resolvedShaderNodes = new ArrayList<String>();
|
List<String> resolvedShaderNodes = new ArrayList<>();
|
||||||
|
|
||||||
for (ShaderDependencyNode dependencyNode : node.getDependencies()) {
|
for (ShaderDependencyNode dependencyNode : node.getDependencies()) {
|
||||||
resolvedShaderNodes.add(resolveDependencies(dependencyNode, alreadyInjectedSet, extensions));
|
resolvedShaderNodes.add(resolveDependencies(dependencyNode, alreadyInjectedSet, extensions));
|
||||||
@ -182,8 +175,9 @@ public class GLSLLoader implements AssetLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Object load(AssetInfo info) throws IOException {
|
public Object load(AssetInfo info) throws IOException {
|
||||||
// The input stream provided is for the vertex shader,
|
// The input stream provided is for the vertex shader,
|
||||||
// to retrieve the fragment shader, use the content manager
|
// to retrieve the fragment shader, use the content manager
|
||||||
this.assetManager = info.getManager();
|
this.assetManager = info.getManager();
|
||||||
Reader reader = new InputStreamReader(info.openStream());
|
Reader reader = new InputStreamReader(info.openStream());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user