Skip to content

Commit d1d195d

Browse files
committed
automatic glsl 120 to 150 conversion partially working
1 parent dfaf78b commit d1d195d

3 files changed

Lines changed: 85 additions & 24 deletions

File tree

core/src/processing/opengl/PGraphicsOpenGL.java

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6387,9 +6387,9 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
63876387
if (tex) {
63886388
if (useDefault || !polyShader.checkPolyType(PShader.TEXLIGHT)) {
63896389
if (defTexlightShader == null) {
6390-
defTexlightShader = new PShader(parent,
6391-
defTexlightShaderVertURL,
6392-
defTextureShaderFragURL);
6390+
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL);
6391+
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
6392+
defTexlightShader = new PShader(parent, vertSource, fragSource);
63936393
}
63946394
shader = defTexlightShader;
63956395
} else {
@@ -6398,9 +6398,9 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
63986398
} else {
63996399
if (useDefault || !polyShader.checkPolyType(PShader.LIGHT)) {
64006400
if (defLightShader == null) {
6401-
defLightShader = new PShader(parent,
6402-
defLightShaderVertURL,
6403-
defColorShaderFragURL);
6401+
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL);
6402+
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
6403+
defLightShader = new PShader(parent, vertSource, fragSource);
64046404
}
64056405
shader = defLightShader;
64066406
} else {
@@ -6416,9 +6416,9 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
64166416
if (tex) {
64176417
if (useDefault || !polyShader.checkPolyType(PShader.TEXTURE)) {
64186418
if (defTextureShader == null) {
6419-
defTextureShader = new PShader(parent,
6420-
defTextureShaderVertURL,
6421-
defTextureShaderFragURL);
6419+
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL);
6420+
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
6421+
defTextureShader = new PShader(parent, vertSource, fragSource);
64226422
}
64236423
shader = defTextureShader;
64246424
} else {
@@ -6427,9 +6427,9 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
64276427
} else {
64286428
if (useDefault || !polyShader.checkPolyType(PShader.COLOR)) {
64296429
if (defColorShader == null) {
6430-
defColorShader = new PShader(parent,
6431-
defColorShaderVertURL,
6432-
defColorShaderFragURL);
6430+
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL);
6431+
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
6432+
defColorShader = new PShader(parent, vertSource, fragSource);
64336433
}
64346434
shader = defColorShader;
64356435
} else {
@@ -6450,8 +6450,9 @@ protected PShader getLineShader() {
64506450
PShader shader;
64516451
if (lineShader == null) {
64526452
if (defLineShader == null) {
6453-
defLineShader = new PShader(parent, defLineShaderVertURL,
6454-
defLineShaderFragURL);
6453+
String[] vertSource = pgl.loadVertexShader(defLineShaderVertURL);
6454+
String[] fragSource = pgl.loadFragmentShader(defLineShaderFragURL);
6455+
defLineShader = new PShader(parent, vertSource, fragSource);
64556456
}
64566457
shader = defLineShader;
64576458
} else {
@@ -6468,8 +6469,9 @@ protected PShader getPointShader() {
64686469
PShader shader;
64696470
if (pointShader == null) {
64706471
if (defPointShader == null) {
6471-
defPointShader = new PShader(parent, defPointShaderVertURL,
6472-
defPointShaderFragURL);
6472+
String[] vertSource = pgl.loadVertexShader(defPointShaderVertURL);
6473+
String[] fragSource = pgl.loadFragmentShader(defPointShaderFragURL);
6474+
defPointShader = new PShader(parent, vertSource, fragSource);
64736475
}
64746476
shader = defPointShader;
64756477
} else {

core/src/processing/opengl/PJOGL.java

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import java.awt.Canvas;
55
import java.awt.Color;
66
import java.awt.FontMetrics;
7+
import java.io.IOException;
8+
import java.net.URL;
79
import java.nio.Buffer;
810
import java.nio.ByteBuffer;
911
import java.nio.FloatBuffer;
@@ -32,6 +34,7 @@
3234

3335
import processing.core.PApplet;
3436
import processing.core.PConstants;
37+
import processing.core.PGraphics;
3538
import processing.event.KeyEvent;
3639
import processing.event.MouseEvent;
3740

@@ -52,7 +55,7 @@
5255

5356
public class PJOGL extends PGL {
5457
// OpenGL profile to use (2, 3 or 4)
55-
public static int PROFILE = 2;
58+
public static int PROFILE = 3;
5659

5760
// The two windowing toolkits available to use in JOGL:
5861
public static final int AWT = 0; // http://jogamp.org/wiki/index.php/Using_JOGL_in_AWT_SWT_and_Swing
@@ -822,11 +825,11 @@ private void getGL(GLAutoDrawable glDrawable) {
822825
} catch (javax.media.opengl.GLException e) {
823826
gl3 = null;
824827
}
825-
System.out.println("************");
826-
System.out.println("gl: " + gl);
827-
System.out.println("gl2: " + gl2);
828-
System.out.println("gl2x: " + gl2x);
829-
System.out.println("gl3: " + gl3);
828+
// System.out.println("************");
829+
// System.out.println("gl: " + gl);
830+
// System.out.println("gl2: " + gl2);
831+
// System.out.println("gl2x: " + gl2x);
832+
// System.out.println("gl3: " + gl3);
830833
}
831834
}
832835

@@ -1035,6 +1038,61 @@ protected Object getDerivedFont(Object font, float size) {
10351038
}
10361039

10371040

1041+
@Override
1042+
protected String[] loadFragmentShader(URL url) {
1043+
try {
1044+
String[] fragSrc0 = PApplet.loadStrings(url.openStream());
1045+
// PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
1046+
String[] fragSrc = new String[fragSrc0.length + 2];
1047+
fragSrc[0] = "#version 150";
1048+
fragSrc[1] = "out vec4 fragColor;";
1049+
1050+
for (int i = 0; i < fragSrc0.length; i++) {
1051+
String line = fragSrc0[i];
1052+
System.out.print(line + " ---> ");
1053+
1054+
line = line.replace("varying", "in");
1055+
line = line.replace("attribute", "in");
1056+
line = line.replace("gl_FragColor", "fragColor");
1057+
line = line.replace("texture", "texSampler");
1058+
line = line.replace("texSampler2D(", "texture(");
1059+
1060+
fragSrc[i + 2] = line;
1061+
System.out.println(line);
1062+
}
1063+
1064+
return fragSrc;
1065+
} catch (IOException e) {
1066+
PGraphics.showException("Cannot load fragment shader " + url.getFile());
1067+
}
1068+
return null;
1069+
}
1070+
1071+
@Override
1072+
protected String[] loadVertexShader(URL url) {
1073+
try {
1074+
String[] vertSrc0 = PApplet.loadStrings(url.openStream());
1075+
String[] vertSrc = new String[vertSrc0.length + 1];
1076+
vertSrc[0] = "#version 150";
1077+
1078+
for (int i = 0; i < vertSrc0.length; i++) {
1079+
String line = vertSrc0[i];
1080+
System.out.print(line + " ---> ");
1081+
line = line.replace("attribute", "in");
1082+
line = line.replace("varying", "out");
1083+
vertSrc[i + 1] = line;
1084+
System.out.println(line);
1085+
}
1086+
1087+
return vertSrc;
1088+
//PApplet.join(PApplet.loadStrings(url.openStream()), "\n");
1089+
} catch (IOException e) {
1090+
PGraphics.showException("Cannot load vertex shader " + url.getFile());
1091+
}
1092+
return null;
1093+
}
1094+
1095+
10381096
///////////////////////////////////////////////////////////
10391097

10401098
// Tessellator

core/src/processing/opengl/PShader.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import processing.core.*;
2727

28-
import java.io.IOException;
2928
import java.net.URL;
3029
import java.nio.FloatBuffer;
3130
import java.nio.IntBuffer;
@@ -1090,10 +1089,12 @@ protected void loadUniforms() {
10901089
lightSpotLoc = getUniformLoc("lightSpot");
10911090

10921091
textureLoc = getUniformLoc("texture");
1092+
if (textureLoc == -1) {
1093+
textureLoc = getUniformLoc("texSampler");
1094+
}
10931095
texMatrixLoc = getUniformLoc("texMatrix");
10941096
texOffsetLoc = getUniformLoc("texOffset");
10951097

1096-
10971098
perspectiveLoc = getUniformLoc("perspective");
10981099
scaleLoc = getUniformLoc("scale");
10991100
}

0 commit comments

Comments
 (0)