picrate 0.2.0-java → 0.3.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -5
  3. data/Rakefile +10 -2
  4. data/docs/_posts/2018-06-26-auto_install_picrate.md +15 -0
  5. data/lib/export.txt +8 -0
  6. data/lib/picrate/app.rb +4 -4
  7. data/lib/picrate/version.rb +1 -1
  8. data/picrate.gemspec +1 -1
  9. data/pom.rb +1 -1
  10. data/pom.xml +1 -1
  11. data/src/main/java/processing/awt/PGraphicsJava2D.java +16 -85
  12. data/src/main/java/processing/awt/PShapeJava2D.java +9 -33
  13. data/src/main/java/processing/awt/PSurfaceAWT.java +76 -169
  14. data/src/main/java/processing/core/PApplet.java +14019 -15963
  15. data/src/main/java/processing/core/PConstants.java +475 -981
  16. data/src/main/java/processing/core/PFont.java +50 -202
  17. data/src/main/java/processing/core/PGraphics.java +7330 -8477
  18. data/src/main/java/processing/core/PImage.java +42 -212
  19. data/src/main/java/processing/core/PMatrix.java +21 -160
  20. data/src/main/java/processing/core/PMatrix2D.java +18 -178
  21. data/src/main/java/processing/core/PMatrix3D.java +48 -324
  22. data/src/main/java/processing/core/PShape.java +294 -1181
  23. data/src/main/java/processing/core/PShapeOBJ.java +16 -91
  24. data/src/main/java/processing/core/PShapeSVG.java +53 -253
  25. data/src/main/java/processing/core/PStyle.java +34 -179
  26. data/src/main/java/processing/core/PSurface.java +13 -94
  27. data/src/main/java/processing/core/PSurfaceNone.java +35 -140
  28. data/src/main/java/processing/core/PVector.java +10 -87
  29. data/src/main/java/processing/event/Event.java +86 -69
  30. data/src/main/java/processing/event/MouseEvent.java +102 -102
  31. data/src/main/java/processing/opengl/PGL.java +23 -16
  32. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +13 -10
  33. data/src/main/java/processing/opengl/PJOGL.java +32 -12
  34. data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +154 -0
  35. data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +2 -2
  36. data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +160 -0
  37. data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +2 -2
  38. metadata +7 -3
@@ -1,6 +1,6 @@
1
1
  /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
2
 
3
- /*
3
+ /*
4
4
  Part of the Processing project - http://processing.org
5
5
 
6
6
  Copyright (c) 2012 The Processing Foundation
@@ -18,132 +18,132 @@
18
18
  Public License along with this library; if not, write to the
19
19
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
20
  Boston, MA 02111-1307 USA
21
- */
21
+ */
22
+
22
23
  package processing.event;
23
24
 
24
25
  //import processing.core.PConstants;
25
- public class MouseEvent extends Event {
26
26
 
27
- static public final int PRESS = 1;
28
- static public final int RELEASE = 2;
29
- static public final int CLICK = 3;
30
- static public final int DRAG = 4;
31
- static public final int MOVE = 5;
32
- static public final int ENTER = 6;
33
- static public final int EXIT = 7;
34
- static public final int WHEEL = 8;
35
-
36
- protected int x, y;
37
- protected int button;
27
+
28
+ public class MouseEvent extends Event {
29
+ static public final int PRESS = 1;
30
+ static public final int RELEASE = 2;
31
+ static public final int CLICK = 3;
32
+ static public final int DRAG = 4;
33
+ static public final int MOVE = 5;
34
+ static public final int ENTER = 6;
35
+ static public final int EXIT = 7;
36
+ static public final int WHEEL = 8;
37
+
38
+ protected int x, y;
39
+ protected int button;
38
40
  // protected int clickCount;
39
41
  // protected float amount;
40
- protected int count;
42
+ protected int count;
43
+
41
44
 
42
45
  // public MouseEvent(int x, int y) {
43
46
  // this(null,
44
47
  // System.currentTimeMillis(), PRESSED, 0,
45
48
  // x, y, PConstants.LEFT, 1);
46
49
  // }
47
- public MouseEvent(Object nativeObject,
48
- long millis, int action, int modifiers,
49
- int x, int y, int button, int count) { //float amount) { //int clickCount) {
50
- super(nativeObject, millis, action, modifiers);
51
- this.flavor = MOUSE;
52
- this.x = x;
53
- this.y = y;
54
- this.button = button;
55
- //this.clickCount = clickCount;
56
- //this.amount = amount;
57
- this.count = count;
58
- }
59
50
 
60
- public int getX() {
61
- return x;
62
- }
63
51
 
64
- public int getY() {
65
- return y;
66
- }
52
+ public MouseEvent(Object nativeObject,
53
+ long millis, int action, int modifiers,
54
+ int x, int y, int button, int count) { //float amount) { //int clickCount) {
55
+ super(nativeObject, millis, action, modifiers);
56
+ this.flavor = MOUSE;
57
+ this.x = x;
58
+ this.y = y;
59
+ this.button = button;
60
+ //this.clickCount = clickCount;
61
+ //this.amount = amount;
62
+ this.count = count;
63
+ }
64
+
65
+
66
+ public int getX() {
67
+ return x;
68
+ }
69
+
70
+
71
+ public int getY() {
72
+ return y;
73
+ }
74
+
75
+
76
+ /** Which button was pressed, either LEFT, CENTER, or RIGHT. */
77
+ public int getButton() {
78
+ return button;
79
+ }
67
80
 
68
- /**
69
- * Which button was pressed, either LEFT, CENTER, or RIGHT.
70
- *
71
- * @return
72
- */
73
- public int getButton() {
74
- return button;
75
- }
76
81
 
77
82
  // public void setButton(int button) {
78
83
  // this.button = button;
79
84
  // }
80
- /**
81
- * Do not use, getCount() is the correct method.
82
- *
83
- * @return
84
- */
85
- @Deprecated
86
- public int getClickCount() {
87
- //return (int) amount; //clickCount;
88
- return count;
89
- }
90
85
 
91
- /**
92
- * Do not use, getCount() is the correct method.
93
- *
94
- * @return
95
- */
96
- @Deprecated
97
- public float getAmount() {
98
- //return amount;
99
- return count;
100
- }
101
86
 
102
- /**
103
- * Number of clicks for mouse button events, or the number of steps
104
- * (positive or negative depending on direction) for a mouse wheel event.
105
- * Wheel events follow Java (see
106
- * <a href="http://docs.oracle.com/javase/6/docs/api/java/awt/event/MouseWheelEvent.html#getWheelRotation()">here</a>),
107
- * so getAmount() will return "negative values if the mouse wheel was
108
- * rotated up or away from the user" and positive values in the other
109
- * direction. On Mac OS X, this will be reversed when "natural" scrolling is
110
- * enabled in System Preferences &rarr Mouse.
111
- *
112
- * @return
113
- */
114
- public int getCount() {
115
- return count;
116
- }
87
+ /** Do not use, getCount() is the correct method. */
88
+ @Deprecated
89
+ public int getClickCount() {
90
+ //return (int) amount; //clickCount;
91
+ return count;
92
+ }
93
+
94
+
95
+ /** Do not use, getCount() is the correct method. */
96
+ @Deprecated
97
+ public float getAmount() {
98
+ //return amount;
99
+ return count;
100
+ }
101
+
102
+
103
+ /**
104
+ * Number of clicks for mouse button events, or the number of steps (positive
105
+ * or negative depending on direction) for a mouse wheel event.
106
+ * Wheel events follow Java (see <a href="http://docs.oracle.com/javase/6/docs/api/java/awt/event/MouseWheelEvent.html#getWheelRotation()">here</a>), so
107
+ * getAmount() will return "negative values if the mouse wheel was rotated
108
+ * up or away from the user" and positive values in the other direction.
109
+ * On Mac OS X, this will be reversed when "natural" scrolling is enabled
110
+ * in System Preferences &rarr Mouse.
111
+ */
112
+ public int getCount() {
113
+ return count;
114
+ }
115
+
117
116
 
118
117
  // public void setClickCount(int clickCount) {
119
118
  // this.clickCount = clickCount;
120
119
  // }
121
- private String actionString() {
122
- switch (action) {
123
- default:
124
- return "UNKNOWN";
125
- case CLICK:
126
- return "CLICK";
127
- case DRAG:
128
- return "DRAG";
129
- case ENTER:
130
- return "ENTER";
131
- case EXIT:
132
- return "EXIT";
133
- case MOVE:
134
- return "MOVE";
135
- case PRESS:
136
- return "PRESS";
137
- case RELEASE:
138
- return "RELEASE";
139
- case WHEEL:
140
- return "WHEEL";
141
- }
142
- }
143
120
 
144
- @Override
145
- public String toString() {
146
- return String.format("<MouseEvent %s@%d,%d count:%d button:%d>",
147
- actionString(), x, y, count, button);
121
+ private String actionString() {
122
+ switch (action) {
123
+ default:
124
+ return "UNKNOWN";
125
+ case CLICK:
126
+ return "CLICK";
127
+ case DRAG:
128
+ return "DRAG";
129
+ case ENTER:
130
+ return "ENTER";
131
+ case EXIT:
132
+ return "EXIT";
133
+ case MOVE:
134
+ return "MOVE";
135
+ case PRESS:
136
+ return "PRESS";
137
+ case RELEASE:
138
+ return "RELEASE";
139
+ case WHEEL:
140
+ return "WHEEL";
148
141
  }
142
+ }
143
+
144
+ @Override
145
+ public String toString() {
146
+ return String.format("<MouseEvent %s@%d,%d count:%d button:%d>",
147
+ actionString(), x, y, count, button);
148
+ }
149
149
  }
@@ -1287,9 +1287,9 @@ public abstract class PGL {
1287
1287
  PGL ppgl = primaryPGL ? this : graphics.getPrimaryPGL();
1288
1288
 
1289
1289
  if (!ppgl.loadedTex2DShader || ppgl.tex2DShaderContext != ppgl.glContext) {
1290
- String[] preprocVertSrc = preprocessVertexSource(texVertShaderSource, getGLSLVersion());
1290
+ String[] preprocVertSrc = preprocessVertexSource(texVertShaderSource, getGLSLVersion(), getGLSLVersionSuffix());
1291
1291
  String vertSource = PApplet.join(preprocVertSrc, "\n");
1292
- String[] preprocFragSrc = preprocessFragmentSource(tex2DFragShaderSource, getGLSLVersion());
1292
+ String[] preprocFragSrc = preprocessFragmentSource(tex2DFragShaderSource, getGLSLVersion(), getGLSLVersionSuffix());
1293
1293
  String fragSource = PApplet.join(preprocFragSrc, "\n");
1294
1294
  ppgl.tex2DVertShader = createShader(VERTEX_SHADER, vertSource);
1295
1295
  ppgl.tex2DFragShader = createShader(FRAGMENT_SHADER, fragSource);
@@ -1419,9 +1419,9 @@ public abstract class PGL {
1419
1419
  PGL ppgl = primaryPGL ? this : graphics.getPrimaryPGL();
1420
1420
 
1421
1421
  if (!ppgl.loadedTexRectShader || ppgl.texRectShaderContext != ppgl.glContext) {
1422
- String[] preprocVertSrc = preprocessVertexSource(texVertShaderSource, getGLSLVersion());
1422
+ String[] preprocVertSrc = preprocessVertexSource(texVertShaderSource, getGLSLVersion(), getGLSLVersionSuffix());
1423
1423
  String vertSource = PApplet.join(preprocVertSrc, "\n");
1424
- String[] preprocFragSrc = preprocessFragmentSource(texRectFragShaderSource, getGLSLVersion());
1424
+ String[] preprocFragSrc = preprocessFragmentSource(texRectFragShaderSource, getGLSLVersion(), getGLSLVersionSuffix());
1425
1425
  String fragSource = PApplet.join(preprocFragSrc, "\n");
1426
1426
  ppgl.texRectVertShader = createShader(VERTEX_SHADER, vertSource);
1427
1427
  ppgl.texRectFragShader = createShader(FRAGMENT_SHADER, fragSource);
@@ -1848,6 +1848,7 @@ public abstract class PGL {
1848
1848
 
1849
1849
 
1850
1850
  abstract protected int getGLSLVersion();
1851
+ abstract protected String getGLSLVersionSuffix();
1851
1852
 
1852
1853
 
1853
1854
  protected String[] loadVertexShader(String filename) {
@@ -1880,28 +1881,29 @@ public abstract class PGL {
1880
1881
  }
1881
1882
 
1882
1883
 
1883
- protected String[] loadVertexShader(String filename, int version) {
1884
+ protected String[] loadVertexShader(String filename, int version, String versionSuffix) {
1884
1885
  return loadVertexShader(filename);
1885
1886
  }
1886
1887
 
1887
1888
 
1888
- protected String[] loadFragmentShader(String filename, int version) {
1889
+ protected String[] loadFragmentShader(String filename, int version, String versionSuffix) {
1889
1890
  return loadFragmentShader(filename);
1890
1891
  }
1891
1892
 
1892
1893
 
1893
- protected String[] loadFragmentShader(URL url, int version) {
1894
+ protected String[] loadFragmentShader(URL url, int version, String versionSuffix) {
1894
1895
  return loadFragmentShader(url);
1895
1896
  }
1896
1897
 
1897
1898
 
1898
- protected String[] loadVertexShader(URL url, int version) {
1899
+ protected String[] loadVertexShader(URL url, int version, String versionSuffix) {
1899
1900
  return loadVertexShader(url);
1900
1901
  }
1901
1902
 
1902
1903
 
1903
1904
  protected static String[] preprocessFragmentSource(String[] fragSrc0,
1904
- int version) {
1905
+ int version,
1906
+ String versionSuffix) {
1905
1907
  if (containsVersionDirective(fragSrc0)) {
1906
1908
  // The user knows what she or he is doing
1907
1909
  return fragSrc0;
@@ -1915,7 +1917,7 @@ public abstract class PGL {
1915
1917
  int offset = 1;
1916
1918
 
1917
1919
  fragSrc = preprocessShaderSource(fragSrc0, search, replace, offset);
1918
- fragSrc[0] = "#version " + version;
1920
+ fragSrc[0] = "#version " + version + versionSuffix;
1919
1921
  } else {
1920
1922
  // We need to replace 'texture' uniform by 'texMap' uniform and
1921
1923
  // 'textureXXX()' functions by 'texture()' functions. Order of these
@@ -1932,15 +1934,20 @@ public abstract class PGL {
1932
1934
  int offset = 2;
1933
1935
 
1934
1936
  fragSrc = preprocessShaderSource(fragSrc0, search, replace, offset);
1935
- fragSrc[0] = "#version " + version;
1936
- fragSrc[1] = "out vec4 _fragColor;";
1937
+ fragSrc[0] = "#version " + version + versionSuffix;
1938
+ if (" es".equals(versionSuffix)) {
1939
+ fragSrc[1] = "out mediump vec4 _fragColor;";
1940
+ } else {
1941
+ fragSrc[1] = "out vec4 _fragColor;";
1942
+ }
1937
1943
  }
1938
1944
 
1939
1945
  return fragSrc;
1940
1946
  }
1941
1947
 
1942
1948
  protected static String[] preprocessVertexSource(String[] vertSrc0,
1943
- int version) {
1949
+ int version,
1950
+ String versionSuffix) {
1944
1951
  if (containsVersionDirective(vertSrc0)) {
1945
1952
  // The user knows what she or he is doing
1946
1953
  return vertSrc0;
@@ -1954,7 +1961,7 @@ public abstract class PGL {
1954
1961
  int offset = 1;
1955
1962
 
1956
1963
  vertSrc = preprocessShaderSource(vertSrc0, search, replace, offset);
1957
- vertSrc[0] = "#version " + version;
1964
+ vertSrc[0] = "#version " + version + versionSuffix;
1958
1965
  } else {
1959
1966
  // We need to replace 'texture' uniform by 'texMap' uniform and
1960
1967
  // 'textureXXX()' functions by 'texture()' functions. Order of these
@@ -1971,7 +1978,7 @@ public abstract class PGL {
1971
1978
  int offset = 1;
1972
1979
 
1973
1980
  vertSrc = preprocessShaderSource(vertSrc0, search, replace, offset);
1974
- vertSrc[0] = "#version " + version;
1981
+ vertSrc[0] = "#version " + version + versionSuffix;
1975
1982
  }
1976
1983
 
1977
1984
  return vertSrc;
@@ -2225,7 +2232,7 @@ public abstract class PGL {
2225
2232
 
2226
2233
  protected boolean hasAnisoSamplingSupport() {
2227
2234
  int major = getGLVersion()[0];
2228
- if (major < 3) {
2235
+ if (isES() || major < 3) {
2229
2236
  String ext = getString(EXTENSIONS);
2230
2237
  return -1 < ext.indexOf("_texture_filter_anisotropic");
2231
2238
  } else {
@@ -1561,13 +1561,14 @@ public class PGraphicsOpenGL extends PGraphics {
1561
1561
  }
1562
1562
  pgl.depthFunc(PGL.LEQUAL);
1563
1563
 
1564
- if (OPENGL_RENDERER.equals("VideoCore IV HW")) {
1565
- // Broadcom's VC IV driver is unhappy with either of these
1566
- // ignore for now
1564
+ if (pgl.isES()) {
1565
+ // neither GL_MULTISAMPLE nor GL_POLYGON_SMOOTH are part of GLES2 or GLES3
1567
1566
  } else if (smooth < 1) {
1568
1567
  pgl.disable(PGL.MULTISAMPLE);
1569
1568
  } else if (1 <= smooth) {
1570
1569
  pgl.enable(PGL.MULTISAMPLE);
1570
+ }
1571
+ if (!pgl.isES()) {
1571
1572
  pgl.disable(PGL.POLYGON_SMOOTH);
1572
1573
  }
1573
1574
 
@@ -6775,16 +6776,14 @@ public class PGraphicsOpenGL extends PGraphics {
6775
6776
  // quality = temp;
6776
6777
  // }
6777
6778
  }
6778
- if (OPENGL_RENDERER.equals("VideoCore IV HW")) {
6779
- // Broadcom's VC IV driver is unhappy with either of these
6780
- // ignore for now
6779
+ if (pgl.isES()) {
6780
+ // neither GL_MULTISAMPLE nor GL_POLYGON_SMOOTH are part of GLES2 or GLES3
6781
6781
  } else if (smooth < 1) {
6782
6782
  pgl.disable(PGL.MULTISAMPLE);
6783
6783
  } else if (1 <= smooth) {
6784
6784
  pgl.enable(PGL.MULTISAMPLE);
6785
6785
  }
6786
- // work around runtime exceptions in Broadcom's VC IV driver
6787
- if (false == OPENGL_RENDERER.equals("VideoCore IV HW")) {
6786
+ if (!pgl.isES()) {
6788
6787
  pgl.disable(PGL.POLYGON_SMOOTH);
6789
6788
  }
6790
6789
 
@@ -6895,8 +6894,12 @@ public class PGraphicsOpenGL extends PGraphics {
6895
6894
 
6896
6895
  // overwrite the default shaders with vendor specific versions
6897
6896
  // if needed
6898
- if (OPENGL_RENDERER.equals("VideoCore IV HW") || // Broadcom's binary driver for Raspberry Pi
6899
- OPENGL_RENDERER.contains("VC4")) { // Mesa driver for same hardware
6897
+ if (OPENGL_RENDERER.equals("VideoCore IV HW")) { // Broadcom's binary driver for Raspberry Pi
6898
+ defLightShaderVertURL =
6899
+ PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/LightVert-brcm.glsl");
6900
+ defTexlightShaderVertURL =
6901
+ PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/TexLightVert-brcm.glsl");
6902
+ } else if (OPENGL_RENDERER.contains("VC4")) { // Mesa driver for same hardware
6900
6903
  defLightShaderVertURL =
6901
6904
  PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/LightVert-vc4.glsl");
6902
6905
  defTexlightShaderVertURL =
@@ -509,50 +509,59 @@ public class PJOGL extends PGL {
509
509
  return vn.getMajor() * 100 + vn.getMinor();
510
510
  }
511
511
 
512
+ protected String getGLSLVersionSuffix() {
513
+ VersionNumber vn = context.getGLSLVersionNumber();
514
+ if (context.isGLESProfile() && 1 < vn.getMajor()) {
515
+ return " es";
516
+ } else {
517
+ return "";
518
+ }
519
+ }
520
+
512
521
 
513
522
  @Override
514
523
  protected String[] loadVertexShader(String filename) {
515
- return loadVertexShader(filename, getGLSLVersion());
524
+ return loadVertexShader(filename, getGLSLVersion(), getGLSLVersionSuffix());
516
525
  }
517
526
 
518
527
 
519
528
  @Override
520
529
  protected String[] loadFragmentShader(String filename) {
521
- return loadFragmentShader(filename, getGLSLVersion());
530
+ return loadFragmentShader(filename, getGLSLVersion(), getGLSLVersionSuffix());
522
531
  }
523
532
 
524
533
 
525
534
  @Override
526
535
  protected String[] loadVertexShader(URL url) {
527
- return loadVertexShader(url, getGLSLVersion());
536
+ return loadVertexShader(url, getGLSLVersion(), getGLSLVersionSuffix());
528
537
  }
529
538
 
530
539
 
531
540
  @Override
532
541
  protected String[] loadFragmentShader(URL url) {
533
- return loadFragmentShader(url, getGLSLVersion());
542
+ return loadFragmentShader(url, getGLSLVersion(), getGLSLVersionSuffix());
534
543
  }
535
544
 
536
545
 
537
546
  @Override
538
- protected String[] loadFragmentShader(String filename, int version) {
547
+ protected String[] loadFragmentShader(String filename, int version, String versionSuffix) {
539
548
  String[] fragSrc0 = sketch.loadStrings(filename);
540
- return preprocessFragmentSource(fragSrc0, version);
549
+ return preprocessFragmentSource(fragSrc0, version, versionSuffix);
541
550
  }
542
551
 
543
552
 
544
553
  @Override
545
- protected String[] loadVertexShader(String filename, int version) {
554
+ protected String[] loadVertexShader(String filename, int version, String versionSuffix) {
546
555
  String[] vertSrc0 = sketch.loadStrings(filename);
547
- return preprocessVertexSource(vertSrc0, version);
556
+ return preprocessVertexSource(vertSrc0, version, versionSuffix);
548
557
  }
549
558
 
550
559
 
551
560
  @Override
552
- protected String[] loadFragmentShader(URL url, int version) {
561
+ protected String[] loadFragmentShader(URL url, int version, String versionSuffix) {
553
562
  try {
554
563
  String[] fragSrc0 = PApplet.loadStrings(url.openStream());
555
- return preprocessFragmentSource(fragSrc0, version);
564
+ return preprocessFragmentSource(fragSrc0, version, versionSuffix);
556
565
  } catch (IOException e) {
557
566
  PGraphics.showException("Cannot load fragment shader " + url.getFile());
558
567
  }
@@ -561,10 +570,10 @@ public class PJOGL extends PGL {
561
570
 
562
571
 
563
572
  @Override
564
- protected String[] loadVertexShader(URL url, int version) {
573
+ protected String[] loadVertexShader(URL url, int version, String versionSuffix) {
565
574
  try {
566
575
  String[] vertSrc0 = PApplet.loadStrings(url.openStream());
567
- return preprocessVertexSource(vertSrc0, version);
576
+ return preprocessVertexSource(vertSrc0, version, versionSuffix);
568
577
  } catch (IOException e) {
569
578
  PGraphics.showException("Cannot load vertex shader " + url.getFile());
570
579
  }
@@ -1926,6 +1935,8 @@ public class PJOGL extends PGL {
1926
1935
  gl2x.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1927
1936
  } else if (gl3 != null) {
1928
1937
  gl3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1938
+ } else if (gl3es3 != null) {
1939
+ gl3es3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1929
1940
  } else {
1930
1941
  throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glBlitFramebuffer()"));
1931
1942
  }
@@ -1937,6 +1948,8 @@ public class PJOGL extends PGL {
1937
1948
  gl2x.glRenderbufferStorageMultisample(target, samples, format, width, height);
1938
1949
  } else if (gl3 != null) {
1939
1950
  gl3.glRenderbufferStorageMultisample(target, samples, format, width, height);
1951
+ } else if (gl3es3 != null) {
1952
+ gl3es3.glRenderbufferStorageMultisample(target, samples, format, width, height);
1940
1953
  } else {
1941
1954
  throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glRenderbufferStorageMultisample()"));
1942
1955
  }
@@ -1948,6 +1961,8 @@ public class PJOGL extends PGL {
1948
1961
  gl2x.glReadBuffer(buf);
1949
1962
  } else if (gl3 != null) {
1950
1963
  gl3.glReadBuffer(buf);
1964
+ } else if (gl3es3 != null) {
1965
+ gl3es3.glReadBuffer(buf);
1951
1966
  } else {
1952
1967
  throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glReadBuffer()"));
1953
1968
  }
@@ -1959,6 +1974,11 @@ public class PJOGL extends PGL {
1959
1974
  gl2x.glDrawBuffer(buf);
1960
1975
  } else if (gl3 != null) {
1961
1976
  gl3.glDrawBuffer(buf);
1977
+ } else if (gl3es3 != null) {
1978
+ IntBuffer intBuffer = IntBuffer.allocate(1);
1979
+ intBuffer.put(buf);
1980
+ intBuffer.rewind();
1981
+ gl3es3.glDrawBuffers(1, intBuffer);
1962
1982
  } else {
1963
1983
  throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glDrawBuffer()"));
1964
1984
  }