Skip to content

Commit 641c20f

Browse files
committed
better handling of glsl code in different versions
1 parent bad1a86 commit 641c20f

File tree

4 files changed

+139
-87
lines changed

4 files changed

+139
-87
lines changed

core/src/processing/opengl/PGL.java

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -212,16 +212,14 @@ public abstract class PGL {
212212
"varying vec2 vertTexcoord;\n" +
213213
"void main() {\n" +
214214
" gl_FragColor = texture2D(textureSampler, vertTexcoord.st);\n" +
215-
// " gl_FragColor = vec4(vertTexcoord.st, 0, 1);\n" +
216215
"}\n",
217216
"#version 150\n" +
218217
SHADER_PREPROCESSOR_DIRECTIVE +
219218
"uniform sampler2D textureSampler;\n" +
220219
"in vec2 vertTexcoord;\n" +
221220
"out vec4 fragColor;\n" +
222221
"void main() {\n" +
223-
// " fragColor = texture(textureSampler, vertTexcoord.st);\n" +
224-
" fragColor = vec4(vertTexcoord.st, 0, 1);\n" +
222+
" fragColor = texture(textureSampler, vertTexcoord.st);\n" +
225223
"}\n"
226224
};
227225

@@ -1454,57 +1452,68 @@ protected static void javaToNativeRGB(int[] pixels, int width, int height) {
14541452
}
14551453
}
14561454

1457-
/**
1458-
* Loads and compiles the vertex shader contained in file.
1459-
*
1460-
* @param file String
1461-
*/
1455+
14621456
protected String[] loadVertexShader(String filename) {
14631457
return pg.parent.loadStrings(filename);
1464-
//PApplet.join(parent.loadStrings(filename), "\n");
14651458
}
14661459

1467-
/**
1468-
* Loads and compiles the fragment shader contained in file.
1469-
*
1470-
* @param file String
1471-
*/
1460+
14721461
protected String[] loadFragmentShader(String filename) {
14731462
return pg.parent.loadStrings(filename);
1474-
// PApplet.join(parent.loadStrings(filename), "\n");
14751463
}
14761464

1477-
/**
1478-
* Loads and compiles the fragment shader contained in the URL.
1479-
*
1480-
* @param url URL
1481-
*/
1465+
14821466
protected String[] loadFragmentShader(URL url) {
14831467
try {
14841468
return PApplet.loadStrings(url.openStream());
1485-
// PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
14861469
} catch (IOException e) {
14871470
PGraphics.showException("Cannot load fragment shader " + url.getFile());
14881471
}
14891472
return null;
14901473
}
14911474

1492-
/**
1493-
* Loads and compiles the vertex shader contained in the URL.
1494-
*
1495-
* @param file String
1496-
*/
1475+
14971476
protected String[] loadVertexShader(URL url) {
14981477
try {
14991478
return PApplet.loadStrings(url.openStream());
1500-
//PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
15011479
} catch (IOException e) {
15021480
PGraphics.showException("Cannot load vertex shader " + url.getFile());
15031481
}
15041482
return null;
15051483
}
15061484

15071485

1486+
protected String[] loadVertexShader(String filename, int version) {
1487+
return loadVertexShader(filename);
1488+
}
1489+
1490+
1491+
protected String[] loadFragmentShader(String filename, int version) {
1492+
return loadFragmentShader(filename);
1493+
}
1494+
1495+
1496+
protected String[] loadFragmentShader(URL url, int version) {
1497+
return loadFragmentShader(url);
1498+
}
1499+
1500+
1501+
protected String[] loadVertexShader(URL url, int version) {
1502+
return loadVertexShader(url);
1503+
}
1504+
1505+
1506+
protected String[] convertFragmentSource(String[] fragSrc0,
1507+
int version0, int version1) {
1508+
return fragSrc0;
1509+
}
1510+
1511+
1512+
protected String[] convertVertexSource(String[] vertSrc0,
1513+
int version0, int version1) {
1514+
return vertSrc0;
1515+
}
1516+
15081517

15091518
protected int createShader(int shaderType, String source) {
15101519
int shader = createShader(shaderType);

core/src/processing/opengl/PGraphicsOpenGL.java

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6284,19 +6284,26 @@ public PShader loadShader(String fragFilename) {
62846284
shader.setType(type);
62856285
shader.setFragmentShader(fragFilename);
62866286
if (type == PShader.POINT) {
6287-
shader.setVertexShader(defPointShaderVertURL);
6287+
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL, 120);
6288+
shader.setVertexShader(vertSource);
62886289
} else if (type == PShader.LINE) {
6289-
shader.setVertexShader(defLineShaderVertURL);
6290+
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL, 120);
6291+
shader.setVertexShader(vertSource);
62906292
} else if (type == PShader.TEXLIGHT) {
6291-
shader.setVertexShader(defTexlightShaderVertURL);
6293+
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL, 120);
6294+
shader.setVertexShader(vertSource);
62926295
} else if (type == PShader.LIGHT) {
6293-
shader.setVertexShader(defLightShaderVertURL);
6296+
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL, 120);
6297+
shader.setVertexShader(vertSource);
62946298
} else if (type == PShader.TEXTURE) {
6295-
shader.setVertexShader(defTextureShaderVertURL);
6299+
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL, 120);
6300+
shader.setVertexShader(vertSource);
62966301
} else if (type == PShader.COLOR) {
6297-
shader.setVertexShader(defColorShaderVertURL);
6302+
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL, 120);
6303+
shader.setVertexShader(vertSource);
62986304
} else {
6299-
shader.setVertexShader(defTextureShaderVertURL);
6305+
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL, 120);
6306+
shader.setVertexShader(vertSource);
63006307
}
63016308
return shader;
63026309
}
@@ -6382,8 +6389,8 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
63826389
if (tex) {
63836390
if (useDefault || !polyShader.checkPolyType(PShader.TEXLIGHT)) {
63846391
if (defTexlightShader == null) {
6385-
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL);
6386-
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
6392+
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL, 120);
6393+
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL, 120);
63876394
defTexlightShader = new PShader(parent, vertSource, fragSource);
63886395
}
63896396
shader = defTexlightShader;
@@ -6393,8 +6400,8 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
63936400
} else {
63946401
if (useDefault || !polyShader.checkPolyType(PShader.LIGHT)) {
63956402
if (defLightShader == null) {
6396-
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL);
6397-
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
6403+
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL, 120);
6404+
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL, 120);
63986405
defLightShader = new PShader(parent, vertSource, fragSource);
63996406
}
64006407
shader = defLightShader;
@@ -6411,8 +6418,8 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
64116418
if (tex) {
64126419
if (useDefault || !polyShader.checkPolyType(PShader.TEXTURE)) {
64136420
if (defTextureShader == null) {
6414-
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL);
6415-
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
6421+
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL, 120);
6422+
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL, 120);
64166423
defTextureShader = new PShader(parent, vertSource, fragSource);
64176424
}
64186425
shader = defTextureShader;
@@ -6422,8 +6429,8 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
64226429
} else {
64236430
if (useDefault || !polyShader.checkPolyType(PShader.COLOR)) {
64246431
if (defColorShader == null) {
6425-
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL);
6426-
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
6432+
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL, 120);
6433+
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL, 120);
64276434
defColorShader = new PShader(parent, vertSource, fragSource);
64286435
}
64296436
shader = defColorShader;
@@ -6445,8 +6452,8 @@ protected PShader getLineShader() {
64456452
PShader shader;
64466453
if (lineShader == null) {
64476454
if (defLineShader == null) {
6448-
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL);
6449-
String[] fragSource = pgl.loadFragmentShader(defLineShaderFragURL);
6455+
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL, 120);
6456+
String[] fragSource = pgl.loadFragmentShader(defLineShaderFragURL, 120);
64506457
defLineShader = new PShader(parent, vertSource, fragSource);
64516458
}
64526459
shader = defLineShader;
@@ -6464,8 +6471,8 @@ protected PShader getPointShader() {
64646471
PShader shader;
64656472
if (pointShader == null) {
64666473
if (defPointShader == null) {
6467-
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL);
6468-
String[] fragSource = pgl.loadFragmentShader(defPointShaderFragURL);
6474+
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL, 120);
6475+
String[] fragSource = pgl.loadFragmentShader(defPointShaderFragURL, 120);
64696476
defPointShader = new PShader(parent, vertSource, fragSource);
64706477
}
64716478
shader = defPointShader;

core/src/processing/opengl/PJOGL.java

Lines changed: 63 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,31 +1039,33 @@ protected Object getDerivedFont(Object font, float size) {
10391039

10401040

10411041
@Override
1042-
protected String[] loadFragmentShader(URL url) {
1042+
protected String[] loadVertexShader(String filename, int version) {
1043+
if (2 < PROFILE && version < 150) {
1044+
String[] fragSrc0 = pg.parent.loadStrings(filename);
1045+
return convertFragmentSource(fragSrc0, version, 150);
1046+
} else {
1047+
return pg.parent.loadStrings(filename);
1048+
}
1049+
}
1050+
1051+
1052+
@Override
1053+
protected String[] loadFragmentShader(String filename, int version) {
1054+
if (2 < PROFILE && version < 150) {
1055+
String[] vertSrc0 = pg.parent.loadStrings(filename);
1056+
return convertVertexSource(vertSrc0, version, 150);
1057+
} else {
1058+
return pg.parent.loadStrings(filename);
1059+
}
1060+
}
1061+
1062+
1063+
@Override
1064+
protected String[] loadFragmentShader(URL url, int version) {
10431065
try {
1044-
if (2 < PROFILE) {
1045-
// if (false) {
1066+
if (2 < PROFILE && version < 150) {
10461067
String[] fragSrc0 = PApplet.loadStrings(url.openStream());
1047-
// PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
1048-
String[] fragSrc = new String[fragSrc0.length + 2];
1049-
fragSrc[0] = "#version 150";
1050-
fragSrc[1] = "out vec4 fragColor;";
1051-
1052-
for (int i = 0; i < fragSrc0.length; i++) {
1053-
String line = fragSrc0[i];
1054-
System.out.print(line + " ---> ");
1055-
1056-
line = line.replace("varying", "in");
1057-
line = line.replace("attribute", "in");
1058-
line = line.replace("gl_FragColor", "fragColor");
1059-
line = line.replace("texture", "texSampler");
1060-
line = line.replace("texSampler2D(", "texture(");
1061-
1062-
fragSrc[i + 2] = line;
1063-
System.out.println(line);
1064-
}
1065-
1066-
return fragSrc;
1068+
return convertFragmentSource(fragSrc0, version, 150);
10671069
} else {
10681070
return PApplet.loadStrings(url.openStream());
10691071
}
@@ -1073,25 +1075,13 @@ protected String[] loadFragmentShader(URL url) {
10731075
return null;
10741076
}
10751077

1078+
10761079
@Override
1077-
protected String[] loadVertexShader(URL url) {
1080+
protected String[] loadVertexShader(URL url, int version) {
10781081
try {
1079-
if (2 < PROFILE) {
1080-
// if (false) {
1082+
if (2 < PROFILE && version < 150) {
10811083
String[] vertSrc0 = PApplet.loadStrings(url.openStream());
1082-
String[] vertSrc = new String[vertSrc0.length + 1];
1083-
vertSrc[0] = "#version 150";
1084-
1085-
for (int i = 0; i < vertSrc0.length; i++) {
1086-
String line = vertSrc0[i];
1087-
System.out.print(line + " ---> ");
1088-
line = line.replace("attribute", "in");
1089-
line = line.replace("varying", "out");
1090-
vertSrc[i + 1] = line;
1091-
System.out.println(line);
1092-
}
1093-
1094-
return vertSrc;
1084+
return convertVertexSource(vertSrc0, version, 150);
10951085
} else {
10961086
return PApplet.loadStrings(url.openStream());
10971087
}
@@ -1102,6 +1092,40 @@ protected String[] loadVertexShader(URL url) {
11021092
}
11031093

11041094

1095+
@Override
1096+
protected String[] convertFragmentSource(String[] fragSrc0,
1097+
int version0, int version1) {
1098+
String[] fragSrc = new String[fragSrc0.length + 2];
1099+
fragSrc[0] = "#version 150";
1100+
fragSrc[1] = "out vec4 fragColor;";
1101+
for (int i = 0; i < fragSrc0.length; i++) {
1102+
String line = fragSrc0[i];
1103+
line = line.replace("varying", "in");
1104+
line = line.replace("attribute", "in");
1105+
line = line.replace("gl_FragColor", "fragColor");
1106+
line = line.replace("texture", "texSampler");
1107+
line = line.replace("texSampler2D(", "texture(");
1108+
fragSrc[i + 2] = line;
1109+
}
1110+
return fragSrc;
1111+
}
1112+
1113+
1114+
@Override
1115+
protected String[] convertVertexSource(String[] vertSrc0,
1116+
int version0, int version1) {
1117+
String[] vertSrc = new String[vertSrc0.length + 1];
1118+
vertSrc[0] = "#version 150";
1119+
for (int i = 0; i < vertSrc0.length; i++) {
1120+
String line = vertSrc0[i];
1121+
line = line.replace("attribute", "in");
1122+
line = line.replace("varying", "out");
1123+
vertSrc[i + 1] = line;
1124+
}
1125+
return vertSrc;
1126+
}
1127+
1128+
11051129
///////////////////////////////////////////////////////////
11061130

11071131
// Tessellator

core/src/processing/opengl/PShader.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,21 +315,34 @@ protected void finalize() throws Throwable {
315315

316316
public void setVertexShader(String vertFilename) {
317317
this.vertexFilename = vertFilename;
318+
vertexShaderSource = pgl.loadFragmentShader(vertFilename);
318319
}
319320

320321

321322
public void setVertexShader(URL vertURL) {
322323
this.vertexURL = vertURL;
324+
vertexShaderSource = pgl.loadVertexShader(vertURL);
325+
}
326+
327+
328+
public void setVertexShader(String[] vertSource) {
329+
vertexShaderSource = vertSource;
323330
}
324331

325332

326333
public void setFragmentShader(String fragFilename) {
327334
this.fragmentFilename = fragFilename;
335+
fragmentShaderSource = pgl.loadVertexShader(fragFilename);
328336
}
329337

330338

331339
public void setFragmentShader(URL fragURL) {
332340
this.fragmentURL = fragURL;
341+
fragmentShaderSource = pgl.loadVertexShader(fragURL);
342+
}
343+
344+
public void setFragmentShader(String[] fragSource) {
345+
fragmentShaderSource = fragSource;
333346
}
334347

335348

@@ -1099,7 +1112,7 @@ protected void loadUniforms() {
10991112
if (textureLoc == -1) {
11001113
textureLoc = getUniformLoc("texSampler");
11011114
}
1102-
System.err.println("textureLoc: " + textureLoc);
1115+
11031116
texMatrixLoc = getUniformLoc("texMatrix");
11041117
texOffsetLoc = getUniformLoc("texOffset");
11051118

@@ -1145,7 +1158,6 @@ protected void setCommonUniforms() {
11451158

11461159
protected void bindTyped() {
11471160
if (pg == null) {
1148-
System.out.println(" setting pg and uniforms " + pg);
11491161
setRenderer(PGraphicsOpenGL.pgCurrent);
11501162
loadAttributes();
11511163
loadUniforms();

0 commit comments

Comments
 (0)