From fb7165e690546359dee92dd60b04be69f141c87e Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 19 Feb 2012 03:10:09 +0100 Subject: Cleanup ShaderCode/Program/State - Add multiple sources for create ShaderCode - Add Shaderstate attachShaderProgram w/ enable flag - Clarify doc --- .../com/jogamp/opengl/util/glsl/ShaderCode.java | 52 +++++++++++++--------- 1 file changed, 32 insertions(+), 20 deletions(-) (limited to 'src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java') 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 cc75b89c0..85e288638 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java +++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java @@ -94,7 +94,7 @@ public class ShaderCode { String[][] shaderSources = null; if(null!=sourceFiles) { shaderSources = new String[sourceFiles.length][1]; - for(int i=0; null!=shaderSources && i context, String srcRoot, String binRoot, String basename) { + return create(gl, type, number, context, srcRoot, new String[] { basename }, binRoot, basename ); + } + + public static ShaderCode create(GL2ES2 gl, int type, int number, Class context, + String srcRoot, String[] srcBasenames, String binRoot, String binBasename) { ShaderCode res = null; - String srcFileName = null; + final String srcPath[]; + String srcPathString = null; String binFileName = null; - if(ShaderUtil.isShaderCompilerAvailable(gl)) { - String srcPath[] = new String[1]; - srcFileName = srcRoot + '/' + basename + "." + getFileSuffix(false, type); - srcPath[0] = srcFileName; + if(null!=srcRoot && null!=srcBasenames && ShaderUtil.isShaderCompilerAvailable(gl)) { + srcPath = new String[srcBasenames.length]; + final String srcSuffix = getFileSuffix(false, type); + for(int i=0; i binFmts = ShaderUtil.getShaderBinaryFormats(gl); - for(Iterator iter=binFmts.iterator(); null==res && iter.hasNext(); ) { - int bFmt = iter.next().intValue(); - String bFmtPath = getBinarySubPath(bFmt); - if(null==bFmtPath) continue; - binFileName = binRoot + '/' + bFmtPath + '/' + basename + "." + getFileSuffix(true, type); - res = create(type, number, context, bFmt, binFileName); - } - - if(null==res) { - throw new GLException("No shader code found (source nor binary) for src: "+srcFileName+ - ", bin: "+binFileName); + if(null!=binRoot && null!=binBasename) { + Set binFmts = ShaderUtil.getShaderBinaryFormats(gl); + final String binSuffix = getFileSuffix(true, type); + for(Iterator iter=binFmts.iterator(); iter.hasNext(); ) { + int bFmt = iter.next().intValue(); + String bFmtPath = getBinarySubPath(bFmt); + if(null==bFmtPath) continue; + binFileName = binRoot + '/' + bFmtPath + '/' + binBasename + "." + binSuffix; + res = create(type, number, context, bFmt, binFileName); + if(null!=res) { + return res; + } + } } - - return res; + throw new GLException("No shader code found (source nor binary) for src: "+srcPathString+ + ", bin: "+binFileName); } /** -- cgit v1.2.3