better handling of glsl code in different versions

This commit is contained in:
codeanticode
2013-10-24 12:51:38 -04:00
parent 1ce9c9d360
commit c60ba7e6d7
4 changed files with 139 additions and 87 deletions
+36 -27
View File
@@ -212,7 +212,6 @@ public abstract class PGL {
"varying vec2 vertTexcoord;\n" +
"void main() {\n" +
" gl_FragColor = texture2D(textureSampler, vertTexcoord.st);\n" +
// " gl_FragColor = vec4(vertTexcoord.st, 0, 1);\n" +
"}\n",
"#version 150\n" +
SHADER_PREPROCESSOR_DIRECTIVE +
@@ -220,8 +219,7 @@ public abstract class PGL {
"in vec2 vertTexcoord;\n" +
"out vec4 fragColor;\n" +
"void main() {\n" +
// " fragColor = texture(textureSampler, vertTexcoord.st);\n" +
" fragColor = vec4(vertTexcoord.st, 0, 1);\n" +
" fragColor = texture(textureSampler, vertTexcoord.st);\n" +
"}\n"
};
@@ -1454,50 +1452,30 @@ public abstract class PGL {
}
}
/**
* Loads and compiles the vertex shader contained in file.
*
* @param file String
*/
protected String[] loadVertexShader(String filename) {
return pg.parent.loadStrings(filename);
//PApplet.join(parent.loadStrings(filename), "\n");
}
/**
* Loads and compiles the fragment shader contained in file.
*
* @param file String
*/
protected String[] loadFragmentShader(String filename) {
return pg.parent.loadStrings(filename);
// PApplet.join(parent.loadStrings(filename), "\n");
}
/**
* Loads and compiles the fragment shader contained in the URL.
*
* @param url URL
*/
protected String[] loadFragmentShader(URL url) {
try {
return PApplet.loadStrings(url.openStream());
// PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
} catch (IOException e) {
PGraphics.showException("Cannot load fragment shader " + url.getFile());
}
return null;
}
/**
* Loads and compiles the vertex shader contained in the URL.
*
* @param file String
*/
protected String[] loadVertexShader(URL url) {
try {
return PApplet.loadStrings(url.openStream());
//PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
} catch (IOException e) {
PGraphics.showException("Cannot load vertex shader " + url.getFile());
}
@@ -1505,6 +1483,37 @@ public abstract class PGL {
}
protected String[] loadVertexShader(String filename, int version) {
return loadVertexShader(filename);
}
protected String[] loadFragmentShader(String filename, int version) {
return loadFragmentShader(filename);
}
protected String[] loadFragmentShader(URL url, int version) {
return loadFragmentShader(url);
}
protected String[] loadVertexShader(URL url, int version) {
return loadVertexShader(url);
}
protected String[] convertFragmentSource(String[] fragSrc0,
int version0, int version1) {
return fragSrc0;
}
protected String[] convertVertexSource(String[] vertSrc0,
int version0, int version1) {
return vertSrc0;
}
protected int createShader(int shaderType, String source) {
int shader = createShader(shaderType);
+26 -19
View File
@@ -6284,19 +6284,26 @@ public class PGraphicsOpenGL extends PGraphics {
shader.setType(type);
shader.setFragmentShader(fragFilename);
if (type == PShader.POINT) {
shader.setVertexShader(defPointShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL, 120);
shader.setVertexShader(vertSource);
} else if (type == PShader.LINE) {
shader.setVertexShader(defLineShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL, 120);
shader.setVertexShader(vertSource);
} else if (type == PShader.TEXLIGHT) {
shader.setVertexShader(defTexlightShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL, 120);
shader.setVertexShader(vertSource);
} else if (type == PShader.LIGHT) {
shader.setVertexShader(defLightShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL, 120);
shader.setVertexShader(vertSource);
} else if (type == PShader.TEXTURE) {
shader.setVertexShader(defTextureShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL, 120);
shader.setVertexShader(vertSource);
} else if (type == PShader.COLOR) {
shader.setVertexShader(defColorShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL, 120);
shader.setVertexShader(vertSource);
} else {
shader.setVertexShader(defTextureShaderVertURL);
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL, 120);
shader.setVertexShader(vertSource);
}
return shader;
}
@@ -6382,8 +6389,8 @@ public class PGraphicsOpenGL extends PGraphics {
if (tex) {
if (useDefault || !polyShader.checkPolyType(PShader.TEXLIGHT)) {
if (defTexlightShader == null) {
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL);
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL, 120);
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL, 120);
defTexlightShader = new PShader(parent, vertSource, fragSource);
}
shader = defTexlightShader;
@@ -6393,8 +6400,8 @@ public class PGraphicsOpenGL extends PGraphics {
} else {
if (useDefault || !polyShader.checkPolyType(PShader.LIGHT)) {
if (defLightShader == null) {
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL);
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL, 120);
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL, 120);
defLightShader = new PShader(parent, vertSource, fragSource);
}
shader = defLightShader;
@@ -6411,8 +6418,8 @@ public class PGraphicsOpenGL extends PGraphics {
if (tex) {
if (useDefault || !polyShader.checkPolyType(PShader.TEXTURE)) {
if (defTextureShader == null) {
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL);
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL, 120);
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL, 120);
defTextureShader = new PShader(parent, vertSource, fragSource);
}
shader = defTextureShader;
@@ -6422,8 +6429,8 @@ public class PGraphicsOpenGL extends PGraphics {
} else {
if (useDefault || !polyShader.checkPolyType(PShader.COLOR)) {
if (defColorShader == null) {
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL);
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL, 120);
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL, 120);
defColorShader = new PShader(parent, vertSource, fragSource);
}
shader = defColorShader;
@@ -6445,8 +6452,8 @@ public class PGraphicsOpenGL extends PGraphics {
PShader shader;
if (lineShader == null) {
if (defLineShader == null) {
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL);
String[] fragSource = pgl.loadFragmentShader(defLineShaderFragURL);
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL, 120);
String[] fragSource = pgl.loadFragmentShader(defLineShaderFragURL, 120);
defLineShader = new PShader(parent, vertSource, fragSource);
}
shader = defLineShader;
@@ -6464,8 +6471,8 @@ public class PGraphicsOpenGL extends PGraphics {
PShader shader;
if (pointShader == null) {
if (defPointShader == null) {
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL);
String[] fragSource = pgl.loadFragmentShader(defPointShaderFragURL);
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL, 120);
String[] fragSource = pgl.loadFragmentShader(defPointShaderFragURL, 120);
defPointShader = new PShader(parent, vertSource, fragSource);
}
shader = defPointShader;
+63 -39
View File
@@ -1039,31 +1039,33 @@ public class PJOGL extends PGL {
@Override
protected String[] loadFragmentShader(URL url) {
protected String[] loadVertexShader(String filename, int version) {
if (2 < PROFILE && version < 150) {
String[] fragSrc0 = pg.parent.loadStrings(filename);
return convertFragmentSource(fragSrc0, version, 150);
} else {
return pg.parent.loadStrings(filename);
}
}
@Override
protected String[] loadFragmentShader(String filename, int version) {
if (2 < PROFILE && version < 150) {
String[] vertSrc0 = pg.parent.loadStrings(filename);
return convertVertexSource(vertSrc0, version, 150);
} else {
return pg.parent.loadStrings(filename);
}
}
@Override
protected String[] loadFragmentShader(URL url, int version) {
try {
if (2 < PROFILE) {
// if (false) {
if (2 < PROFILE && version < 150) {
String[] fragSrc0 = PApplet.loadStrings(url.openStream());
// PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
String[] fragSrc = new String[fragSrc0.length + 2];
fragSrc[0] = "#version 150";
fragSrc[1] = "out vec4 fragColor;";
for (int i = 0; i < fragSrc0.length; i++) {
String line = fragSrc0[i];
System.out.print(line + " ---> ");
line = line.replace("varying", "in");
line = line.replace("attribute", "in");
line = line.replace("gl_FragColor", "fragColor");
line = line.replace("texture", "texSampler");
line = line.replace("texSampler2D(", "texture(");
fragSrc[i + 2] = line;
System.out.println(line);
}
return fragSrc;
return convertFragmentSource(fragSrc0, version, 150);
} else {
return PApplet.loadStrings(url.openStream());
}
@@ -1073,25 +1075,13 @@ public class PJOGL extends PGL {
return null;
}
@Override
protected String[] loadVertexShader(URL url) {
protected String[] loadVertexShader(URL url, int version) {
try {
if (2 < PROFILE) {
// if (false) {
if (2 < PROFILE && version < 150) {
String[] vertSrc0 = PApplet.loadStrings(url.openStream());
String[] vertSrc = new String[vertSrc0.length + 1];
vertSrc[0] = "#version 150";
for (int i = 0; i < vertSrc0.length; i++) {
String line = vertSrc0[i];
System.out.print(line + " ---> ");
line = line.replace("attribute", "in");
line = line.replace("varying", "out");
vertSrc[i + 1] = line;
System.out.println(line);
}
return vertSrc;
return convertVertexSource(vertSrc0, version, 150);
} else {
return PApplet.loadStrings(url.openStream());
}
@@ -1102,6 +1092,40 @@ public class PJOGL extends PGL {
}
@Override
protected String[] convertFragmentSource(String[] fragSrc0,
int version0, int version1) {
String[] fragSrc = new String[fragSrc0.length + 2];
fragSrc[0] = "#version 150";
fragSrc[1] = "out vec4 fragColor;";
for (int i = 0; i < fragSrc0.length; i++) {
String line = fragSrc0[i];
line = line.replace("varying", "in");
line = line.replace("attribute", "in");
line = line.replace("gl_FragColor", "fragColor");
line = line.replace("texture", "texSampler");
line = line.replace("texSampler2D(", "texture(");
fragSrc[i + 2] = line;
}
return fragSrc;
}
@Override
protected String[] convertVertexSource(String[] vertSrc0,
int version0, int version1) {
String[] vertSrc = new String[vertSrc0.length + 1];
vertSrc[0] = "#version 150";
for (int i = 0; i < vertSrc0.length; i++) {
String line = vertSrc0[i];
line = line.replace("attribute", "in");
line = line.replace("varying", "out");
vertSrc[i + 1] = line;
}
return vertSrc;
}
///////////////////////////////////////////////////////////
// Tessellator
+14 -2
View File
@@ -315,21 +315,34 @@ public class PShader implements PConstants {
public void setVertexShader(String vertFilename) {
this.vertexFilename = vertFilename;
vertexShaderSource = pgl.loadFragmentShader(vertFilename);
}
public void setVertexShader(URL vertURL) {
this.vertexURL = vertURL;
vertexShaderSource = pgl.loadVertexShader(vertURL);
}
public void setVertexShader(String[] vertSource) {
vertexShaderSource = vertSource;
}
public void setFragmentShader(String fragFilename) {
this.fragmentFilename = fragFilename;
fragmentShaderSource = pgl.loadVertexShader(fragFilename);
}
public void setFragmentShader(URL fragURL) {
this.fragmentURL = fragURL;
fragmentShaderSource = pgl.loadVertexShader(fragURL);
}
public void setFragmentShader(String[] fragSource) {
fragmentShaderSource = fragSource;
}
@@ -1099,7 +1112,7 @@ public class PShader implements PConstants {
if (textureLoc == -1) {
textureLoc = getUniformLoc("texSampler");
}
System.err.println("textureLoc: " + textureLoc);
texMatrixLoc = getUniformLoc("texMatrix");
texOffsetLoc = getUniformLoc("texOffset");
@@ -1145,7 +1158,6 @@ public class PShader implements PConstants {
protected void bindTyped() {
if (pg == null) {
System.out.println(" setting pg and uniforms " + pg);
setRenderer(PGraphicsOpenGL.pgCurrent);
loadAttributes();
loadUniforms();