private static boolean isShaderValid(final GL3 gl, final int shaderObj) { int[] result = new int[1]; gl.glGetShaderiv(shaderObj, gl.GL_COMPILE_STATUS, result, 0); return result[0] == gl.GL_TRUE; }
public int getShaderParameter(final int pParamName) { final int lParameter[] = new int[1]; mGL.getGL3().glGetShaderiv(mShaderId, pParamName, lParameter, 0); return lParameter[0]; }
/** * @param shader * @param pname * @param params * @see com.jogamp.opengl.GL2ES2#glGetShaderiv(int, int, java.nio.IntBuffer) */ public void glGetShaderiv(int shader, int pname, IntBuffer params) { try{delegate.glGetShaderiv(shader, pname, params);} catch(GLException e){glException(e); throw e;} } /**
private static String getShaderInfoLog(final GL3 gl, final int shaderObj) { final int[] infoLogLength = new int[1]; gl.glGetShaderiv(shaderObj, gl.GL_INFO_LOG_LENGTH, infoLogLength, 0); if (infoLogLength[0] == 0) { return "valid"; } final int[] charsWritten = new int[1]; final byte[] infoLogBytes = new byte[infoLogLength[0]]; gl.glGetShaderInfoLog(shaderObj, infoLogLength[0], charsWritten, 0, infoLogBytes, 0); return new String(infoLogBytes, 0, charsWritten[0]); } }
/** * @param shader * @param pname * @param params * @param params_offset * @see com.jogamp.opengl.GL2ES2#glGetShaderiv(int, int, int[], int) */ public void glGetShaderiv(int shader, int pname, int[] params, int params_offset) { try{delegate.glGetShaderiv(shader, pname, params, params_offset);} catch(GLException e){glException(e); throw e;} } /**
private void printStatusInfo(GL3 gl, int shaderID) { IntBuffer statBuf = IntBuffer.allocate(1); gl.glGetShaderiv(shaderID, GL4.GL_COMPILE_STATUS, statBuf); if (statBuf.get(0) == GL4.GL_FALSE) { statBuf.clear(); gl.glGetShaderiv(shaderID, GL4.GL_INFO_LOG_LENGTH, statBuf); ByteBuffer log = ByteBuffer.allocate(statBuf.get(0)); gl.glGetShaderInfoLog(shaderID, statBuf.get(0), null, log); System.out.println(Charset.forName("US-ASCII").decode(log) .toString()); System.exit(1); } }// end printStatusInfo(...)
/** * For debugging: Print shader log info * * @param id shader ID */ private void printShaderLogInfo(int id) { IntBuffer infoLogLength = ByteBuffer .allocateDirect(4) .order(ByteOrder.nativeOrder()) .asIntBuffer(); gl.glGetShaderiv(id, GL_INFO_LOG_LENGTH, infoLogLength); if (infoLogLength.get(0) > 0) { infoLogLength.put(0, infoLogLength.get(0) - 1); } ByteBuffer infoLog = ByteBuffer .allocateDirect(infoLogLength.get(0)) .order(ByteOrder.nativeOrder()); gl.glGetShaderInfoLog(id, infoLogLength.get(0), null, infoLog); String infoLogString = Charset.forName("US-ASCII").decode(infoLog).toString(); if (infoLogString.trim().length() > 0) { logger.warning("shader log:\n"+infoLogString); } }
@Override public void glGetShaderiv(int shader, int pname, IntBuffer params) { GLContext.getCurrentGL().getGL3().glGetShaderiv(shader, pname, params); }
@Override public String glGetShaderInfoLog(int shader) { int[] logLength = new int[1]; GLContext.getCurrentGL().getGL3().glGetShaderiv(shader, GL2.GL_INFO_LOG_LENGTH, logLength, 0); byte[] log = new byte[logLength[0]]; if (log.length > 0) { GLContext.getCurrentGL().getGL3().glGetShaderInfoLog(shader, logLength[0], null, 0, log, 0); } return new String(log); }
g.glShaderSource(vs, vertex_source.size(), vertex_lines, vertex_lengths); g.glCompileShader(vs); g.glGetShaderiv(vs, GL2ES2.GL_COMPILE_STATUS, status);
fragment_lengths); g.glCompileShader(fs); g.glGetShaderiv(fs, GL2ES2.GL_COMPILE_STATUS, status);
/** * Implementation for {@link #createGlShader(int, String)}. * * @param shaderType The shader type * @param shaderSource The shader source code * @return The GL shader, or <code>null</code> if it cannot be compiled */ private Integer createGlShaderImpl(int shaderType, String shaderSource) { int glShader = gl.glCreateShader(shaderType); gl.glShaderSource( glShader, 1, new String[]{shaderSource}, null); gl.glCompileShader(glShader); int compileStatus[] = { 0 }; gl.glGetShaderiv(glShader, GL_COMPILE_STATUS, compileStatus, 0); if (compileStatus[0] != GL_TRUE) { printShaderLogInfo(glShader); return null; } return glShader; }