mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
better handling of glsl code in different versions
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user