diff --git a/core/src/processing/opengl/PJOGL.java b/core/src/processing/opengl/PJOGL.java index bd1988733..6af1a52cd 100644 --- a/core/src/processing/opengl/PJOGL.java +++ b/core/src/processing/opengl/PJOGL.java @@ -52,7 +52,7 @@ import javax.media.opengl.glu.GLUtessellatorCallbackAdapter; public class PJOGL extends PGL { // OpenGL profile to use (2, 3 or 4) - public static int PROFILE = 3; + public static int PROFILE = 2; // The two windowing toolkits available to use in JOGL: public static final int AWT = 0; // http://jogamp.org/wiki/index.php/Using_JOGL_in_AWT_SWT_and_Swing diff --git a/core/src/processing/opengl/PShader.java b/core/src/processing/opengl/PShader.java index 0d175ea94..af7f62da2 100644 --- a/core/src/processing/opengl/PShader.java +++ b/core/src/processing/opengl/PShader.java @@ -95,8 +95,8 @@ public class PShader implements PConstants { protected String vertexFilename; protected String fragmentFilename; - protected String vertexShaderSource; - protected String fragmentShaderSource; + protected String[] vertexShaderSource; + protected String[] fragmentShaderSource; protected boolean bound; @@ -199,6 +199,8 @@ public class PShader implements PConstants { this.fragmentURL = null; this.vertexFilename = vertFilename; this.fragmentFilename = fragFilename; + loadFragmentShader(fragFilename); + loadVertexShader(vertFilename); glProgram = 0; glVertex = 0; @@ -207,8 +209,8 @@ public class PShader implements PConstants { intBuffer = PGL.allocateIntBuffer(1); floatBuffer = PGL.allocateFloatBuffer(1); - int vertType = getShaderType(parent.loadStrings(vertFilename), -1); - int fragType = getShaderType(parent.loadStrings(fragFilename), -1); + int vertType = getShaderType(vertexShaderSource, -1); + int fragType = getShaderType(fragmentShaderSource, -1); if (vertType == -1 && fragType == -1) { type = PShader.POLY; } else if (vertType == -1) { @@ -235,6 +237,8 @@ public class PShader implements PConstants { this.fragmentURL = fragURL; this.vertexFilename = null; this.fragmentFilename = null; + loadFragmentShader(fragURL); + loadVertexShader(vertURL); glProgram = 0; glVertex = 0; @@ -243,20 +247,8 @@ public class PShader implements PConstants { intBuffer = PGL.allocateIntBuffer(1); floatBuffer = PGL.allocateFloatBuffer(1); - int vertType = -1, fragType = -1; - try { - String[] source = PApplet.loadStrings(vertURL.openStream()); - vertType = getShaderType(source, -1); - } catch (IOException e) { - PGraphics.showException("Vertex URL cannot be accessed both null!"); - } - try { - String[] source = PApplet.loadStrings(fragURL.openStream()); - fragType = getShaderType(source, -1); - } catch (IOException e) { - PGraphics.showException("Fragment URL cannot be accessed both null!"); - } - + int vertType = getShaderType(vertexShaderSource, -1); + int fragType = getShaderType(fragmentShaderSource, -1); if (vertType == -1 && fragType == -1) { type = PShader.POLY; } else if (vertType == -1) { @@ -809,43 +801,23 @@ public class PShader implements PConstants { context = pgl.getCurrentContext(); glProgram = PGraphicsOpenGL.createGLSLProgramObject(context); - boolean hasVert = false; - if (vertexFilename != null) { - hasVert = loadVertexShader(vertexFilename); - } else if (vertexURL != null) { - hasVert = loadVertexShader(vertexURL); - } else { - PGraphics.showException("Vertex shader filenames and URLs are " + - "both null!"); - } - - boolean hasFrag = false; - if (fragmentFilename != null) { - hasFrag = loadFragmentShader(fragmentFilename); - } else if (fragmentURL != null) { - hasFrag = loadFragmentShader(fragmentURL); - } else { - PGraphics.showException("Fragment shader filenames and URLs are " + - "both null!"); - } - boolean vertRes = true; - if (hasVert) { + if (hasVertexShader()) { vertRes = compileVertexShader(); + } else { + PGraphics.showException("Doesn't have a vertex shader"); } boolean fragRes = true; - if (hasFrag) { + if (hasFragmentShader()) { fragRes = compileFragmentShader(); + } else { + PGraphics.showException("Doesn't have a fragment shader"); } if (vertRes && fragRes) { - if (hasVert) { - pgl.attachShader(glProgram, glVertex); - } - if (hasFrag) { - pgl.attachShader(glProgram, glFragment); - } + pgl.attachShader(glProgram, glVertex); + pgl.attachShader(glProgram, glFragment); setup(); pgl.linkProgram(glProgram); @@ -889,9 +861,9 @@ public class PShader implements PConstants { * * @param file String */ - protected boolean loadVertexShader(String filename) { - vertexShaderSource = PApplet.join(parent.loadStrings(filename), "\n"); - return vertexShaderSource != null; + protected void loadVertexShader(String filename) { + vertexShaderSource = parent.loadStrings(filename); + //PApplet.join(parent.loadStrings(filename), "\n"); } @@ -900,45 +872,47 @@ public class PShader implements PConstants { * * @param file String */ - protected boolean loadVertexShader(URL url) { + protected void loadVertexShader(URL url) { try { - vertexShaderSource = PApplet.join(PApplet.loadStrings(url.openStream()), - "\n"); - return vertexShaderSource != null; + vertexShaderSource = PApplet.loadStrings(url.openStream()); + //PApplet.join(PApplet.loadStrings(url.openStream()), "\n"); } catch (IOException e) { PGraphics.showException("Cannot load vertex shader " + url.getFile()); - return false; } } + protected boolean hasVertexShader() { + return vertexShaderSource != null && 0 < vertexShaderSource.length; + } + /** * Loads and compiles the fragment shader contained in file. * * @param file String */ - protected boolean loadFragmentShader(String filename) { - fragmentShaderSource = PApplet.join(parent.loadStrings(filename), "\n"); - return fragmentShaderSource != null; + protected void loadFragmentShader(String filename) { + fragmentShaderSource = parent.loadStrings(filename); + // PApplet.join(parent.loadStrings(filename), "\n"); } - /** * Loads and compiles the fragment shader contained in the URL. * * @param url URL */ - protected boolean loadFragmentShader(URL url) { + protected void loadFragmentShader(URL url) { try { - fragmentShaderSource = PApplet.join(PApplet.loadStrings(url.openStream()), - "\n"); - return fragmentShaderSource != null; + fragmentShaderSource = PApplet.loadStrings(url.openStream()); + // PApplet.join(PApplet.loadStrings(url.openStream()), "\n"); } catch (IOException e) { PGraphics.showException("Cannot load fragment shader " + url.getFile()); - return false; } } + protected boolean hasFragmentShader() { + return fragmentShaderSource != null && 0 < fragmentShaderSource.length; + } /** * @param shaderSource a string containing the shader's code @@ -946,7 +920,7 @@ public class PShader implements PConstants { protected boolean compileVertexShader() { glVertex = PGraphicsOpenGL.createGLSLVertShaderObject(context); - pgl.shaderSource(glVertex, vertexShaderSource); + pgl.shaderSource(glVertex, PApplet.join(vertexShaderSource, "\n")); pgl.compileShader(glVertex); pgl.getShaderiv(glVertex, PGL.COMPILE_STATUS, intBuffer); @@ -967,7 +941,7 @@ public class PShader implements PConstants { protected boolean compileFragmentShader() { glFragment = PGraphicsOpenGL.createGLSLFragShaderObject(context); - pgl.shaderSource(glFragment, fragmentShaderSource); + pgl.shaderSource(glFragment, PApplet.join(fragmentShaderSource, "\n")); pgl.compileShader(glFragment); pgl.getShaderiv(glFragment, PGL.COMPILE_STATUS, intBuffer);