diff options
author | Sven Gothel <[email protected]> | 2011-04-22 05:38:28 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2011-04-22 05:38:28 +0200 |
commit | b3eebc2480bf96df8626d8494692ab5a3b5d88e7 (patch) | |
tree | 08564c255b1a37528847f773bf81b4147745cefb /src/jogl/classes/com/jogamp/opengl/util/glsl | |
parent | 7ac7b81d5cf10187aca8c1df85d1cf44fef299d3 (diff) |
Fix/Add: Locator (Handle JarURLConnection and ..)
new: 'public static String getRelativeOf(URL baseLocation, String relativeFile)',
capable of handling a JAR file/url.
Using File based relative locator, allowing better utilization in code:
old public static String getRelativeOf(String absoluteFileLocation, String relativeFile)
new public static String getRelativeOf(File baseLocation, String relativeFile)
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util/glsl')
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java index 1f59318f2..c735de468 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java +++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java @@ -290,26 +290,35 @@ public class ShaderCode { } } - public static void readShaderSource(ClassLoader context, String path, URL url, StringBuffer result) { + public static void readShaderSource(Class context, URL url, StringBuffer result) { try { + if(DEBUG_CODE) { + System.err.println("ShaderCode.readShaderSource<0>: "+url); + } BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String line = null; while ((line = reader.readLine()) != null) { if (line.startsWith("#include ")) { String includeFile = line.substring(9).trim(); + URL nextURL = null; + // Try relative path first - String next = Locator.getRelativeOf(path, includeFile); - URL nextURL = Locator.getResource(next, context); + String next = Locator.getRelativeOf(url, includeFile); + if(null != next) { + nextURL = Locator.getResource(context, next); + } if (nextURL == null) { // Try absolute path - next = includeFile; - nextURL = Locator.getResource(next, context); + nextURL = Locator.getResource(context, includeFile); } if (nextURL == null) { // Fail throw new FileNotFoundException("Can't find include file " + includeFile); } - readShaderSource(context, next, nextURL, result); + if(DEBUG_CODE) { + System.err.println("ShaderCode.readShaderSource<I>: "+url+" + "+includeFile+" := "+nextURL); + } + readShaderSource(context, nextURL, result); } else { result.append(line + "\n"); } @@ -320,16 +329,12 @@ public class ShaderCode { } public static String readShaderSource(Class context, String path) { - ClassLoader contextCL = (null!=context)?context.getClassLoader():null; URL url = Locator.getResource(context, path); if (url == null) { return null; - } - File pf = new File(url.getPath()); - path = pf.getParent() + "/" ; - + } StringBuffer result = new StringBuffer(); - readShaderSource(contextCL, path, url, result); + readShaderSource(context, url, result); return result.toString(); } |