diff options
author | Sven Gothel <[email protected]> | 2012-04-16 01:38:49 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-04-16 01:38:49 +0200 |
commit | 62e5686fb583ad991d5811baf242d40d21952e27 (patch) | |
tree | 6bf20b4f0422c1c6e5cdf7843d9ef4e03e08d83b /src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java | |
parent | 131c40a80427d5e35824ad41da375edd4792fb60 (diff) |
API Change ShaderCode/ShaderUtil: Enable optional mutable shader source / generalize shader source storage type to CharSequence[]
Benefits:
- Allows code injection and general shader source editing (before compilation)
- Uses mutable StringBuilder only if editing is intended, hence reduces memory footprint
and String conversion at compilation in such case.
- ShaderCode.create(..) factory methods add nw attribute 'mutableStringBuilder'
if true method returns a mutable StringBuilder instance
which can be edited later on at the costs of a String conversion when passing to
'glShaderSource(int, int, String[], IntBuffer)'.
If <code>false</code> method returns an immutable <code>String</code> instance,
which can be passed to {@link GL2ES2#glShaderSource(int, int, String[], IntBuffer)}
at no additional costs.
- New 'edit' methods in ShaderCode: '
- int insertShaderSource(int shaderIdx, String tag, int fromIndex, CharSequence data);
- int insertShaderSource(int shaderIdx, int position, CharSequence data);
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java')
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java index d8aa1aa7f..40c052498 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java +++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java @@ -200,7 +200,7 @@ public class ShaderUtil { return info.shaderCompilerAvailable.booleanValue(); } - public static void shaderSource(GL _gl, int shader, java.lang.String[] source) + public static void shaderSource(GL _gl, int shader, CharSequence[] source) { final GL2ES2 gl = _gl.getGL2ES2(); if(!isShaderCompilerAvailable(_gl)) { @@ -215,11 +215,27 @@ public class ShaderUtil { IntBuffer lengths = Buffers.newDirectIntBuffer(count); for(int i=0; i<count; i++) { lengths.put(i, source[i].length()); + } + if(source instanceof String[]) { + // rare case .. + gl.glShaderSource(shader, count, (String[])source, lengths); + } else { + final String[] tmp = new String[source.length]; + for(int i = source.length - 1; i>=0; i--) { + final CharSequence csq = source[i]; + if(csq instanceof String) { + // if ShaderCode.create(.. mutableStringBuffer == false ) + tmp[i] = (String) csq; + } else { + // if ShaderCode.create(.. mutableStringBuffer == true ) + tmp[i] = source[i].toString(); + } + } + gl.glShaderSource(shader, count, tmp, lengths); } - gl.glShaderSource(shader, count, source, lengths); } - public static void shaderSource(GL _gl, IntBuffer shaders, java.lang.String[][] sources) + public static void shaderSource(GL _gl, IntBuffer shaders, CharSequence[][] sources) { int sourceNum = (null!=sources)?sources.length:0; int shaderNum = (null!=shaders)?shaders.remaining():0; @@ -312,7 +328,7 @@ public class ShaderUtil { } public static boolean createAndCompileShader(GL _gl, IntBuffer shader, int shaderType, - java.lang.String[][] sources, + CharSequence[][] sources, PrintStream verboseOut) { final GL2ES2 gl = _gl.getGL2ES2(); |