aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java')
-rw-r--r--src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java98
1 files changed, 39 insertions, 59 deletions
diff --git a/src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java b/src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java
index 6e7512e6a..606d2e1b5 100644
--- a/src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java
+++ b/src/jogl/classes/com/sun/opengl/util/glsl/ShaderCode.java
@@ -3,13 +3,18 @@ package com.sun.opengl.util.glsl;
import javax.media.opengl.*;
import com.sun.opengl.util.*;
+import com.sun.opengl.impl.Debug;
import java.util.*;
import java.nio.*;
import java.io.*;
import java.net.*;
+import java.security.*;
public class ShaderCode {
+ public static final boolean DEBUG = Debug.debug("GLSLCode");
+ public static final boolean DEBUG_CODE = Debug.isPropertyDefined("jogl.debug.GLSLCode", true, AccessController.getContext());
+
public static final String SUFFIX_VERTEX_SOURCE = "vp" ;
public static final String SUFFIX_VERTEX_BINARY = "bvp" ;
public static final String SUFFIX_FRAGMENT_SOURCE = "fp" ;
@@ -31,6 +36,11 @@ public class ShaderCode {
shaderType = type;
shader = BufferUtil.newIntBuffer(number);
id = getNextID();
+
+ if(DEBUG_CODE) {
+ System.out.println("Created: "+toString());
+ dumpShaderSource(System.out);
+ }
}
public ShaderCode(int type, int number, int binFormat, Buffer binary) {
@@ -134,61 +144,6 @@ public class ShaderCode {
return res;
}
- public static boolean createAndLoadShader(GL2ES2 gl, IntBuffer shader, int shaderType,
- int binFormat, java.nio.Buffer bin,
- PrintStream verboseOut)
- {
- int err = gl.glGetError(); // flush previous errors ..
- if(err!=GL.GL_NO_ERROR && null!=verboseOut) {
- verboseOut.println("createAndLoadShader: Pre GL Error: 0x"+Integer.toHexString(err));
- }
-
- ShaderUtil.createShader(gl, shaderType, shader);
- err = gl.glGetError();
- if(err!=GL.GL_NO_ERROR) {
- throw new GLException("createAndLoadShader: CreateShader failed, GL Error: 0x"+Integer.toHexString(err));
- }
-
-
- ShaderUtil.shaderBinary(gl, shader, binFormat, bin);
-
- err = gl.glGetError();
- if(err!=GL.GL_NO_ERROR && null!=verboseOut) {
- verboseOut.println("createAndLoadShader: ShaderBinary failed, GL Error: 0x"+Integer.toHexString(err));
- }
- return err == GL.GL_NO_ERROR;
- }
-
- public static boolean createAndCompileShader(GL2ES2 gl, IntBuffer shader, int shaderType,
- java.lang.String[][] sources,
- PrintStream verboseOut)
- {
- int err = gl.glGetError(); // flush previous errors ..
- if(err!=GL.GL_NO_ERROR && null!=verboseOut) {
- verboseOut.println("createAndCompileShader: Pre GL Error: 0x"+Integer.toHexString(err));
- }
-
- ShaderUtil.createShader(gl, shaderType, shader);
- err = gl.glGetError();
- if(err!=GL.GL_NO_ERROR) {
- throw new GLException("createAndCompileShader: CreateShader failed, GL Error: 0x"+Integer.toHexString(err));
- }
-
- ShaderUtil.shaderSource(gl, shader, sources);
- err = gl.glGetError();
- if(err!=GL.GL_NO_ERROR) {
- throw new GLException("createAndCompileShader: ShaderSource failed, GL Error: 0x"+Integer.toHexString(err));
- }
-
- ShaderUtil.compileShader(gl, shader);
- err = gl.glGetError();
- if(err!=GL.GL_NO_ERROR && null!=verboseOut) {
- verboseOut.println("createAndCompileShader: CompileShader failed, GL Error: 0x"+Integer.toHexString(err));
- }
-
- return ShaderUtil.isShaderStatusValid(gl, shader, gl.GL_COMPILE_STATUS, verboseOut) && err == GL.GL_NO_ERROR;
- }
-
/**
* returns the uniq shader id as an integer
* @see #key()
@@ -231,11 +186,11 @@ public class ShaderCode {
// Create & Compile the vertex/fragment shader objects
if(null!=shaderSource) {
- valid=createAndCompileShader(gl, shader, shaderType,
- shaderSource, verboseOut);
+ valid=ShaderUtil.createAndCompileShader(gl, shader, shaderType,
+ shaderSource, verboseOut);
} else if(null!=shaderBinary) {
- valid=createAndLoadShader(gl, shader, shaderType,
- shaderBinaryFormat, shaderBinary, verboseOut);
+ valid=ShaderUtil.createAndLoadShader(gl, shader, shaderType,
+ shaderBinaryFormat, shaderBinary, verboseOut);
} else {
throw new GLException("no code (source or binary)");
}
@@ -282,6 +237,31 @@ public class ShaderCode {
return buf.toString();
}
+ public void dumpShaderSource(PrintStream out) {
+ if(null==shaderSource) {
+ out.println("<no shader source>");
+ return;
+ }
+ int sourceNum = (null!=shaderSource)?shaderSource.length:0;
+ int shaderNum = (null!=shader)?shader.capacity():0;
+ for(int i=0; i<shaderNum; i++) {
+ out.println("");
+ out.println("Shader #"+i+"/"+shaderNum+" name "+shader.get(i));
+ out.println("--------------------------------------------------------------");
+ if(i>=sourceNum) {
+ out.println("<no shader source>");
+ } else {
+ String[] src = shaderSource[i];
+ for(int j=0; j<src.length; j++) {
+ out.println("Segment "+j+"/"+src.length+" :");
+ out.println(src[j]);
+ out.println("");
+ }
+ }
+ out.println("--------------------------------------------------------------");
+ }
+ }
+
public static void readShaderSource(ClassLoader context, String path, URL url, StringBuffer result) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));