propane 3.1.0.pre-java → 3.2.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/wrapper/maven-wrapper.properties +1 -0
  3. data/CHANGELOG.md +1 -5
  4. data/README.md +23 -12
  5. data/Rakefile +23 -12
  6. data/lib/propane/helpers/version_error.rb +6 -0
  7. data/lib/propane/runner.rb +12 -0
  8. data/lib/propane/version.rb +1 -1
  9. data/library/slider/slider.rb +1 -1
  10. data/mvnw +234 -0
  11. data/mvnw.cmd +145 -0
  12. data/pom.xml +28 -27
  13. data/propane.gemspec +2 -2
  14. data/src/main/java/japplemenubar/JAppleMenuBar.java +41 -47
  15. data/src/main/java/monkstone/ColorUtil.java +1 -1
  16. data/src/main/java/monkstone/MathToolModule.java +12 -11
  17. data/src/main/java/monkstone/PropaneLibrary.java +9 -10
  18. data/src/main/java/monkstone/core/LibraryProxy.java +124 -113
  19. data/src/main/java/monkstone/fastmath/Deglut.java +86 -89
  20. data/src/main/java/monkstone/filechooser/Chooser.java +7 -13
  21. data/src/main/java/monkstone/noise/SimplexNoise.java +0 -1
  22. data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +4 -4
  23. data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
  24. data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +9 -9
  25. data/src/main/java/monkstone/slider/SimpleSlider.java +0 -9
  26. data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +11 -13
  27. data/src/main/java/monkstone/slider/Slider.java +1 -1
  28. data/src/main/java/monkstone/slider/SliderBar.java +1 -1
  29. data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
  30. data/src/main/java/monkstone/slider/WheelHandler.java +8 -9
  31. data/src/main/java/monkstone/vecmath/AppRender.java +2 -2
  32. data/src/main/java/monkstone/vecmath/ShapeRender.java +2 -2
  33. data/src/main/java/monkstone/vecmath/package-info.java +2 -2
  34. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +2 -2
  35. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -1
  36. data/src/main/java/monkstone/videoevent/VideoInterface.java +11 -5
  37. data/src/main/java/monkstone/videoevent/package-info.java +2 -2
  38. data/src/main/java/processing/awt/PGraphicsJava2D.java +1742 -2243
  39. data/src/main/java/processing/awt/PShapeJava2D.java +268 -270
  40. data/src/main/java/processing/awt/PSurfaceAWT.java +821 -920
  41. data/src/main/java/processing/core/DesktopHandler.java +94 -0
  42. data/src/main/java/processing/core/PApplet.java +14170 -14082
  43. data/src/main/java/processing/core/PConstants.java +447 -473
  44. data/src/main/java/processing/core/PFont.java +867 -873
  45. data/src/main/java/processing/core/PGraphics.java +7193 -7428
  46. data/src/main/java/processing/core/PImage.java +3051 -3117
  47. data/src/main/java/processing/core/PMatrix.java +159 -172
  48. data/src/main/java/processing/core/PMatrix2D.java +403 -444
  49. data/src/main/java/processing/core/PMatrix3D.java +735 -749
  50. data/src/main/java/processing/core/PShape.java +2651 -2793
  51. data/src/main/java/processing/core/PShapeOBJ.java +415 -422
  52. data/src/main/java/processing/core/PShapeSVG.java +1466 -1475
  53. data/src/main/java/processing/core/PStyle.java +37 -40
  54. data/src/main/java/processing/core/PSurface.java +98 -103
  55. data/src/main/java/processing/core/PSurfaceNone.java +208 -236
  56. data/src/main/java/processing/core/PVector.java +961 -990
  57. data/src/main/java/processing/data/DoubleDict.java +709 -753
  58. data/src/main/java/processing/data/DoubleList.java +695 -748
  59. data/src/main/java/processing/data/FloatDict.java +702 -746
  60. data/src/main/java/processing/data/FloatList.java +697 -751
  61. data/src/main/java/processing/data/IntDict.java +673 -718
  62. data/src/main/java/processing/data/IntList.java +633 -699
  63. data/src/main/java/processing/data/JSONArray.java +873 -931
  64. data/src/main/java/processing/data/JSONObject.java +1165 -1262
  65. data/src/main/java/processing/data/JSONTokener.java +341 -351
  66. data/src/main/java/processing/data/LongDict.java +662 -707
  67. data/src/main/java/processing/data/LongList.java +634 -700
  68. data/src/main/java/processing/data/Sort.java +41 -37
  69. data/src/main/java/processing/data/StringDict.java +486 -522
  70. data/src/main/java/processing/data/StringList.java +580 -624
  71. data/src/main/java/processing/data/Table.java +3508 -3686
  72. data/src/main/java/processing/data/TableRow.java +183 -182
  73. data/src/main/java/processing/data/XML.java +883 -957
  74. data/src/main/java/processing/event/Event.java +66 -87
  75. data/src/main/java/processing/event/KeyEvent.java +41 -48
  76. data/src/main/java/processing/event/MouseEvent.java +93 -103
  77. data/src/main/java/processing/event/TouchEvent.java +6 -10
  78. data/src/main/java/processing/javafx/PGraphicsFX2D.java +5 -69
  79. data/src/main/java/processing/javafx/PSurfaceFX.java +2 -7
  80. data/src/main/java/processing/opengl/FontTexture.java +270 -290
  81. data/src/main/java/processing/opengl/FrameBuffer.java +363 -375
  82. data/src/main/java/processing/opengl/LinePath.java +500 -543
  83. data/src/main/java/processing/opengl/LineStroker.java +582 -593
  84. data/src/main/java/processing/opengl/PGL.java +2881 -2904
  85. data/src/main/java/processing/opengl/PGraphics2D.java +315 -408
  86. data/src/main/java/processing/opengl/PGraphics3D.java +72 -107
  87. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +12043 -12230
  88. data/src/main/java/processing/opengl/PJOGL.java +1681 -1745
  89. data/src/main/java/processing/opengl/PShader.java +1257 -1260
  90. data/src/main/java/processing/opengl/PShapeOpenGL.java +4599 -4662
  91. data/src/main/java/processing/opengl/PSurfaceJOGL.java +1030 -1047
  92. data/src/main/java/processing/opengl/Texture.java +1397 -1462
  93. data/src/main/java/processing/opengl/VertexBuffer.java +55 -57
  94. data/src/main/resources/icon/icon-1024.png +0 -0
  95. data/src/main/resources/icon/icon-128.png +0 -0
  96. data/src/main/resources/icon/icon-16.png +0 -0
  97. data/src/main/resources/icon/icon-256.png +0 -0
  98. data/src/main/resources/icon/icon-32.png +0 -0
  99. data/src/main/resources/icon/icon-48.png +0 -0
  100. data/src/main/resources/icon/icon-512.png +0 -0
  101. data/src/main/resources/icon/icon-64.png +0 -0
  102. data/vendors/Rakefile +1 -1
  103. metadata +12 -8
  104. data/src/main/java/processing/core/ThinkDifferent.java +0 -70
@@ -1,5 +1,3 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
1
  /*
4
2
  Part of the Processing project - http://processing.org
5
3
 
@@ -20,8 +18,7 @@
20
18
  Public License along with this library; if not, write to the
21
19
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
20
  Boston, MA 02111-1307 USA
23
- */
24
-
21
+ */
25
22
  package processing.opengl;
26
23
 
27
24
  import java.awt.Font;
@@ -60,1930 +57,1869 @@ import processing.core.PGraphics;
60
57
  import processing.core.PMatrix3D;
61
58
  import processing.core.PSurface;
62
59
 
63
-
64
60
  public class PJOGL extends PGL {
65
- // OpenGL profile to use (2, 3 or 4)
66
- public static int profile = 2;
61
+ // OpenGL profile to use (2, 3 or 4)
62
+
63
+ public static int profile = 2;
64
+
65
+ // User-provided icons to override defaults
66
+ protected static String[] icons = null;
67
+
68
+ // The two windowing toolkits available to use in JOGL:
69
+ public static final int AWT = 0; // http://jogamp.org/wiki/index.php/Using_JOGL_in_AWT_SWT_and_Swing
70
+ public static final int NEWT = 1; // http://jogamp.org/jogl/doc/NEWT-Overview.html
71
+
72
+ // ........................................................
73
+ // Public members to access the underlying GL objects and context
74
+ /**
75
+ * Basic GL functionality, common to all profiles
76
+ */
77
+ public GL gl;
78
+
79
+ /**
80
+ * GLU interface *
81
+ */
82
+ public GLU glu;
83
+
84
+ /**
85
+ * The rendering context (holds rendering state info)
86
+ */
87
+ public GLContext context;
88
+
89
+ // ........................................................
90
+ // Additional parameters
91
+ /**
92
+ * Time that the Processing's animation thread will wait for JOGL's
93
+ * rendering thread to be done with a single frame.
94
+ */
95
+ protected static int DRAW_TIMEOUT_MILLIS = 500;
96
+
97
+ // ........................................................
98
+ // Protected JOGL-specific objects needed to access the GL profiles
99
+ /**
100
+ * The capabilities of the OpenGL rendering surface
101
+ */
102
+ protected GLCapabilitiesImmutable capabilities;
103
+
104
+ /**
105
+ * The rendering surface
106
+ */
107
+ protected GLDrawable drawable;
108
+
109
+ /**
110
+ * GLES2 functionality (shaders, etc)
111
+ */
112
+ protected GL2ES2 gl2;
113
+
114
+ /**
115
+ * GL3 interface
116
+ */
117
+ protected GL2GL3 gl3;
118
+
119
+ /**
120
+ * GL2 desktop functionality (blit framebuffer, map buffer range,
121
+ * multisampled renderbuffers)
122
+ */
123
+ protected GL2 gl2x;
124
+
125
+ /**
126
+ * GL3ES3 interface
127
+ */
128
+ protected GL3ES3 gl3es3;
129
+
130
+ /**
131
+ * Stores exceptions that ocurred during drawing
132
+ */
133
+ protected Exception drawException;
134
+
135
+ // ........................................................
136
+ // Utility arrays to copy projection/modelview matrices to GL
137
+ protected float[] projMatrix;
138
+ protected float[] mvMatrix;
139
+
140
+ // ........................................................
141
+ // Static initialization for some parameters that need to be different for
142
+ // JOGL
143
+ static {
144
+ MIN_DIRECT_BUFFER_SIZE = 2;
145
+ INDEX_TYPE = GL.GL_UNSIGNED_SHORT;
146
+ }
147
+
148
+ ///////////////////////////////////////////////////////////////
149
+ // Initialization, finalization
150
+ public PJOGL(PGraphicsOpenGL pg) {
151
+ super(pg);
152
+ glu = new GLU();
153
+ }
154
+
155
+ @Override
156
+ public Object getNative() {
157
+ return sketch.getSurface().getNative();
158
+ }
159
+
160
+ @Override
161
+ protected void setFrameRate(float fps) {
162
+ }
163
+
164
+ @Override
165
+ protected void initSurface(int antialias) {
166
+ }
167
+
168
+ @Override
169
+ protected void reinitSurface() {
170
+ }
171
+
172
+ @Override
173
+ protected void registerListeners() {
174
+ }
175
+
176
+ static public void setIcon(String... icons) {
177
+ PJOGL.icons = new String[icons.length];
178
+ PApplet.arrayCopy(icons, PJOGL.icons);
179
+ }
180
+
181
+ ///////////////////////////////////////////////////////////////
182
+ // Public methods to get/set renderer's properties
183
+ public void setCaps(GLCapabilities caps) {
184
+ reqNumSamples = caps.getNumSamples();
185
+ capabilities = caps;
186
+ }
187
+
188
+ public GLCapabilitiesImmutable getCaps() {
189
+ return capabilities;
190
+ }
191
+
192
+ public void setFps(float fps) {
193
+ if (!setFps || targetFps != fps) {
194
+ if (60 < fps) {
195
+ // Disables v-sync
196
+ gl.setSwapInterval(0);
197
+ } else if (30 < fps) {
198
+ gl.setSwapInterval(1);
199
+ } else {
200
+ gl.setSwapInterval(2);
201
+ }
202
+ targetFps = currentFps = fps;
203
+ setFps = true;
204
+ }
205
+ }
206
+
207
+ @Override
208
+ protected int getDepthBits() {
209
+ return capabilities.getDepthBits();
210
+ }
211
+
212
+ @Override
213
+ protected int getStencilBits() {
214
+ return capabilities.getStencilBits();
215
+ }
216
+
217
+ @Override
218
+ protected float getPixelScale() {
219
+ PSurface surf = sketch.getSurface();
220
+ if (surf == null) {
221
+ return graphics.pixelDensity;
222
+ } else if (surf instanceof PSurfaceJOGL) {
223
+ return ((PSurfaceJOGL) surf).getPixelScale();
224
+ } else {
225
+ throw new RuntimeException("Renderer cannot find a JOGL surface");
226
+ }
227
+ }
228
+
229
+ @Override
230
+ protected void getGL(PGL pgl) {
231
+ PJOGL pjogl = (PJOGL) pgl;
232
+
233
+ this.drawable = pjogl.drawable;
234
+ this.context = pjogl.context;
235
+ this.glContext = pjogl.glContext;
236
+ setThread(pjogl.glThread);
237
+
238
+ this.gl = pjogl.gl;
239
+ this.gl2 = pjogl.gl2;
240
+ this.gl2x = pjogl.gl2x;
241
+ this.gl3 = pjogl.gl3;
242
+ this.gl3es3 = pjogl.gl3es3;
243
+ }
244
+
245
+ public void getGL(GLAutoDrawable glDrawable) {
246
+ context = glDrawable.getContext();
247
+ glContext = context.hashCode();
248
+ setThread(Thread.currentThread());
249
+
250
+ gl = context.getGL();
251
+ gl2 = gl.getGL2ES2();
252
+ try {
253
+ gl2x = gl.getGL2();
254
+ } catch (com.jogamp.opengl.GLException e) {
255
+ gl2x = null;
256
+ }
257
+ try {
258
+ gl3 = gl.getGL2GL3();
259
+ } catch (com.jogamp.opengl.GLException e) {
260
+ gl3 = null;
261
+ }
262
+ try {
263
+ gl3es3 = gl.getGL3ES3();
264
+ } catch (com.jogamp.opengl.GLException e) {
265
+ gl3es3 = null;
266
+ }
267
+ }
268
+
269
+ @Override
270
+ protected boolean canDraw() {
271
+ return true;
272
+ }
273
+
274
+ @Override
275
+ protected void requestFocus() {
276
+ }
277
+
278
+ @Override
279
+ protected void requestDraw() {
280
+ }
281
+
282
+ @Override
283
+ protected void swapBuffers() {
284
+ PSurfaceJOGL surf = (PSurfaceJOGL) sketch.getSurface();
285
+ surf.window.swapBuffers();
286
+ }
287
+
288
+ @Override
289
+ protected void initFBOLayer() {
290
+ if (0 < sketch.frameCount) {
291
+ if (isES()) {
292
+ initFBOLayerES();
293
+ } else {
294
+ initFBOLayerGL();
295
+ }
296
+ }
297
+ }
67
298
 
68
- // User-provided icons to override defaults
69
- protected static String[] icons = null;
299
+ private void initFBOLayerES() {
300
+ IntBuffer buf = allocateDirectIntBuffer(fboWidth * fboHeight);
70
301
 
71
- // The two windowing toolkits available to use in JOGL:
72
- public static final int AWT = 0; // http://jogamp.org/wiki/index.php/Using_JOGL_in_AWT_SWT_and_Swing
73
- public static final int NEWT = 1; // http://jogamp.org/jogl/doc/NEWT-Overview.html
302
+ if (hasReadBuffer()) {
303
+ readBuffer(BACK);
304
+ }
305
+ readPixelsImpl(0, 0, fboWidth, fboHeight, RGBA, UNSIGNED_BYTE, buf);
306
+ bindTexture(TEXTURE_2D, glColorTex.get(frontTex));
307
+ texSubImage2D(TEXTURE_2D, 0, 0, 0, fboWidth, fboHeight, RGBA, UNSIGNED_BYTE, buf);
74
308
 
75
- // ........................................................
309
+ bindTexture(TEXTURE_2D, glColorTex.get(backTex));
310
+ texSubImage2D(TEXTURE_2D, 0, 0, 0, fboWidth, fboHeight, RGBA, UNSIGNED_BYTE, buf);
76
311
 
77
- // Public members to access the underlying GL objects and context
312
+ bindTexture(TEXTURE_2D, 0);
313
+ bindFramebufferImpl(FRAMEBUFFER, 0);
314
+ }
315
+
316
+ private void initFBOLayerGL() {
317
+ // Copy the contents of the front and back screen buffers to the textures
318
+ // of the FBO, so they are properly initialized. Note that the front buffer
319
+ // of the default framebuffer (the screen) contains the previous frame:
320
+ // https://www.opengl.org/wiki/Default_Framebuffer
321
+ // so it is copied to the front texture of the FBO layer:
322
+ if (pclearColor || 0 < pgeomCount || !sketch.isLooping()) {
323
+ if (hasReadBuffer()) {
324
+ readBuffer(FRONT);
325
+ }
326
+ } else {
327
+ // ...except when the previous frame has not been cleared and nothing was
328
+ // rendered while looping. In this case the back buffer, which holds the
329
+ // initial state of the previous frame, still contains the most up-to-date
330
+ // screen state.
331
+ readBuffer(BACK);
332
+ }
333
+ bindFramebufferImpl(DRAW_FRAMEBUFFER, glColorFbo.get(0));
334
+ framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0,
335
+ TEXTURE_2D, glColorTex.get(frontTex), 0);
336
+ if (hasDrawBuffer()) {
337
+ drawBuffer(COLOR_ATTACHMENT0);
338
+ }
339
+ blitFramebuffer(0, 0, fboWidth, fboHeight,
340
+ 0, 0, fboWidth, fboHeight,
341
+ COLOR_BUFFER_BIT, NEAREST);
342
+
343
+ readBuffer(BACK);
344
+ bindFramebufferImpl(DRAW_FRAMEBUFFER, glColorFbo.get(0));
345
+ framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0,
346
+ TEXTURE_2D, glColorTex.get(backTex), 0);
347
+ drawBuffer(COLOR_ATTACHMENT0);
348
+ blitFramebuffer(0, 0, fboWidth, fboHeight,
349
+ 0, 0, fboWidth, fboHeight,
350
+ COLOR_BUFFER_BIT, NEAREST);
351
+
352
+ bindFramebufferImpl(FRAMEBUFFER, 0);
353
+ }
78
354
 
79
- /** Basic GL functionality, common to all profiles */
80
- public GL gl;
355
+ @Override
356
+ protected void beginGL() {
357
+ PMatrix3D proj = graphics.projection;
358
+ PMatrix3D mdl = graphics.modelview;
359
+ if (gl2x != null) {
360
+ if (projMatrix == null) {
361
+ projMatrix = new float[16];
362
+ }
363
+ gl2x.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
364
+ projMatrix[0] = proj.m00;
365
+ projMatrix[1] = proj.m10;
366
+ projMatrix[2] = proj.m20;
367
+ projMatrix[3] = proj.m30;
368
+ projMatrix[4] = proj.m01;
369
+ projMatrix[5] = proj.m11;
370
+ projMatrix[6] = proj.m21;
371
+ projMatrix[7] = proj.m31;
372
+ projMatrix[8] = proj.m02;
373
+ projMatrix[9] = proj.m12;
374
+ projMatrix[10] = proj.m22;
375
+ projMatrix[11] = proj.m32;
376
+ projMatrix[12] = proj.m03;
377
+ projMatrix[13] = proj.m13;
378
+ projMatrix[14] = proj.m23;
379
+ projMatrix[15] = proj.m33;
380
+ gl2x.glLoadMatrixf(projMatrix, 0);
381
+
382
+ if (mvMatrix == null) {
383
+ mvMatrix = new float[16];
384
+ }
385
+ gl2x.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
386
+ mvMatrix[0] = mdl.m00;
387
+ mvMatrix[1] = mdl.m10;
388
+ mvMatrix[2] = mdl.m20;
389
+ mvMatrix[3] = mdl.m30;
390
+ mvMatrix[4] = mdl.m01;
391
+ mvMatrix[5] = mdl.m11;
392
+ mvMatrix[6] = mdl.m21;
393
+ mvMatrix[7] = mdl.m31;
394
+ mvMatrix[8] = mdl.m02;
395
+ mvMatrix[9] = mdl.m12;
396
+ mvMatrix[10] = mdl.m22;
397
+ mvMatrix[11] = mdl.m32;
398
+ mvMatrix[12] = mdl.m03;
399
+ mvMatrix[13] = mdl.m13;
400
+ mvMatrix[14] = mdl.m23;
401
+ mvMatrix[15] = mdl.m33;
402
+ gl2x.glLoadMatrixf(mvMatrix, 0);
403
+ }
404
+ }
81
405
 
82
- /** GLU interface **/
83
- public GLU glu;
406
+ @Override
407
+ protected boolean hasFBOs() {
408
+ if (context.hasBasicFBOSupport()) {
409
+ return true;
410
+ } else {
411
+ return super.hasFBOs();
412
+ }
413
+ }
84
414
 
85
- /** The rendering context (holds rendering state info) */
86
- public GLContext context;
415
+ @Override
416
+ protected boolean hasShaders() {
417
+ if (context.hasGLSL()) {
418
+ return true;
419
+ } else {
420
+ return super.hasShaders();
421
+ }
422
+ }
87
423
 
88
- // ........................................................
424
+ public void init(GLAutoDrawable glDrawable) {
425
+ capabilities = glDrawable.getChosenGLCapabilities();
426
+ if (!hasFBOs()) {
427
+ throw new RuntimeException(MISSING_FBO_ERROR);
428
+ }
429
+ if (!hasShaders()) {
430
+ throw new RuntimeException(MISSING_GLSL_ERROR);
431
+ }
432
+ }
433
+
434
+ ///////////////////////////////////////////////////////////
435
+ // Utility functions
436
+ @Override
437
+ protected void enableTexturing(int target) {
438
+ if (target == TEXTURE_2D) {
439
+ texturingTargets[0] = true;
440
+ } else if (target == TEXTURE_RECTANGLE) {
441
+ texturingTargets[1] = true;
442
+ }
443
+ }
444
+
445
+ @Override
446
+ protected void disableTexturing(int target) {
447
+ if (target == TEXTURE_2D) {
448
+ texturingTargets[0] = false;
449
+ } else if (target == TEXTURE_RECTANGLE) {
450
+ texturingTargets[1] = false;
451
+ }
452
+ }
453
+
454
+ /**
455
+ * Convenience method to get a legit FontMetrics object. Where possible,
456
+ * override this any renderer subclass so that you're not using what's
457
+ * returned by getDefaultToolkit() to get your metrics.
458
+ */
459
+ @SuppressWarnings("deprecation")
460
+ private FontMetrics getFontMetrics(Font font) { // ignore
461
+ return Toolkit.getDefaultToolkit().getFontMetrics(font);
462
+ }
463
+
464
+ /**
465
+ * Convenience method to jump through some Java2D hoops and get an FRC.
466
+ */
467
+ private FontRenderContext getFontRenderContext(Font font) { // ignore
468
+ return getFontMetrics(font).getFontRenderContext();
469
+ }
470
+
471
+ @Override
472
+ protected int getFontAscent(Object font) {
473
+ return getFontMetrics((Font) font).getAscent();
474
+ }
89
475
 
90
- // Additional parameters
476
+ @Override
477
+ protected int getFontDescent(Object font) {
478
+ return getFontMetrics((Font) font).getDescent();
479
+ }
91
480
 
92
- /** Time that the Processing's animation thread will wait for JOGL's rendering
93
- * thread to be done with a single frame.
94
- */
95
- protected static int DRAW_TIMEOUT_MILLIS = 500;
481
+ @Override
482
+ protected int getTextWidth(Object font, char[] buffer, int start, int stop) {
483
+ // maybe should use one of the newer/fancier functions for this?
484
+ int length = stop - start;
485
+ FontMetrics metrics = getFontMetrics((Font) font);
486
+ return metrics.charsWidth(buffer, start, length);
487
+ }
96
488
 
97
- // ........................................................
489
+ @Override
490
+ protected Object getDerivedFont(Object font, float size) {
491
+ return ((Font) font).deriveFont(size);
492
+ }
98
493
 
99
- // Protected JOGL-specific objects needed to access the GL profiles
494
+ @Override
495
+ protected int getGLSLVersion() {
496
+ VersionNumber vn = context.getGLSLVersionNumber();
497
+ return vn.getMajor() * 100 + vn.getMinor();
498
+ }
100
499
 
101
- /** The capabilities of the OpenGL rendering surface */
102
- protected GLCapabilitiesImmutable capabilities;
500
+ @Override
501
+ protected String getGLSLVersionSuffix() {
502
+ VersionNumber vn = context.getGLSLVersionNumber();
503
+ if (context.isGLESProfile() && 1 < vn.getMajor()) {
504
+ return " es";
505
+ } else {
506
+ return "";
507
+ }
508
+ }
103
509
 
104
- /** The rendering surface */
105
- protected GLDrawable drawable;
510
+ @Override
511
+ protected String[] loadVertexShader(String filename) {
512
+ return loadVertexShader(filename, getGLSLVersion(), getGLSLVersionSuffix());
513
+ }
106
514
 
107
- /** GLES2 functionality (shaders, etc) */
108
- protected GL2ES2 gl2;
515
+ @Override
516
+ protected String[] loadFragmentShader(String filename) {
517
+ return loadFragmentShader(filename, getGLSLVersion(), getGLSLVersionSuffix());
518
+ }
109
519
 
110
- /** GL3 interface */
111
- protected GL2GL3 gl3;
520
+ @Override
521
+ protected String[] loadVertexShader(URL url) {
522
+ return loadVertexShader(url, getGLSLVersion(), getGLSLVersionSuffix());
523
+ }
112
524
 
113
- /** GL2 desktop functionality (blit framebuffer, map buffer range,
114
- * multisampled renderbuffers) */
115
- protected GL2 gl2x;
525
+ @Override
526
+ protected String[] loadFragmentShader(URL url) {
527
+ return loadFragmentShader(url, getGLSLVersion(), getGLSLVersionSuffix());
528
+ }
116
529
 
117
- /** GL3ES3 interface */
118
- protected GL3ES3 gl3es3;
530
+ @Override
531
+ protected String[] loadFragmentShader(String filename, int version, String versionSuffix) {
532
+ String[] fragSrc0 = sketch.loadStrings(filename);
533
+ return preprocessFragmentSource(fragSrc0, version, versionSuffix);
534
+ }
119
535
 
120
- /** Stores exceptions that ocurred during drawing */
121
- protected Exception drawException;
536
+ @Override
537
+ protected String[] loadVertexShader(String filename, int version, String versionSuffix) {
538
+ String[] vertSrc0 = sketch.loadStrings(filename);
539
+ return preprocessVertexSource(vertSrc0, version, versionSuffix);
540
+ }
122
541
 
123
- // ........................................................
542
+ @Override
543
+ protected String[] loadFragmentShader(URL url, int version, String versionSuffix) {
544
+ try {
545
+ String[] fragSrc0 = PApplet.loadStrings(url.openStream());
546
+ return preprocessFragmentSource(fragSrc0, version, versionSuffix);
547
+ } catch (IOException e) {
548
+ PGraphics.showException("Cannot load fragment shader " + url.getFile());
549
+ }
550
+ return null;
551
+ }
124
552
 
125
- // Utility arrays to copy projection/modelview matrices to GL
553
+ @Override
554
+ protected String[] loadVertexShader(URL url, int version, String versionSuffix) {
555
+ try {
556
+ String[] vertSrc0 = PApplet.loadStrings(url.openStream());
557
+ return preprocessVertexSource(vertSrc0, version, versionSuffix);
558
+ } catch (IOException e) {
559
+ PGraphics.showException("Cannot load vertex shader " + url.getFile());
560
+ }
561
+ return null;
562
+ }
126
563
 
127
- protected float[] projMatrix;
128
- protected float[] mvMatrix;
564
+ ///////////////////////////////////////////////////////////
565
+ // Tessellator
566
+ @Override
567
+ protected Tessellator createTessellator(TessellatorCallback callback) {
568
+ return new Tessellator(callback);
569
+ }
129
570
 
130
- // ........................................................
571
+ protected static class Tessellator implements PGL.Tessellator {
572
+
573
+ protected GLUtessellator tess;
574
+ protected TessellatorCallback callback;
575
+ protected GLUCallback gluCallback;
576
+
577
+ public Tessellator(TessellatorCallback callback) {
578
+ this.callback = callback;
579
+ tess = GLU.gluNewTess();
580
+ gluCallback = new GLUCallback();
581
+
582
+ GLU.gluTessCallback(tess, GLU.GLU_TESS_BEGIN, gluCallback);
583
+ GLU.gluTessCallback(tess, GLU.GLU_TESS_END, gluCallback);
584
+ GLU.gluTessCallback(tess, GLU.GLU_TESS_VERTEX, gluCallback);
585
+ GLU.gluTessCallback(tess, GLU.GLU_TESS_COMBINE, gluCallback);
586
+ GLU.gluTessCallback(tess, GLU.GLU_TESS_ERROR, gluCallback);
587
+ }
588
+
589
+ @Override
590
+ public void setCallback(int flag) {
591
+ GLU.gluTessCallback(tess, flag, gluCallback);
592
+ }
593
+
594
+ @Override
595
+ public void setWindingRule(int rule) {
596
+ setProperty(GLU.GLU_TESS_WINDING_RULE, rule);
597
+ }
598
+
599
+ public void setProperty(int property, int value) {
600
+ GLU.gluTessProperty(tess, property, value);
601
+ }
602
+
603
+ @Override
604
+ public void beginPolygon() {
605
+ beginPolygon(null);
606
+ }
607
+
608
+ @Override
609
+ public void beginPolygon(Object data) {
610
+ GLU.gluTessBeginPolygon(tess, data);
611
+ }
612
+
613
+ @Override
614
+ public void endPolygon() {
615
+ GLU.gluTessEndPolygon(tess);
616
+ }
617
+
618
+ @Override
619
+ public void beginContour() {
620
+ GLU.gluTessBeginContour(tess);
621
+ }
622
+
623
+ @Override
624
+ public void endContour() {
625
+ GLU.gluTessEndContour(tess);
626
+ }
627
+
628
+ @Override
629
+ public void addVertex(double[] v) {
630
+ addVertex(v, 0, v);
631
+ }
632
+
633
+ @Override
634
+ public void addVertex(double[] v, int n, Object data) {
635
+ GLU.gluTessVertex(tess, v, n, data);
636
+ }
637
+
638
+ protected class GLUCallback extends GLUtessellatorCallbackAdapter {
639
+
640
+ @Override
641
+ public void begin(int type) {
642
+ callback.begin(type);
643
+ }
644
+
645
+ @Override
646
+ public void end() {
647
+ callback.end();
648
+ }
649
+
650
+ @Override
651
+ public void vertex(Object data) {
652
+ callback.vertex(data);
653
+ }
654
+
655
+ @Override
656
+ public void combine(double[] coords, Object[] data,
657
+ float[] weight, Object[] outData) {
658
+ callback.combine(coords, data, weight, outData);
659
+ }
660
+
661
+ @Override
662
+ public void error(int errnum) {
663
+ callback.error(errnum);
664
+ }
665
+ }
666
+ }
131
667
 
132
- // Static initialization for some parameters that need to be different for
133
- // JOGL
668
+ @Override
669
+ protected String tessError(int err) {
670
+ return glu.gluErrorString(err);
671
+ }
134
672
 
135
- static {
136
- MIN_DIRECT_BUFFER_SIZE = 2;
137
- INDEX_TYPE = GL.GL_UNSIGNED_SHORT;
138
- }
673
+ ///////////////////////////////////////////////////////////
674
+ // Font outline
675
+ static {
676
+ SHAPE_TEXT_SUPPORTED = true;
677
+ SEG_MOVETO = PathIterator.SEG_MOVETO;
678
+ SEG_LINETO = PathIterator.SEG_LINETO;
679
+ SEG_QUADTO = PathIterator.SEG_QUADTO;
680
+ SEG_CUBICTO = PathIterator.SEG_CUBICTO;
681
+ SEG_CLOSE = PathIterator.SEG_CLOSE;
682
+ }
139
683
 
684
+ @Override
685
+ protected FontOutline createFontOutline(char ch, Object font) {
686
+ return new FontOutline(ch, (Font) font);
687
+ }
140
688
 
141
- ///////////////////////////////////////////////////////////////
689
+ protected class FontOutline implements PGL.FontOutline {
142
690
 
143
- // Initialization, finalization
691
+ PathIterator iter;
144
692
 
693
+ public FontOutline(char ch, Font font) {
694
+ char textArray[] = new char[]{ch};
695
+ FontRenderContext frc = getFontRenderContext(font);
696
+ GlyphVector gv = font.createGlyphVector(frc, textArray);
697
+ Shape shp = gv.getOutline();
698
+ iter = shp.getPathIterator(null);
699
+ }
145
700
 
146
- public PJOGL(PGraphicsOpenGL pg) {
147
- super(pg);
148
- glu = new GLU();
149
- }
701
+ public boolean isDone() {
702
+ return iter.isDone();
703
+ }
150
704
 
705
+ public int currentSegment(float coords[]) {
706
+ return iter.currentSegment(coords);
707
+ }
151
708
 
152
- @Override
153
- public Object getNative() {
154
- return sketch.getSurface().getNative();
155
- }
709
+ public void next() {
710
+ iter.next();
711
+ }
712
+ }
156
713
 
714
+ ///////////////////////////////////////////////////////////
715
+ // Constants
716
+ static {
717
+ FALSE = GL.GL_FALSE;
718
+ TRUE = GL.GL_TRUE;
719
+
720
+ INT = GL2ES2.GL_INT;
721
+ BYTE = GL.GL_BYTE;
722
+ SHORT = GL.GL_SHORT;
723
+ FLOAT = GL.GL_FLOAT;
724
+ BOOL = GL2ES2.GL_BOOL;
725
+ UNSIGNED_INT = GL.GL_UNSIGNED_INT;
726
+ UNSIGNED_BYTE = GL.GL_UNSIGNED_BYTE;
727
+ UNSIGNED_SHORT = GL.GL_UNSIGNED_SHORT;
728
+
729
+ RGB = GL.GL_RGB;
730
+ RGBA = GL.GL_RGBA;
731
+ ALPHA = GL.GL_ALPHA;
732
+ LUMINANCE = GL.GL_LUMINANCE;
733
+ LUMINANCE_ALPHA = GL.GL_LUMINANCE_ALPHA;
734
+
735
+ UNSIGNED_SHORT_5_6_5 = GL.GL_UNSIGNED_SHORT_5_6_5;
736
+ UNSIGNED_SHORT_4_4_4_4 = GL.GL_UNSIGNED_SHORT_4_4_4_4;
737
+ UNSIGNED_SHORT_5_5_5_1 = GL.GL_UNSIGNED_SHORT_5_5_5_1;
738
+
739
+ RGBA4 = GL.GL_RGBA4;
740
+ RGB5_A1 = GL.GL_RGB5_A1;
741
+ RGB565 = GL.GL_RGB565;
742
+ RGB8 = GL.GL_RGB8;
743
+ RGBA8 = GL.GL_RGBA8;
744
+ ALPHA8 = GL.GL_ALPHA8;
745
+
746
+ READ_ONLY = GL2ES3.GL_READ_ONLY;
747
+ WRITE_ONLY = GL.GL_WRITE_ONLY;
748
+ READ_WRITE = GL2ES3.GL_READ_WRITE;
749
+
750
+ TESS_WINDING_NONZERO = GLU.GLU_TESS_WINDING_NONZERO;
751
+ TESS_WINDING_ODD = GLU.GLU_TESS_WINDING_ODD;
752
+ TESS_EDGE_FLAG = GLU.GLU_TESS_EDGE_FLAG;
753
+
754
+ GENERATE_MIPMAP_HINT = GL.GL_GENERATE_MIPMAP_HINT;
755
+ FASTEST = GL.GL_FASTEST;
756
+ NICEST = GL.GL_NICEST;
757
+ DONT_CARE = GL.GL_DONT_CARE;
758
+
759
+ VENDOR = GL.GL_VENDOR;
760
+ RENDERER = GL.GL_RENDERER;
761
+ VERSION = GL.GL_VERSION;
762
+ EXTENSIONS = GL.GL_EXTENSIONS;
763
+ SHADING_LANGUAGE_VERSION = GL2ES2.GL_SHADING_LANGUAGE_VERSION;
764
+
765
+ MAX_SAMPLES = GL.GL_MAX_SAMPLES;
766
+ SAMPLES = GL.GL_SAMPLES;
767
+
768
+ ALIASED_LINE_WIDTH_RANGE = GL.GL_ALIASED_LINE_WIDTH_RANGE;
769
+ ALIASED_POINT_SIZE_RANGE = GL.GL_ALIASED_POINT_SIZE_RANGE;
770
+
771
+ DEPTH_BITS = GL.GL_DEPTH_BITS;
772
+ STENCIL_BITS = GL.GL_STENCIL_BITS;
773
+
774
+ CCW = GL.GL_CCW;
775
+ CW = GL.GL_CW;
776
+
777
+ VIEWPORT = GL.GL_VIEWPORT;
778
+
779
+ ARRAY_BUFFER = GL.GL_ARRAY_BUFFER;
780
+ ELEMENT_ARRAY_BUFFER = GL.GL_ELEMENT_ARRAY_BUFFER;
781
+ PIXEL_PACK_BUFFER = GL2ES3.GL_PIXEL_PACK_BUFFER;
782
+
783
+ MAX_VERTEX_ATTRIBS = GL2ES2.GL_MAX_VERTEX_ATTRIBS;
784
+
785
+ STATIC_DRAW = GL.GL_STATIC_DRAW;
786
+ DYNAMIC_DRAW = GL.GL_DYNAMIC_DRAW;
787
+ STREAM_DRAW = GL2ES2.GL_STREAM_DRAW;
788
+ STREAM_READ = GL2ES3.GL_STREAM_READ;
789
+
790
+ BUFFER_SIZE = GL.GL_BUFFER_SIZE;
791
+ BUFFER_USAGE = GL.GL_BUFFER_USAGE;
792
+
793
+ POINTS = GL.GL_POINTS;
794
+ LINE_STRIP = GL.GL_LINE_STRIP;
795
+ LINE_LOOP = GL.GL_LINE_LOOP;
796
+ LINES = GL.GL_LINES;
797
+ TRIANGLE_FAN = GL.GL_TRIANGLE_FAN;
798
+ TRIANGLE_STRIP = GL.GL_TRIANGLE_STRIP;
799
+ TRIANGLES = GL.GL_TRIANGLES;
800
+
801
+ CULL_FACE = GL.GL_CULL_FACE;
802
+ FRONT = GL.GL_FRONT;
803
+ BACK = GL.GL_BACK;
804
+ FRONT_AND_BACK = GL.GL_FRONT_AND_BACK;
805
+
806
+ POLYGON_OFFSET_FILL = GL.GL_POLYGON_OFFSET_FILL;
807
+
808
+ UNPACK_ALIGNMENT = GL.GL_UNPACK_ALIGNMENT;
809
+ PACK_ALIGNMENT = GL.GL_PACK_ALIGNMENT;
810
+
811
+ TEXTURE_2D = GL.GL_TEXTURE_2D;
812
+ TEXTURE_RECTANGLE = GL2GL3.GL_TEXTURE_RECTANGLE;
813
+
814
+ TEXTURE_BINDING_2D = GL.GL_TEXTURE_BINDING_2D;
815
+ TEXTURE_BINDING_RECTANGLE = GL2GL3.GL_TEXTURE_BINDING_RECTANGLE;
816
+
817
+ MAX_TEXTURE_SIZE = GL.GL_MAX_TEXTURE_SIZE;
818
+ TEXTURE_MAX_ANISOTROPY = GL.GL_TEXTURE_MAX_ANISOTROPY_EXT;
819
+ MAX_TEXTURE_MAX_ANISOTROPY = GL.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT;
820
+
821
+ MAX_VERTEX_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS;
822
+ MAX_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_TEXTURE_IMAGE_UNITS;
823
+ MAX_COMBINED_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS;
824
+
825
+ NUM_COMPRESSED_TEXTURE_FORMATS = GL.GL_NUM_COMPRESSED_TEXTURE_FORMATS;
826
+ COMPRESSED_TEXTURE_FORMATS = GL.GL_COMPRESSED_TEXTURE_FORMATS;
827
+
828
+ NEAREST = GL.GL_NEAREST;
829
+ LINEAR = GL.GL_LINEAR;
830
+ LINEAR_MIPMAP_NEAREST = GL.GL_LINEAR_MIPMAP_NEAREST;
831
+ LINEAR_MIPMAP_LINEAR = GL.GL_LINEAR_MIPMAP_LINEAR;
832
+
833
+ CLAMP_TO_EDGE = GL.GL_CLAMP_TO_EDGE;
834
+ REPEAT = GL.GL_REPEAT;
835
+
836
+ TEXTURE0 = GL.GL_TEXTURE0;
837
+ TEXTURE1 = GL.GL_TEXTURE1;
838
+ TEXTURE2 = GL.GL_TEXTURE2;
839
+ TEXTURE3 = GL.GL_TEXTURE3;
840
+ TEXTURE_MIN_FILTER = GL.GL_TEXTURE_MIN_FILTER;
841
+ TEXTURE_MAG_FILTER = GL.GL_TEXTURE_MAG_FILTER;
842
+ TEXTURE_WRAP_S = GL.GL_TEXTURE_WRAP_S;
843
+ TEXTURE_WRAP_T = GL.GL_TEXTURE_WRAP_T;
844
+ TEXTURE_WRAP_R = GL2ES2.GL_TEXTURE_WRAP_R;
845
+
846
+ TEXTURE_CUBE_MAP = GL.GL_TEXTURE_CUBE_MAP;
847
+ TEXTURE_CUBE_MAP_POSITIVE_X = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_X;
848
+ TEXTURE_CUBE_MAP_POSITIVE_Y = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
849
+ TEXTURE_CUBE_MAP_POSITIVE_Z = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
850
+ TEXTURE_CUBE_MAP_NEGATIVE_X = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
851
+ TEXTURE_CUBE_MAP_NEGATIVE_Y = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
852
+ TEXTURE_CUBE_MAP_NEGATIVE_Z = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
853
+
854
+ VERTEX_SHADER = GL2ES2.GL_VERTEX_SHADER;
855
+ FRAGMENT_SHADER = GL2ES2.GL_FRAGMENT_SHADER;
856
+ INFO_LOG_LENGTH = GL2ES2.GL_INFO_LOG_LENGTH;
857
+ SHADER_SOURCE_LENGTH = GL2ES2.GL_SHADER_SOURCE_LENGTH;
858
+ COMPILE_STATUS = GL2ES2.GL_COMPILE_STATUS;
859
+ LINK_STATUS = GL2ES2.GL_LINK_STATUS;
860
+ VALIDATE_STATUS = GL2ES2.GL_VALIDATE_STATUS;
861
+ SHADER_TYPE = GL2ES2.GL_SHADER_TYPE;
862
+ DELETE_STATUS = GL2ES2.GL_DELETE_STATUS;
863
+
864
+ FLOAT_VEC2 = GL2ES2.GL_FLOAT_VEC2;
865
+ FLOAT_VEC3 = GL2ES2.GL_FLOAT_VEC3;
866
+ FLOAT_VEC4 = GL2ES2.GL_FLOAT_VEC4;
867
+ FLOAT_MAT2 = GL2ES2.GL_FLOAT_MAT2;
868
+ FLOAT_MAT3 = GL2ES2.GL_FLOAT_MAT3;
869
+ FLOAT_MAT4 = GL2ES2.GL_FLOAT_MAT4;
870
+ INT_VEC2 = GL2ES2.GL_INT_VEC2;
871
+ INT_VEC3 = GL2ES2.GL_INT_VEC3;
872
+ INT_VEC4 = GL2ES2.GL_INT_VEC4;
873
+ BOOL_VEC2 = GL2ES2.GL_BOOL_VEC2;
874
+ BOOL_VEC3 = GL2ES2.GL_BOOL_VEC3;
875
+ BOOL_VEC4 = GL2ES2.GL_BOOL_VEC4;
876
+ SAMPLER_2D = GL2ES2.GL_SAMPLER_2D;
877
+ SAMPLER_CUBE = GL2ES2.GL_SAMPLER_CUBE;
878
+
879
+ LOW_FLOAT = GL2ES2.GL_LOW_FLOAT;
880
+ MEDIUM_FLOAT = GL2ES2.GL_MEDIUM_FLOAT;
881
+ HIGH_FLOAT = GL2ES2.GL_HIGH_FLOAT;
882
+ LOW_INT = GL2ES2.GL_LOW_INT;
883
+ MEDIUM_INT = GL2ES2.GL_MEDIUM_INT;
884
+ HIGH_INT = GL2ES2.GL_HIGH_INT;
885
+
886
+ CURRENT_VERTEX_ATTRIB = GL2ES2.GL_CURRENT_VERTEX_ATTRIB;
887
+
888
+ VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;
889
+ VERTEX_ATTRIB_ARRAY_ENABLED = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_ENABLED;
890
+ VERTEX_ATTRIB_ARRAY_SIZE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_SIZE;
891
+ VERTEX_ATTRIB_ARRAY_STRIDE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_STRIDE;
892
+ VERTEX_ATTRIB_ARRAY_TYPE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_TYPE;
893
+ VERTEX_ATTRIB_ARRAY_NORMALIZED = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_NORMALIZED;
894
+ VERTEX_ATTRIB_ARRAY_POINTER = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_POINTER;
895
+
896
+ BLEND = GL.GL_BLEND;
897
+ ONE = GL.GL_ONE;
898
+ ZERO = GL.GL_ZERO;
899
+ SRC_ALPHA = GL.GL_SRC_ALPHA;
900
+ DST_ALPHA = GL.GL_DST_ALPHA;
901
+ ONE_MINUS_SRC_ALPHA = GL.GL_ONE_MINUS_SRC_ALPHA;
902
+ ONE_MINUS_DST_COLOR = GL.GL_ONE_MINUS_DST_COLOR;
903
+ ONE_MINUS_SRC_COLOR = GL.GL_ONE_MINUS_SRC_COLOR;
904
+ DST_COLOR = GL.GL_DST_COLOR;
905
+ SRC_COLOR = GL.GL_SRC_COLOR;
906
+
907
+ SAMPLE_ALPHA_TO_COVERAGE = GL.GL_SAMPLE_ALPHA_TO_COVERAGE;
908
+ SAMPLE_COVERAGE = GL.GL_SAMPLE_COVERAGE;
909
+
910
+ KEEP = GL.GL_KEEP;
911
+ REPLACE = GL.GL_REPLACE;
912
+ INCR = GL.GL_INCR;
913
+ DECR = GL.GL_DECR;
914
+ INVERT = GL.GL_INVERT;
915
+ INCR_WRAP = GL.GL_INCR_WRAP;
916
+ DECR_WRAP = GL.GL_DECR_WRAP;
917
+ NEVER = GL.GL_NEVER;
918
+ ALWAYS = GL.GL_ALWAYS;
919
+
920
+ EQUAL = GL.GL_EQUAL;
921
+ LESS = GL.GL_LESS;
922
+ LEQUAL = GL.GL_LEQUAL;
923
+ GREATER = GL.GL_GREATER;
924
+ GEQUAL = GL.GL_GEQUAL;
925
+ NOTEQUAL = GL.GL_NOTEQUAL;
926
+
927
+ FUNC_ADD = GL.GL_FUNC_ADD;
928
+ FUNC_MIN = GL2ES3.GL_MIN;
929
+ FUNC_MAX = GL2ES3.GL_MAX;
930
+ FUNC_REVERSE_SUBTRACT = GL.GL_FUNC_REVERSE_SUBTRACT;
931
+ FUNC_SUBTRACT = GL.GL_FUNC_SUBTRACT;
932
+
933
+ DITHER = GL.GL_DITHER;
934
+
935
+ CONSTANT_COLOR = GL2ES2.GL_CONSTANT_COLOR;
936
+ CONSTANT_ALPHA = GL2ES2.GL_CONSTANT_ALPHA;
937
+ ONE_MINUS_CONSTANT_COLOR = GL2ES2.GL_ONE_MINUS_CONSTANT_COLOR;
938
+ ONE_MINUS_CONSTANT_ALPHA = GL2ES2.GL_ONE_MINUS_CONSTANT_ALPHA;
939
+ SRC_ALPHA_SATURATE = GL.GL_SRC_ALPHA_SATURATE;
940
+
941
+ SCISSOR_TEST = GL.GL_SCISSOR_TEST;
942
+ STENCIL_TEST = GL.GL_STENCIL_TEST;
943
+ DEPTH_TEST = GL.GL_DEPTH_TEST;
944
+ DEPTH_WRITEMASK = GL.GL_DEPTH_WRITEMASK;
945
+
946
+ COLOR_BUFFER_BIT = GL.GL_COLOR_BUFFER_BIT;
947
+ DEPTH_BUFFER_BIT = GL.GL_DEPTH_BUFFER_BIT;
948
+ STENCIL_BUFFER_BIT = GL.GL_STENCIL_BUFFER_BIT;
949
+
950
+ FRAMEBUFFER = GL.GL_FRAMEBUFFER;
951
+ COLOR_ATTACHMENT0 = GL.GL_COLOR_ATTACHMENT0;
952
+ COLOR_ATTACHMENT1 = GL2ES2.GL_COLOR_ATTACHMENT1;
953
+ COLOR_ATTACHMENT2 = GL2ES2.GL_COLOR_ATTACHMENT2;
954
+ COLOR_ATTACHMENT3 = GL2ES2.GL_COLOR_ATTACHMENT3;
955
+ RENDERBUFFER = GL.GL_RENDERBUFFER;
956
+ DEPTH_ATTACHMENT = GL.GL_DEPTH_ATTACHMENT;
957
+ STENCIL_ATTACHMENT = GL.GL_STENCIL_ATTACHMENT;
958
+ READ_FRAMEBUFFER = GL.GL_READ_FRAMEBUFFER;
959
+ DRAW_FRAMEBUFFER = GL.GL_DRAW_FRAMEBUFFER;
960
+
961
+ RGBA8 = GL.GL_RGBA8;
962
+ DEPTH24_STENCIL8 = GL.GL_DEPTH24_STENCIL8;
963
+
964
+ DEPTH_COMPONENT = GL2ES2.GL_DEPTH_COMPONENT;
965
+ DEPTH_COMPONENT16 = GL.GL_DEPTH_COMPONENT16;
966
+ DEPTH_COMPONENT24 = GL.GL_DEPTH_COMPONENT24;
967
+ DEPTH_COMPONENT32 = GL.GL_DEPTH_COMPONENT32;
968
+
969
+ STENCIL_INDEX = GL2ES2.GL_STENCIL_INDEX;
970
+ STENCIL_INDEX1 = GL.GL_STENCIL_INDEX1;
971
+ STENCIL_INDEX4 = GL.GL_STENCIL_INDEX4;
972
+ STENCIL_INDEX8 = GL.GL_STENCIL_INDEX8;
973
+
974
+ DEPTH_STENCIL = GL.GL_DEPTH_STENCIL;
975
+
976
+ FRAMEBUFFER_COMPLETE = GL.GL_FRAMEBUFFER_COMPLETE;
977
+ FRAMEBUFFER_UNDEFINED = GL2ES3.GL_FRAMEBUFFER_UNDEFINED;
978
+ FRAMEBUFFER_INCOMPLETE_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
979
+ FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
980
+ FRAMEBUFFER_INCOMPLETE_DIMENSIONS = GL.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
981
+ FRAMEBUFFER_INCOMPLETE_FORMATS = GL.GL_FRAMEBUFFER_INCOMPLETE_FORMATS;
982
+ FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = GL2GL3.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER;
983
+ FRAMEBUFFER_INCOMPLETE_READ_BUFFER = GL2GL3.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER;
984
+ FRAMEBUFFER_UNSUPPORTED = GL.GL_FRAMEBUFFER_UNSUPPORTED;
985
+ FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = GL.GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
986
+ FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = GL3ES3.GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
987
+
988
+ FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;
989
+ FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;
990
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;
991
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;
992
+
993
+ RENDERBUFFER_WIDTH = GL.GL_RENDERBUFFER_WIDTH;
994
+ RENDERBUFFER_HEIGHT = GL.GL_RENDERBUFFER_HEIGHT;
995
+ RENDERBUFFER_RED_SIZE = GL.GL_RENDERBUFFER_RED_SIZE;
996
+ RENDERBUFFER_GREEN_SIZE = GL.GL_RENDERBUFFER_GREEN_SIZE;
997
+ RENDERBUFFER_BLUE_SIZE = GL.GL_RENDERBUFFER_BLUE_SIZE;
998
+ RENDERBUFFER_ALPHA_SIZE = GL.GL_RENDERBUFFER_ALPHA_SIZE;
999
+ RENDERBUFFER_DEPTH_SIZE = GL.GL_RENDERBUFFER_DEPTH_SIZE;
1000
+ RENDERBUFFER_STENCIL_SIZE = GL.GL_RENDERBUFFER_STENCIL_SIZE;
1001
+ RENDERBUFFER_INTERNAL_FORMAT = GL.GL_RENDERBUFFER_INTERNAL_FORMAT;
1002
+
1003
+ MULTISAMPLE = GL.GL_MULTISAMPLE;
1004
+ LINE_SMOOTH = GL.GL_LINE_SMOOTH;
1005
+ POLYGON_SMOOTH = GL2GL3.GL_POLYGON_SMOOTH;
1006
+
1007
+ SYNC_GPU_COMMANDS_COMPLETE = GL3ES3.GL_SYNC_GPU_COMMANDS_COMPLETE;
1008
+ ALREADY_SIGNALED = GL3ES3.GL_ALREADY_SIGNALED;
1009
+ CONDITION_SATISFIED = GL3ES3.GL_CONDITION_SATISFIED;
1010
+ }
157
1011
 
158
- @Override
159
- protected void setFrameRate(float fps) {}
1012
+ ///////////////////////////////////////////////////////////
1013
+ // Special Functions
1014
+ @Override
1015
+ public void flush() {
1016
+ gl.glFlush();
1017
+ }
160
1018
 
1019
+ @Override
1020
+ public void finish() {
1021
+ gl.glFinish();
1022
+ }
161
1023
 
162
- @Override
163
- protected void initSurface(int antialias) {}
1024
+ @Override
1025
+ public void hint(int target, int hint) {
1026
+ gl.glHint(target, hint);
1027
+ }
164
1028
 
1029
+ ///////////////////////////////////////////////////////////
1030
+ // State and State Requests
1031
+ @Override
1032
+ public void enable(int value) {
1033
+ if (-1 < value) {
1034
+ gl.glEnable(value);
1035
+ }
1036
+ }
165
1037
 
166
- @Override
167
- protected void reinitSurface() {}
1038
+ @Override
1039
+ public void disable(int value) {
1040
+ if (-1 < value) {
1041
+ gl.glDisable(value);
1042
+ }
1043
+ }
168
1044
 
1045
+ @Override
1046
+ public void getBooleanv(int value, IntBuffer data) {
1047
+ if (-1 < value) {
1048
+ if (byteBuffer.capacity() < data.capacity()) {
1049
+ byteBuffer = allocateDirectByteBuffer(data.capacity());
1050
+ }
1051
+ gl.glGetBooleanv(value, byteBuffer);
1052
+ for (int i = 0; i < data.capacity(); i++) {
1053
+ data.put(i, byteBuffer.get(i));
1054
+ }
1055
+ } else {
1056
+ fillIntBuffer(data, 0, data.capacity() - 1, 0);
1057
+ }
1058
+ }
169
1059
 
170
- @Override
171
- protected void registerListeners() {}
1060
+ @Override
1061
+ public void getIntegerv(int value, IntBuffer data) {
1062
+ if (-1 < value) {
1063
+ gl.glGetIntegerv(value, data);
1064
+ } else {
1065
+ fillIntBuffer(data, 0, data.capacity() - 1, 0);
1066
+ }
1067
+ }
172
1068
 
1069
+ @Override
1070
+ public void getFloatv(int value, FloatBuffer data) {
1071
+ if (-1 < value) {
1072
+ gl.glGetFloatv(value, data);
1073
+ } else {
1074
+ fillFloatBuffer(data, 0, data.capacity() - 1, 0);
1075
+ }
1076
+ }
173
1077
 
174
- static public void setIcon(String... icons) {
175
- PJOGL.icons = new String[icons.length];
176
- PApplet.arrayCopy(icons, PJOGL.icons);
177
- }
1078
+ @Override
1079
+ public boolean isEnabled(int value) {
1080
+ return gl.glIsEnabled(value);
1081
+ }
178
1082
 
1083
+ @Override
1084
+ public String getString(int name) {
1085
+ return gl.glGetString(name);
1086
+ }
179
1087
 
180
- ///////////////////////////////////////////////////////////////
1088
+ ///////////////////////////////////////////////////////////
1089
+ // Error Handling
1090
+ @Override
1091
+ public int getError() {
1092
+ return gl.glGetError();
1093
+ }
181
1094
 
182
- // Public methods to get/set renderer's properties
1095
+ @Override
1096
+ public String errorString(int err) {
1097
+ return glu.gluErrorString(err);
1098
+ }
183
1099
 
1100
+ //////////////////////////////////////////////////////////////////////////////
1101
+ // Buffer Objects
1102
+ @Override
1103
+ public void genBuffers(int n, IntBuffer buffers) {
1104
+ gl.glGenBuffers(n, buffers);
1105
+ }
184
1106
 
185
- public void setCaps(GLCapabilities caps) {
186
- reqNumSamples = caps.getNumSamples();
187
- capabilities = caps;
188
- }
1107
+ @Override
1108
+ public void deleteBuffers(int n, IntBuffer buffers) {
1109
+ gl.glDeleteBuffers(n, buffers);
1110
+ }
189
1111
 
1112
+ @Override
1113
+ public void bindBuffer(int target, int buffer) {
1114
+ gl.glBindBuffer(target, buffer);
1115
+ }
190
1116
 
191
- public GLCapabilitiesImmutable getCaps() {
192
- return capabilities;
193
- }
1117
+ @Override
1118
+ public void bufferData(int target, int size, Buffer data, int usage) {
1119
+ gl.glBufferData(target, size, data, usage);
1120
+ }
194
1121
 
1122
+ @Override
1123
+ public void bufferSubData(int target, int offset, int size, Buffer data) {
1124
+ gl.glBufferSubData(target, offset, size, data);
1125
+ }
195
1126
 
196
- public void setFps(float fps) {
197
- if (!setFps || targetFps != fps) {
198
- if (60 < fps) {
199
- // Disables v-sync
200
- gl.setSwapInterval(0);
201
- } else if (30 < fps) {
202
- gl.setSwapInterval(1);
203
- } else {
204
- gl.setSwapInterval(2);
205
- }
206
- targetFps = currentFps = fps;
207
- setFps = true;
1127
+ @Override
1128
+ public void isBuffer(int buffer) {
1129
+ gl.glIsBuffer(buffer);
208
1130
  }
209
- }
210
1131
 
1132
+ @Override
1133
+ public void getBufferParameteriv(int target, int value, IntBuffer data) {
1134
+ gl.glGetBufferParameteriv(target, value, data);
1135
+ }
211
1136
 
212
- @Override
213
- protected int getDepthBits() {
214
- return capabilities.getDepthBits();
215
- }
1137
+ @Override
1138
+ public ByteBuffer mapBuffer(int target, int access) {
1139
+ return gl2.glMapBuffer(target, access);
1140
+ }
216
1141
 
1142
+ @Override
1143
+ public ByteBuffer mapBufferRange(int target, int offset, int length, int access) {
1144
+ if (gl2x != null) {
1145
+ return gl2x.glMapBufferRange(target, offset, length, access);
1146
+ } else if (gl3 != null) {
1147
+ return gl3.glMapBufferRange(target, offset, length, access);
1148
+ } else {
1149
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glMapBufferRange()"));
1150
+ }
1151
+ }
217
1152
 
218
- @Override
219
- protected int getStencilBits() {
220
- return capabilities.getStencilBits();
221
- }
1153
+ @Override
1154
+ public void unmapBuffer(int target) {
1155
+ gl2.glUnmapBuffer(target);
1156
+ }
222
1157
 
1158
+ //////////////////////////////////////////////////////////////////////////////
1159
+ // Synchronization
1160
+ @Override
1161
+ public long fenceSync(int condition, int flags) {
1162
+ if (gl3es3 != null) {
1163
+ return gl3es3.glFenceSync(condition, flags);
1164
+ } else {
1165
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "fenceSync()"));
1166
+ }
1167
+ }
223
1168
 
224
- @Override
225
- protected float getPixelScale() {
226
- PSurface surf = sketch.getSurface();
227
- if (surf == null) {
228
- return graphics.pixelDensity;
229
- } else if (surf instanceof PSurfaceJOGL) {
230
- return ((PSurfaceJOGL)surf).getPixelScale();
231
- } else {
232
- throw new RuntimeException("Renderer cannot find a JOGL surface");
1169
+ @Override
1170
+ public void deleteSync(long sync) {
1171
+ if (gl3es3 != null) {
1172
+ gl3es3.glDeleteSync(sync);
1173
+ } else {
1174
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "deleteSync()"));
1175
+ }
233
1176
  }
234
- }
235
1177
 
1178
+ @Override
1179
+ public int clientWaitSync(long sync, int flags, long timeout) {
1180
+ if (gl3es3 != null) {
1181
+ return gl3es3.glClientWaitSync(sync, flags, timeout);
1182
+ } else {
1183
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "clientWaitSync()"));
1184
+ }
1185
+ }
236
1186
 
237
- @Override
238
- protected void getGL(PGL pgl) {
239
- PJOGL pjogl = (PJOGL)pgl;
1187
+ //////////////////////////////////////////////////////////////////////////////
1188
+ // Viewport and Clipping
1189
+ @Override
1190
+ public void depthRangef(float n, float f) {
1191
+ gl.glDepthRangef(n, f);
1192
+ }
240
1193
 
241
- this.drawable = pjogl.drawable;
242
- this.context = pjogl.context;
243
- this.glContext = pjogl.glContext;
244
- setThread(pjogl.glThread);
1194
+ @Override
1195
+ public void viewport(int x, int y, int w, int h) {
1196
+ float scale = getPixelScale();
1197
+ viewportImpl((int) scale * x, (int) (scale * y), (int) (scale * w), (int) (scale * h));
1198
+ }
245
1199
 
246
- this.gl = pjogl.gl;
247
- this.gl2 = pjogl.gl2;
248
- this.gl2x = pjogl.gl2x;
249
- this.gl3 = pjogl.gl3;
250
- this.gl3es3 = pjogl.gl3es3;
251
- }
1200
+ @Override
1201
+ protected void viewportImpl(int x, int y, int w, int h) {
1202
+ gl.glViewport(x, y, w, h);
1203
+ }
252
1204
 
1205
+ //////////////////////////////////////////////////////////////////////////////
1206
+ // Reading Pixels
1207
+ @Override
1208
+ protected void readPixelsImpl(int x, int y, int width, int height, int format, int type, Buffer buffer) {
1209
+ gl.glReadPixels(x, y, width, height, format, type, buffer);
1210
+ }
253
1211
 
254
- public void getGL(GLAutoDrawable glDrawable) {
255
- context = glDrawable.getContext();
256
- glContext = context.hashCode();
257
- setThread(Thread.currentThread());
1212
+ @Override
1213
+ protected void readPixelsImpl(int x, int y, int width, int height, int format, int type, long offset) {
1214
+ gl.glReadPixels(x, y, width, height, format, type, 0);
1215
+ }
258
1216
 
259
- gl = context.getGL();
260
- gl2 = gl.getGL2ES2();
261
- try {
262
- gl2x = gl.getGL2();
263
- } catch (com.jogamp.opengl.GLException e) {
264
- gl2x = null;
1217
+ //////////////////////////////////////////////////////////////////////////////
1218
+ // Vertices
1219
+ @Override
1220
+ public void vertexAttrib1f(int index, float value) {
1221
+ gl2.glVertexAttrib1f(index, value);
265
1222
  }
266
- try {
267
- gl3 = gl.getGL2GL3();
268
- } catch (com.jogamp.opengl.GLException e) {
269
- gl3 = null;
1223
+
1224
+ @Override
1225
+ public void vertexAttrib2f(int index, float value0, float value1) {
1226
+ gl2.glVertexAttrib2f(index, value0, value1);
270
1227
  }
271
- try {
272
- gl3es3 = gl.getGL3ES3();
273
- } catch (com.jogamp.opengl.GLException e) {
274
- gl3es3 = null;
1228
+
1229
+ @Override
1230
+ public void vertexAttrib3f(int index, float value0, float value1, float value2) {
1231
+ gl2.glVertexAttrib3f(index, value0, value1, value2);
275
1232
  }
276
- }
277
1233
 
1234
+ @Override
1235
+ public void vertexAttrib4f(int index, float value0, float value1, float value2, float value3) {
1236
+ gl2.glVertexAttrib4f(index, value0, value1, value2, value3);
1237
+ }
278
1238
 
279
- @Override
280
- protected boolean canDraw() { return true; }
281
-
282
-
283
- @Override
284
- protected void requestFocus() {}
285
-
286
-
287
- @Override
288
- protected void requestDraw() {}
289
-
290
-
291
- @Override
292
- protected void swapBuffers() {
293
- PSurfaceJOGL surf = (PSurfaceJOGL)sketch.getSurface();
294
- surf.window.swapBuffers();
295
- }
296
-
297
-
298
- @Override
299
- protected void initFBOLayer() {
300
- if (0 < sketch.frameCount) {
301
- if (isES()) initFBOLayerES();
302
- else initFBOLayerGL();
303
- }
304
- }
305
-
306
-
307
- private void initFBOLayerES() {
308
- IntBuffer buf = allocateDirectIntBuffer(fboWidth * fboHeight);
309
-
310
- if (hasReadBuffer()) readBuffer(BACK);
311
- readPixelsImpl(0, 0, fboWidth, fboHeight, RGBA, UNSIGNED_BYTE, buf);
312
- bindTexture(TEXTURE_2D, glColorTex.get(frontTex));
313
- texSubImage2D(TEXTURE_2D, 0, 0, 0, fboWidth, fboHeight, RGBA, UNSIGNED_BYTE, buf);
314
-
315
- bindTexture(TEXTURE_2D, glColorTex.get(backTex));
316
- texSubImage2D(TEXTURE_2D, 0, 0, 0, fboWidth, fboHeight, RGBA, UNSIGNED_BYTE, buf);
317
-
318
- bindTexture(TEXTURE_2D, 0);
319
- bindFramebufferImpl(FRAMEBUFFER, 0);
320
- }
321
-
322
-
323
- private void initFBOLayerGL() {
324
- // Copy the contents of the front and back screen buffers to the textures
325
- // of the FBO, so they are properly initialized. Note that the front buffer
326
- // of the default framebuffer (the screen) contains the previous frame:
327
- // https://www.opengl.org/wiki/Default_Framebuffer
328
- // so it is copied to the front texture of the FBO layer:
329
- if (pclearColor || 0 < pgeomCount || !sketch.isLooping()) {
330
- if (hasReadBuffer()) readBuffer(FRONT);
331
- } else {
332
- // ...except when the previous frame has not been cleared and nothing was
333
- // rendered while looping. In this case the back buffer, which holds the
334
- // initial state of the previous frame, still contains the most up-to-date
335
- // screen state.
336
- readBuffer(BACK);
337
- }
338
- bindFramebufferImpl(DRAW_FRAMEBUFFER, glColorFbo.get(0));
339
- framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0,
340
- TEXTURE_2D, glColorTex.get(frontTex), 0);
341
- if (hasDrawBuffer()) drawBuffer(COLOR_ATTACHMENT0);
342
- blitFramebuffer(0, 0, fboWidth, fboHeight,
343
- 0, 0, fboWidth, fboHeight,
344
- COLOR_BUFFER_BIT, NEAREST);
345
-
346
- readBuffer(BACK);
347
- bindFramebufferImpl(DRAW_FRAMEBUFFER, glColorFbo.get(0));
348
- framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0,
349
- TEXTURE_2D, glColorTex.get(backTex), 0);
350
- drawBuffer(COLOR_ATTACHMENT0);
351
- blitFramebuffer(0, 0, fboWidth, fboHeight,
352
- 0, 0, fboWidth, fboHeight,
353
- COLOR_BUFFER_BIT, NEAREST);
354
-
355
- bindFramebufferImpl(FRAMEBUFFER, 0);
356
- }
357
-
358
-
359
- @Override
360
- protected void beginGL() {
361
- PMatrix3D proj = graphics.projection;
362
- PMatrix3D mdl = graphics.modelview;
363
- if (gl2x != null) {
364
- if (projMatrix == null) {
365
- projMatrix = new float[16];
366
- }
367
- gl2x.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
368
- projMatrix[ 0] = proj.m00;
369
- projMatrix[ 1] = proj.m10;
370
- projMatrix[ 2] = proj.m20;
371
- projMatrix[ 3] = proj.m30;
372
- projMatrix[ 4] = proj.m01;
373
- projMatrix[ 5] = proj.m11;
374
- projMatrix[ 6] = proj.m21;
375
- projMatrix[ 7] = proj.m31;
376
- projMatrix[ 8] = proj.m02;
377
- projMatrix[ 9] = proj.m12;
378
- projMatrix[10] = proj.m22;
379
- projMatrix[11] = proj.m32;
380
- projMatrix[12] = proj.m03;
381
- projMatrix[13] = proj.m13;
382
- projMatrix[14] = proj.m23;
383
- projMatrix[15] = proj.m33;
384
- gl2x.glLoadMatrixf(projMatrix, 0);
385
-
386
- if (mvMatrix == null) {
387
- mvMatrix = new float[16];
388
- }
389
- gl2x.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
390
- mvMatrix[ 0] = mdl.m00;
391
- mvMatrix[ 1] = mdl.m10;
392
- mvMatrix[ 2] = mdl.m20;
393
- mvMatrix[ 3] = mdl.m30;
394
- mvMatrix[ 4] = mdl.m01;
395
- mvMatrix[ 5] = mdl.m11;
396
- mvMatrix[ 6] = mdl.m21;
397
- mvMatrix[ 7] = mdl.m31;
398
- mvMatrix[ 8] = mdl.m02;
399
- mvMatrix[ 9] = mdl.m12;
400
- mvMatrix[10] = mdl.m22;
401
- mvMatrix[11] = mdl.m32;
402
- mvMatrix[12] = mdl.m03;
403
- mvMatrix[13] = mdl.m13;
404
- mvMatrix[14] = mdl.m23;
405
- mvMatrix[15] = mdl.m33;
406
- gl2x.glLoadMatrixf(mvMatrix, 0);
407
- }
408
- }
409
-
410
-
411
- @Override
412
- protected boolean hasFBOs() {
413
- if (context.hasBasicFBOSupport()) return true;
414
- else return super.hasFBOs();
415
- }
416
-
417
-
418
- @Override
419
- protected boolean hasShaders() {
420
- if (context.hasGLSL()) return true;
421
- else return super.hasShaders();
422
- }
423
-
424
-
425
- public void init(GLAutoDrawable glDrawable) {
426
- capabilities = glDrawable.getChosenGLCapabilities();
427
- if (!hasFBOs()) {
428
- throw new RuntimeException(MISSING_FBO_ERROR);
429
- }
430
- if (!hasShaders()) {
431
- throw new RuntimeException(MISSING_GLSL_ERROR);
432
- }
433
- }
434
-
435
-
436
- ///////////////////////////////////////////////////////////
437
-
438
- // Utility functions
439
-
440
-
441
- @Override
442
- protected void enableTexturing(int target) {
443
- if (target == TEXTURE_2D) {
444
- texturingTargets[0] = true;
445
- } else if (target == TEXTURE_RECTANGLE) {
446
- texturingTargets[1] = true;
447
- }
448
- }
449
-
450
-
451
- @Override
452
- protected void disableTexturing(int target) {
453
- if (target == TEXTURE_2D) {
454
- texturingTargets[0] = false;
455
- } else if (target == TEXTURE_RECTANGLE) {
456
- texturingTargets[1] = false;
1239
+ @Override
1240
+ public void vertexAttrib1fv(int index, FloatBuffer values) {
1241
+ gl2.glVertexAttrib1fv(index, values);
457
1242
  }
458
- }
459
-
460
-
461
- /**
462
- * Convenience method to get a legit FontMetrics object. Where possible,
463
- * override this any renderer subclass so that you're not using what's
464
- * returned by getDefaultToolkit() to get your metrics.
465
- */
466
- @SuppressWarnings("deprecation")
467
- private FontMetrics getFontMetrics(Font font) { // ignore
468
- return Toolkit.getDefaultToolkit().getFontMetrics(font);
469
- }
470
1243
 
1244
+ @Override
1245
+ public void vertexAttrib2fv(int index, FloatBuffer values) {
1246
+ gl2.glVertexAttrib2fv(index, values);
1247
+ }
471
1248
 
472
- /**
473
- * Convenience method to jump through some Java2D hoops and get an FRC.
474
- */
475
- private FontRenderContext getFontRenderContext(Font font) { // ignore
476
- return getFontMetrics(font).getFontRenderContext();
477
- }
1249
+ @Override
1250
+ public void vertexAttrib3fv(int index, FloatBuffer values) {
1251
+ gl2.glVertexAttrib3fv(index, values);
1252
+ }
478
1253
 
1254
+ @Override
1255
+ public void vertexAttrib4fv(int index, FloatBuffer values) {
1256
+ gl2.glVertexAttrib4fv(index, values);
1257
+ }
479
1258
 
480
- @Override
481
- protected int getFontAscent(Object font) {
482
- return getFontMetrics((Font) font).getAscent();
483
- }
1259
+ @Override
1260
+ public void vertexAttribPointer(int index, int size, int type, boolean normalized, int stride, int offset) {
1261
+ gl2.glVertexAttribPointer(index, size, type, normalized, stride, offset);
1262
+ }
484
1263
 
1264
+ @Override
1265
+ public void enableVertexAttribArray(int index) {
1266
+ gl2.glEnableVertexAttribArray(index);
1267
+ }
485
1268
 
486
- @Override
487
- protected int getFontDescent(Object font) {
488
- return getFontMetrics((Font) font).getDescent();
489
- }
1269
+ @Override
1270
+ public void disableVertexAttribArray(int index) {
1271
+ gl2.glDisableVertexAttribArray(index);
1272
+ }
490
1273
 
1274
+ @Override
1275
+ public void drawArraysImpl(int mode, int first, int count) {
1276
+ gl.glDrawArrays(mode, first, count);
1277
+ }
491
1278
 
492
- @Override
493
- protected int getTextWidth(Object font, char[] buffer, int start, int stop) {
494
- // maybe should use one of the newer/fancier functions for this?
495
- int length = stop - start;
496
- FontMetrics metrics = getFontMetrics((Font) font);
497
- return metrics.charsWidth(buffer, start, length);
498
- }
1279
+ @Override
1280
+ public void drawElementsImpl(int mode, int count, int type, int offset) {
1281
+ gl.glDrawElements(mode, count, type, offset);
1282
+ }
499
1283
 
1284
+ //////////////////////////////////////////////////////////////////////////////
1285
+ // Rasterization
1286
+ @Override
1287
+ public void lineWidth(float width) {
1288
+ gl.glLineWidth(width);
1289
+ }
500
1290
 
501
- @Override
502
- protected Object getDerivedFont(Object font, float size) {
503
- return ((Font) font).deriveFont(size);
504
- }
1291
+ @Override
1292
+ public void frontFace(int dir) {
1293
+ gl.glFrontFace(dir);
1294
+ }
505
1295
 
1296
+ @Override
1297
+ public void cullFace(int mode) {
1298
+ gl.glCullFace(mode);
1299
+ }
506
1300
 
507
- @Override
508
- protected int getGLSLVersion() {
509
- VersionNumber vn = context.getGLSLVersionNumber();
510
- return vn.getMajor() * 100 + vn.getMinor();
511
- }
1301
+ @Override
1302
+ public void polygonOffset(float factor, float units) {
1303
+ gl.glPolygonOffset(factor, units);
1304
+ }
512
1305
 
1306
+ //////////////////////////////////////////////////////////////////////////////
1307
+ // Pixel Rectangles
1308
+ @Override
1309
+ public void pixelStorei(int pname, int param) {
1310
+ gl.glPixelStorei(pname, param);
1311
+ }
513
1312
 
514
- @Override
515
- protected String getGLSLVersionSuffix() {
516
- VersionNumber vn = context.getGLSLVersionNumber();
517
- if (context.isGLESProfile() && 1 < vn.getMajor()) {
518
- return " es";
519
- } else {
520
- return "";
1313
+ ///////////////////////////////////////////////////////////
1314
+ // Texturing
1315
+ @Override
1316
+ public void texImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, Buffer data) {
1317
+ gl.glTexImage2D(target, level, internalFormat, width, height, border, format, type, data);
521
1318
  }
522
- }
523
1319
 
1320
+ @Override
1321
+ public void copyTexImage2D(int target, int level, int internalFormat, int x, int y, int width, int height, int border) {
1322
+ gl.glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border);
1323
+ }
524
1324
 
525
- @Override
526
- protected String[] loadVertexShader(String filename) {
527
- return loadVertexShader(filename, getGLSLVersion(), getGLSLVersionSuffix());
528
- }
1325
+ @Override
1326
+ public void texSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int type, Buffer data) {
1327
+ gl.glTexSubImage2D(target, level, xOffset, yOffset, width, height, format, type, data);
1328
+ }
529
1329
 
1330
+ @Override
1331
+ public void copyTexSubImage2D(int target, int level, int xOffset, int yOffset, int x, int y, int width, int height) {
1332
+ gl.glCopyTexSubImage2D(target, level, x, y, xOffset, yOffset, width, height);
1333
+ }
530
1334
 
531
- @Override
532
- protected String[] loadFragmentShader(String filename) {
533
- return loadFragmentShader(filename, getGLSLVersion(), getGLSLVersionSuffix());
534
- }
1335
+ @Override
1336
+ public void compressedTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int imageSize, Buffer data) {
1337
+ gl.glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data);
1338
+ }
535
1339
 
1340
+ @Override
1341
+ public void compressedTexSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int imageSize, Buffer data) {
1342
+ gl.glCompressedTexSubImage2D(target, level, xOffset, yOffset, width, height, format, imageSize, data);
1343
+ }
536
1344
 
537
- @Override
538
- protected String[] loadVertexShader(URL url) {
539
- return loadVertexShader(url, getGLSLVersion(), getGLSLVersionSuffix());
540
- }
1345
+ @Override
1346
+ public void texParameteri(int target, int pname, int param) {
1347
+ gl.glTexParameteri(target, pname, param);
1348
+ }
541
1349
 
1350
+ @Override
1351
+ public void texParameterf(int target, int pname, float param) {
1352
+ gl.glTexParameterf(target, pname, param);
1353
+ }
542
1354
 
543
- @Override
544
- protected String[] loadFragmentShader(URL url) {
545
- return loadFragmentShader(url, getGLSLVersion(), getGLSLVersionSuffix());
546
- }
1355
+ @Override
1356
+ public void texParameteriv(int target, int pname, IntBuffer params) {
1357
+ gl.glTexParameteriv(target, pname, params);
1358
+ }
547
1359
 
1360
+ @Override
1361
+ public void texParameterfv(int target, int pname, FloatBuffer params) {
1362
+ gl.glTexParameterfv(target, pname, params);
1363
+ }
548
1364
 
549
- @Override
550
- protected String[] loadFragmentShader(String filename, int version, String versionSuffix) {
551
- String[] fragSrc0 = sketch.loadStrings(filename);
552
- return preprocessFragmentSource(fragSrc0, version, versionSuffix);
553
- }
1365
+ @Override
1366
+ public void generateMipmap(int target) {
1367
+ gl.glGenerateMipmap(target);
1368
+ }
554
1369
 
1370
+ @Override
1371
+ public void genTextures(int n, IntBuffer textures) {
1372
+ gl.glGenTextures(n, textures);
1373
+ }
555
1374
 
556
- @Override
557
- protected String[] loadVertexShader(String filename, int version, String versionSuffix) {
558
- String[] vertSrc0 = sketch.loadStrings(filename);
559
- return preprocessVertexSource(vertSrc0, version, versionSuffix);
560
- }
1375
+ @Override
1376
+ public void deleteTextures(int n, IntBuffer textures) {
1377
+ gl.glDeleteTextures(n, textures);
1378
+ }
561
1379
 
1380
+ @Override
1381
+ public void getTexParameteriv(int target, int pname, IntBuffer params) {
1382
+ gl.glGetTexParameteriv(target, pname, params);
1383
+ }
562
1384
 
563
- @Override
564
- protected String[] loadFragmentShader(URL url, int version, String versionSuffix) {
565
- try {
566
- String[] fragSrc0 = PApplet.loadStrings(url.openStream());
567
- return preprocessFragmentSource(fragSrc0, version, versionSuffix);
568
- } catch (IOException e) {
569
- PGraphics.showException("Cannot load fragment shader " + url.getFile());
1385
+ @Override
1386
+ public void getTexParameterfv(int target, int pname, FloatBuffer params) {
1387
+ gl.glGetTexParameterfv(target, pname, params);
570
1388
  }
571
- return null;
572
- }
573
1389
 
1390
+ @Override
1391
+ public boolean isTexture(int texture) {
1392
+ return gl.glIsTexture(texture);
1393
+ }
574
1394
 
575
- @Override
576
- protected String[] loadVertexShader(URL url, int version, String versionSuffix) {
577
- try {
578
- String[] vertSrc0 = PApplet.loadStrings(url.openStream());
579
- return preprocessVertexSource(vertSrc0, version, versionSuffix);
580
- } catch (IOException e) {
581
- PGraphics.showException("Cannot load vertex shader " + url.getFile());
1395
+ @Override
1396
+ protected void activeTextureImpl(int texture) {
1397
+ gl.glActiveTexture(texture);
582
1398
  }
583
- return null;
584
- }
585
1399
 
1400
+ @Override
1401
+ protected void bindTextureImpl(int target, int texture) {
1402
+ gl.glBindTexture(target, texture);
1403
+ }
586
1404
 
587
- ///////////////////////////////////////////////////////////
1405
+ ///////////////////////////////////////////////////////////
1406
+ // Shaders and Programs
1407
+ @Override
1408
+ public int createShader(int type) {
1409
+ return gl2.glCreateShader(type);
1410
+ }
588
1411
 
589
- // Tessellator
1412
+ @Override
1413
+ public void shaderSource(int shader, String source) {
1414
+ gl2.glShaderSource(shader, 1, new String[]{source}, (int[]) null, 0);
1415
+ }
590
1416
 
1417
+ @Override
1418
+ public void compileShader(int shader) {
1419
+ gl2.glCompileShader(shader);
1420
+ }
591
1421
 
592
- @Override
593
- protected Tessellator createTessellator(TessellatorCallback callback) {
594
- return new Tessellator(callback);
595
- }
1422
+ @Override
1423
+ public void releaseShaderCompiler() {
1424
+ gl2.glReleaseShaderCompiler();
1425
+ }
596
1426
 
1427
+ @Override
1428
+ public void deleteShader(int shader) {
1429
+ gl2.glDeleteShader(shader);
1430
+ }
597
1431
 
598
- protected static class Tessellator implements PGL.Tessellator {
599
- protected GLUtessellator tess;
600
- protected TessellatorCallback callback;
601
- protected GLUCallback gluCallback;
1432
+ @Override
1433
+ public void shaderBinary(int count, IntBuffer shaders, int binaryFormat, Buffer binary, int length) {
1434
+ gl2.glShaderBinary(count, shaders, binaryFormat, binary, length);
1435
+ }
602
1436
 
603
- public Tessellator(TessellatorCallback callback) {
604
- this.callback = callback;
605
- tess = GLU.gluNewTess();
606
- gluCallback = new GLUCallback();
1437
+ @Override
1438
+ public int createProgram() {
1439
+ return gl2.glCreateProgram();
1440
+ }
607
1441
 
608
- GLU.gluTessCallback(tess, GLU.GLU_TESS_BEGIN, gluCallback);
609
- GLU.gluTessCallback(tess, GLU.GLU_TESS_END, gluCallback);
610
- GLU.gluTessCallback(tess, GLU.GLU_TESS_VERTEX, gluCallback);
611
- GLU.gluTessCallback(tess, GLU.GLU_TESS_COMBINE, gluCallback);
612
- GLU.gluTessCallback(tess, GLU.GLU_TESS_ERROR, gluCallback);
1442
+ @Override
1443
+ public void attachShader(int program, int shader) {
1444
+ gl2.glAttachShader(program, shader);
613
1445
  }
614
1446
 
615
1447
  @Override
616
- public void setCallback(int flag) {
617
- GLU.gluTessCallback(tess, flag, gluCallback);
1448
+ public void detachShader(int program, int shader) {
1449
+ gl2.glDetachShader(program, shader);
618
1450
  }
619
1451
 
620
1452
  @Override
621
- public void setWindingRule(int rule) {
622
- setProperty(GLU.GLU_TESS_WINDING_RULE, rule);
1453
+ public void linkProgram(int program) {
1454
+ gl2.glLinkProgram(program);
623
1455
  }
624
1456
 
625
- public void setProperty(int property, int value) {
626
- GLU.gluTessProperty(tess, property, value);
1457
+ @Override
1458
+ public void useProgram(int program) {
1459
+ gl2.glUseProgram(program);
627
1460
  }
628
1461
 
629
1462
  @Override
630
- public void beginPolygon() {
631
- beginPolygon(null);
1463
+ public void deleteProgram(int program) {
1464
+ gl2.glDeleteProgram(program);
632
1465
  }
633
1466
 
634
1467
  @Override
635
- public void beginPolygon(Object data) {
636
- GLU.gluTessBeginPolygon(tess, data);
1468
+ public String getActiveAttrib(int program, int index, IntBuffer size, IntBuffer type) {
1469
+ int[] tmp = {0, 0, 0};
1470
+ byte[] namebuf = new byte[1024];
1471
+ gl2.glGetActiveAttrib(program, index, 1024, tmp, 0, tmp, 1, tmp, 2, namebuf, 0);
1472
+ size.put(tmp[1]);
1473
+ type.put(tmp[2]);
1474
+ String name = new String(namebuf, 0, tmp[0]);
1475
+ return name;
637
1476
  }
638
1477
 
639
1478
  @Override
640
- public void endPolygon() {
641
- GLU.gluTessEndPolygon(tess);
1479
+ public int getAttribLocation(int program, String name) {
1480
+ return gl2.glGetAttribLocation(program, name);
642
1481
  }
643
1482
 
644
1483
  @Override
645
- public void beginContour() {
646
- GLU.gluTessBeginContour(tess);
1484
+ public void bindAttribLocation(int program, int index, String name) {
1485
+ gl2.glBindAttribLocation(program, index, name);
647
1486
  }
648
1487
 
649
1488
  @Override
650
- public void endContour() {
651
- GLU.gluTessEndContour(tess);
1489
+ public int getUniformLocation(int program, String name) {
1490
+ return gl2.glGetUniformLocation(program, name);
652
1491
  }
653
1492
 
654
1493
  @Override
655
- public void addVertex(double[] v) {
656
- addVertex(v, 0, v);
1494
+ public String getActiveUniform(int program, int index, IntBuffer size, IntBuffer type) {
1495
+ int[] tmp = {0, 0, 0};
1496
+ byte[] namebuf = new byte[1024];
1497
+ gl2.glGetActiveUniform(program, index, 1024, tmp, 0, tmp, 1, tmp, 2, namebuf, 0);
1498
+ size.put(tmp[1]);
1499
+ type.put(tmp[2]);
1500
+ String name = new String(namebuf, 0, tmp[0]);
1501
+ return name;
657
1502
  }
658
1503
 
659
1504
  @Override
660
- public void addVertex(double[] v, int n, Object data) {
661
- GLU.gluTessVertex(tess, v, n, data);
1505
+ public void uniform1i(int location, int value) {
1506
+ gl2.glUniform1i(location, value);
662
1507
  }
663
1508
 
664
- protected class GLUCallback extends GLUtessellatorCallbackAdapter {
665
- @Override
666
- public void begin(int type) {
667
- callback.begin(type);
668
- }
1509
+ @Override
1510
+ public void uniform2i(int location, int value0, int value1) {
1511
+ gl2.glUniform2i(location, value0, value1);
1512
+ }
669
1513
 
670
- @Override
671
- public void end() {
672
- callback.end();
673
- }
1514
+ @Override
1515
+ public void uniform3i(int location, int value0, int value1, int value2) {
1516
+ gl2.glUniform3i(location, value0, value1, value2);
1517
+ }
674
1518
 
675
- @Override
676
- public void vertex(Object data) {
677
- callback.vertex(data);
678
- }
1519
+ @Override
1520
+ public void uniform4i(int location, int value0, int value1, int value2, int value3) {
1521
+ gl2.glUniform4i(location, value0, value1, value2, value3);
1522
+ }
679
1523
 
680
- @Override
681
- public void combine(double[] coords, Object[] data,
682
- float[] weight, Object[] outData) {
683
- callback.combine(coords, data, weight, outData);
684
- }
1524
+ @Override
1525
+ public void uniform1f(int location, float value) {
1526
+ gl2.glUniform1f(location, value);
1527
+ }
685
1528
 
686
- @Override
687
- public void error(int errnum) {
688
- callback.error(errnum);
689
- }
1529
+ @Override
1530
+ public void uniform2f(int location, float value0, float value1) {
1531
+ gl2.glUniform2f(location, value0, value1);
690
1532
  }
691
- }
692
1533
 
1534
+ @Override
1535
+ public void uniform3f(int location, float value0, float value1, float value2) {
1536
+ gl2.glUniform3f(location, value0, value1, value2);
1537
+ }
693
1538
 
694
- @Override
695
- protected String tessError(int err) {
696
- return glu.gluErrorString(err);
697
- }
1539
+ @Override
1540
+ public void uniform4f(int location, float value0, float value1, float value2, float value3) {
1541
+ gl2.glUniform4f(location, value0, value1, value2, value3);
1542
+ }
698
1543
 
1544
+ @Override
1545
+ public void uniform1iv(int location, int count, IntBuffer v) {
1546
+ gl2.glUniform1iv(location, count, v);
1547
+ }
699
1548
 
700
- ///////////////////////////////////////////////////////////
1549
+ @Override
1550
+ public void uniform2iv(int location, int count, IntBuffer v) {
1551
+ gl2.glUniform2iv(location, count, v);
1552
+ }
701
1553
 
702
- // Font outline
1554
+ @Override
1555
+ public void uniform3iv(int location, int count, IntBuffer v) {
1556
+ gl2.glUniform3iv(location, count, v);
1557
+ }
703
1558
 
1559
+ @Override
1560
+ public void uniform4iv(int location, int count, IntBuffer v) {
1561
+ gl2.glUniform4iv(location, count, v);
1562
+ }
704
1563
 
705
- static {
706
- SHAPE_TEXT_SUPPORTED = true;
707
- SEG_MOVETO = PathIterator.SEG_MOVETO;
708
- SEG_LINETO = PathIterator.SEG_LINETO;
709
- SEG_QUADTO = PathIterator.SEG_QUADTO;
710
- SEG_CUBICTO = PathIterator.SEG_CUBICTO;
711
- SEG_CLOSE = PathIterator.SEG_CLOSE;
712
- }
1564
+ @Override
1565
+ public void uniform1fv(int location, int count, FloatBuffer v) {
1566
+ gl2.glUniform1fv(location, count, v);
1567
+ }
713
1568
 
1569
+ @Override
1570
+ public void uniform2fv(int location, int count, FloatBuffer v) {
1571
+ gl2.glUniform2fv(location, count, v);
1572
+ }
714
1573
 
715
- @Override
716
- protected FontOutline createFontOutline(char ch, Object font) {
717
- return new FontOutline(ch, (Font) font);
718
- }
1574
+ @Override
1575
+ public void uniform3fv(int location, int count, FloatBuffer v) {
1576
+ gl2.glUniform3fv(location, count, v);
1577
+ }
719
1578
 
1579
+ @Override
1580
+ public void uniform4fv(int location, int count, FloatBuffer v) {
1581
+ gl2.glUniform4fv(location, count, v);
1582
+ }
720
1583
 
721
- protected class FontOutline implements PGL.FontOutline {
722
- PathIterator iter;
1584
+ @Override
1585
+ public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer mat) {
1586
+ gl2.glUniformMatrix2fv(location, count, transpose, mat);
1587
+ }
723
1588
 
724
- public FontOutline(char ch, Font font) {
725
- char textArray[] = new char[] { ch };
726
- FontRenderContext frc = getFontRenderContext(font);
727
- GlyphVector gv = font.createGlyphVector(frc, textArray);
728
- Shape shp = gv.getOutline();
729
- iter = shp.getPathIterator(null);
1589
+ @Override
1590
+ public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer mat) {
1591
+ gl2.glUniformMatrix3fv(location, count, transpose, mat);
730
1592
  }
731
1593
 
732
- public boolean isDone() {
733
- return iter.isDone();
1594
+ @Override
1595
+ public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer mat) {
1596
+ gl2.glUniformMatrix4fv(location, count, transpose, mat);
734
1597
  }
735
1598
 
736
- public int currentSegment(float coords[]) {
737
- return iter.currentSegment(coords);
1599
+ @Override
1600
+ public void validateProgram(int program) {
1601
+ gl2.glValidateProgram(program);
738
1602
  }
739
1603
 
740
- public void next() {
741
- iter.next();
1604
+ @Override
1605
+ public boolean isShader(int shader) {
1606
+ return gl2.glIsShader(shader);
742
1607
  }
743
- }
744
1608
 
1609
+ @Override
1610
+ public void getShaderiv(int shader, int pname, IntBuffer params) {
1611
+ gl2.glGetShaderiv(shader, pname, params);
1612
+ }
745
1613
 
746
- ///////////////////////////////////////////////////////////
1614
+ @Override
1615
+ public void getAttachedShaders(int program, int maxCount, IntBuffer count, IntBuffer shaders) {
1616
+ gl2.glGetAttachedShaders(program, maxCount, count, shaders);
1617
+ }
747
1618
 
748
- // Constants
1619
+ @Override
1620
+ public String getShaderInfoLog(int shader) {
1621
+ int[] val = {0};
1622
+ gl2.glGetShaderiv(shader, GL2ES2.GL_INFO_LOG_LENGTH, val, 0);
1623
+ int length = val[0];
1624
+
1625
+ byte[] log = new byte[length];
1626
+ gl2.glGetShaderInfoLog(shader, length, val, 0, log, 0);
1627
+ return new String(log);
1628
+ }
749
1629
 
750
- static {
751
- FALSE = GL.GL_FALSE;
752
- TRUE = GL.GL_TRUE;
1630
+ @Override
1631
+ public String getShaderSource(int shader) {
1632
+ int[] len = {0};
1633
+ byte[] buf = new byte[1024];
1634
+ gl2.glGetShaderSource(shader, 1024, len, 0, buf, 0);
1635
+ return new String(buf, 0, len[0]);
1636
+ }
753
1637
 
754
- INT = GL2ES2.GL_INT;
755
- BYTE = GL.GL_BYTE;
756
- SHORT = GL.GL_SHORT;
757
- FLOAT = GL.GL_FLOAT;
758
- BOOL = GL2ES2.GL_BOOL;
759
- UNSIGNED_INT = GL.GL_UNSIGNED_INT;
760
- UNSIGNED_BYTE = GL.GL_UNSIGNED_BYTE;
761
- UNSIGNED_SHORT = GL.GL_UNSIGNED_SHORT;
1638
+ @Override
1639
+ public void getShaderPrecisionFormat(int shaderType, int precisionType, IntBuffer range, IntBuffer precision) {
1640
+ gl2.glGetShaderPrecisionFormat(shaderType, precisionType, range, precision);
1641
+ }
762
1642
 
763
- RGB = GL.GL_RGB;
764
- RGBA = GL.GL_RGBA;
765
- ALPHA = GL.GL_ALPHA;
766
- LUMINANCE = GL.GL_LUMINANCE;
767
- LUMINANCE_ALPHA = GL.GL_LUMINANCE_ALPHA;
1643
+ @Override
1644
+ public void getVertexAttribfv(int index, int pname, FloatBuffer params) {
1645
+ gl2.glGetVertexAttribfv(index, pname, params);
1646
+ }
768
1647
 
769
- UNSIGNED_SHORT_5_6_5 = GL.GL_UNSIGNED_SHORT_5_6_5;
770
- UNSIGNED_SHORT_4_4_4_4 = GL.GL_UNSIGNED_SHORT_4_4_4_4;
771
- UNSIGNED_SHORT_5_5_5_1 = GL.GL_UNSIGNED_SHORT_5_5_5_1;
1648
+ @Override
1649
+ public void getVertexAttribiv(int index, int pname, IntBuffer params) {
1650
+ gl2.glGetVertexAttribiv(index, pname, params);
1651
+ }
772
1652
 
773
- RGBA4 = GL.GL_RGBA4;
774
- RGB5_A1 = GL.GL_RGB5_A1;
775
- RGB565 = GL.GL_RGB565;
776
- RGB8 = GL.GL_RGB8;
777
- RGBA8 = GL.GL_RGBA8;
778
- ALPHA8 = GL.GL_ALPHA8;
1653
+ @Override
1654
+ public void getVertexAttribPointerv(int index, int pname, ByteBuffer data) {
1655
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glGetVertexAttribPointerv()"));
1656
+ }
779
1657
 
780
- READ_ONLY = GL2ES3.GL_READ_ONLY;
781
- WRITE_ONLY = GL.GL_WRITE_ONLY;
782
- READ_WRITE = GL2ES3.GL_READ_WRITE;
1658
+ @Override
1659
+ public void getUniformfv(int program, int location, FloatBuffer params) {
1660
+ gl2.glGetUniformfv(program, location, params);
1661
+ }
783
1662
 
784
- TESS_WINDING_NONZERO = GLU.GLU_TESS_WINDING_NONZERO;
785
- TESS_WINDING_ODD = GLU.GLU_TESS_WINDING_ODD;
786
- TESS_EDGE_FLAG = GLU.GLU_TESS_EDGE_FLAG;
1663
+ @Override
1664
+ public void getUniformiv(int program, int location, IntBuffer params) {
1665
+ gl2.glGetUniformiv(program, location, params);
1666
+ }
787
1667
 
788
- GENERATE_MIPMAP_HINT = GL.GL_GENERATE_MIPMAP_HINT;
789
- FASTEST = GL.GL_FASTEST;
790
- NICEST = GL.GL_NICEST;
791
- DONT_CARE = GL.GL_DONT_CARE;
1668
+ @Override
1669
+ public boolean isProgram(int program) {
1670
+ return gl2.glIsProgram(program);
1671
+ }
792
1672
 
793
- VENDOR = GL.GL_VENDOR;
794
- RENDERER = GL.GL_RENDERER;
795
- VERSION = GL.GL_VERSION;
796
- EXTENSIONS = GL.GL_EXTENSIONS;
797
- SHADING_LANGUAGE_VERSION = GL2ES2.GL_SHADING_LANGUAGE_VERSION;
1673
+ @Override
1674
+ public void getProgramiv(int program, int pname, IntBuffer params) {
1675
+ gl2.glGetProgramiv(program, pname, params);
1676
+ }
798
1677
 
799
- MAX_SAMPLES = GL.GL_MAX_SAMPLES;
800
- SAMPLES = GL.GL_SAMPLES;
1678
+ @Override
1679
+ public String getProgramInfoLog(int program) {
1680
+ int[] val = {0};
1681
+ gl2.glGetProgramiv(program, GL2ES2.GL_INFO_LOG_LENGTH, val, 0);
1682
+ int length = val[0];
1683
+
1684
+ if (0 < length) {
1685
+ byte[] log = new byte[length];
1686
+ gl2.glGetProgramInfoLog(program, length, val, 0, log, 0);
1687
+ return new String(log);
1688
+ } else {
1689
+ return "Unknown error";
1690
+ }
1691
+ }
801
1692
 
802
- ALIASED_LINE_WIDTH_RANGE = GL.GL_ALIASED_LINE_WIDTH_RANGE;
803
- ALIASED_POINT_SIZE_RANGE = GL.GL_ALIASED_POINT_SIZE_RANGE;
804
-
805
- DEPTH_BITS = GL.GL_DEPTH_BITS;
806
- STENCIL_BITS = GL.GL_STENCIL_BITS;
807
-
808
- CCW = GL.GL_CCW;
809
- CW = GL.GL_CW;
810
-
811
- VIEWPORT = GL.GL_VIEWPORT;
812
-
813
- ARRAY_BUFFER = GL.GL_ARRAY_BUFFER;
814
- ELEMENT_ARRAY_BUFFER = GL.GL_ELEMENT_ARRAY_BUFFER;
815
- PIXEL_PACK_BUFFER = GL2ES3.GL_PIXEL_PACK_BUFFER;
816
-
817
- MAX_VERTEX_ATTRIBS = GL2ES2.GL_MAX_VERTEX_ATTRIBS;
818
-
819
- STATIC_DRAW = GL.GL_STATIC_DRAW;
820
- DYNAMIC_DRAW = GL.GL_DYNAMIC_DRAW;
821
- STREAM_DRAW = GL2ES2.GL_STREAM_DRAW;
822
- STREAM_READ = GL2ES3.GL_STREAM_READ;
823
-
824
- BUFFER_SIZE = GL.GL_BUFFER_SIZE;
825
- BUFFER_USAGE = GL.GL_BUFFER_USAGE;
826
-
827
- POINTS = GL.GL_POINTS;
828
- LINE_STRIP = GL.GL_LINE_STRIP;
829
- LINE_LOOP = GL.GL_LINE_LOOP;
830
- LINES = GL.GL_LINES;
831
- TRIANGLE_FAN = GL.GL_TRIANGLE_FAN;
832
- TRIANGLE_STRIP = GL.GL_TRIANGLE_STRIP;
833
- TRIANGLES = GL.GL_TRIANGLES;
834
-
835
- CULL_FACE = GL.GL_CULL_FACE;
836
- FRONT = GL.GL_FRONT;
837
- BACK = GL.GL_BACK;
838
- FRONT_AND_BACK = GL.GL_FRONT_AND_BACK;
839
-
840
- POLYGON_OFFSET_FILL = GL.GL_POLYGON_OFFSET_FILL;
841
-
842
- UNPACK_ALIGNMENT = GL.GL_UNPACK_ALIGNMENT;
843
- PACK_ALIGNMENT = GL.GL_PACK_ALIGNMENT;
844
-
845
- TEXTURE_2D = GL.GL_TEXTURE_2D;
846
- TEXTURE_RECTANGLE = GL2GL3.GL_TEXTURE_RECTANGLE;
847
-
848
- TEXTURE_BINDING_2D = GL.GL_TEXTURE_BINDING_2D;
849
- TEXTURE_BINDING_RECTANGLE = GL2GL3.GL_TEXTURE_BINDING_RECTANGLE;
850
-
851
- MAX_TEXTURE_SIZE = GL.GL_MAX_TEXTURE_SIZE;
852
- TEXTURE_MAX_ANISOTROPY = GL.GL_TEXTURE_MAX_ANISOTROPY_EXT;
853
- MAX_TEXTURE_MAX_ANISOTROPY = GL.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT;
854
-
855
- MAX_VERTEX_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS;
856
- MAX_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_TEXTURE_IMAGE_UNITS;
857
- MAX_COMBINED_TEXTURE_IMAGE_UNITS = GL2ES2.GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS;
858
-
859
- NUM_COMPRESSED_TEXTURE_FORMATS = GL.GL_NUM_COMPRESSED_TEXTURE_FORMATS;
860
- COMPRESSED_TEXTURE_FORMATS = GL.GL_COMPRESSED_TEXTURE_FORMATS;
861
-
862
- NEAREST = GL.GL_NEAREST;
863
- LINEAR = GL.GL_LINEAR;
864
- LINEAR_MIPMAP_NEAREST = GL.GL_LINEAR_MIPMAP_NEAREST;
865
- LINEAR_MIPMAP_LINEAR = GL.GL_LINEAR_MIPMAP_LINEAR;
866
-
867
- CLAMP_TO_EDGE = GL.GL_CLAMP_TO_EDGE;
868
- REPEAT = GL.GL_REPEAT;
869
-
870
- TEXTURE0 = GL.GL_TEXTURE0;
871
- TEXTURE1 = GL.GL_TEXTURE1;
872
- TEXTURE2 = GL.GL_TEXTURE2;
873
- TEXTURE3 = GL.GL_TEXTURE3;
874
- TEXTURE_MIN_FILTER = GL.GL_TEXTURE_MIN_FILTER;
875
- TEXTURE_MAG_FILTER = GL.GL_TEXTURE_MAG_FILTER;
876
- TEXTURE_WRAP_S = GL.GL_TEXTURE_WRAP_S;
877
- TEXTURE_WRAP_T = GL.GL_TEXTURE_WRAP_T;
878
- TEXTURE_WRAP_R = GL2ES2.GL_TEXTURE_WRAP_R;
879
-
880
- TEXTURE_CUBE_MAP = GL.GL_TEXTURE_CUBE_MAP;
881
- TEXTURE_CUBE_MAP_POSITIVE_X = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_X;
882
- TEXTURE_CUBE_MAP_POSITIVE_Y = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
883
- TEXTURE_CUBE_MAP_POSITIVE_Z = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
884
- TEXTURE_CUBE_MAP_NEGATIVE_X = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
885
- TEXTURE_CUBE_MAP_NEGATIVE_Y = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
886
- TEXTURE_CUBE_MAP_NEGATIVE_Z = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
887
-
888
- VERTEX_SHADER = GL2ES2.GL_VERTEX_SHADER;
889
- FRAGMENT_SHADER = GL2ES2.GL_FRAGMENT_SHADER;
890
- INFO_LOG_LENGTH = GL2ES2.GL_INFO_LOG_LENGTH;
891
- SHADER_SOURCE_LENGTH = GL2ES2.GL_SHADER_SOURCE_LENGTH;
892
- COMPILE_STATUS = GL2ES2.GL_COMPILE_STATUS;
893
- LINK_STATUS = GL2ES2.GL_LINK_STATUS;
894
- VALIDATE_STATUS = GL2ES2.GL_VALIDATE_STATUS;
895
- SHADER_TYPE = GL2ES2.GL_SHADER_TYPE;
896
- DELETE_STATUS = GL2ES2.GL_DELETE_STATUS;
897
-
898
- FLOAT_VEC2 = GL2ES2.GL_FLOAT_VEC2;
899
- FLOAT_VEC3 = GL2ES2.GL_FLOAT_VEC3;
900
- FLOAT_VEC4 = GL2ES2.GL_FLOAT_VEC4;
901
- FLOAT_MAT2 = GL2ES2.GL_FLOAT_MAT2;
902
- FLOAT_MAT3 = GL2ES2.GL_FLOAT_MAT3;
903
- FLOAT_MAT4 = GL2ES2.GL_FLOAT_MAT4;
904
- INT_VEC2 = GL2ES2.GL_INT_VEC2;
905
- INT_VEC3 = GL2ES2.GL_INT_VEC3;
906
- INT_VEC4 = GL2ES2.GL_INT_VEC4;
907
- BOOL_VEC2 = GL2ES2.GL_BOOL_VEC2;
908
- BOOL_VEC3 = GL2ES2.GL_BOOL_VEC3;
909
- BOOL_VEC4 = GL2ES2.GL_BOOL_VEC4;
910
- SAMPLER_2D = GL2ES2.GL_SAMPLER_2D;
911
- SAMPLER_CUBE = GL2ES2.GL_SAMPLER_CUBE;
912
-
913
- LOW_FLOAT = GL2ES2.GL_LOW_FLOAT;
914
- MEDIUM_FLOAT = GL2ES2.GL_MEDIUM_FLOAT;
915
- HIGH_FLOAT = GL2ES2.GL_HIGH_FLOAT;
916
- LOW_INT = GL2ES2.GL_LOW_INT;
917
- MEDIUM_INT = GL2ES2.GL_MEDIUM_INT;
918
- HIGH_INT = GL2ES2.GL_HIGH_INT;
919
-
920
- CURRENT_VERTEX_ATTRIB = GL2ES2.GL_CURRENT_VERTEX_ATTRIB;
921
-
922
- VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;
923
- VERTEX_ATTRIB_ARRAY_ENABLED = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_ENABLED;
924
- VERTEX_ATTRIB_ARRAY_SIZE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_SIZE;
925
- VERTEX_ATTRIB_ARRAY_STRIDE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_STRIDE;
926
- VERTEX_ATTRIB_ARRAY_TYPE = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_TYPE;
927
- VERTEX_ATTRIB_ARRAY_NORMALIZED = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_NORMALIZED;
928
- VERTEX_ATTRIB_ARRAY_POINTER = GL2ES2.GL_VERTEX_ATTRIB_ARRAY_POINTER;
929
-
930
- BLEND = GL.GL_BLEND;
931
- ONE = GL.GL_ONE;
932
- ZERO = GL.GL_ZERO;
933
- SRC_ALPHA = GL.GL_SRC_ALPHA;
934
- DST_ALPHA = GL.GL_DST_ALPHA;
935
- ONE_MINUS_SRC_ALPHA = GL.GL_ONE_MINUS_SRC_ALPHA;
936
- ONE_MINUS_DST_COLOR = GL.GL_ONE_MINUS_DST_COLOR;
937
- ONE_MINUS_SRC_COLOR = GL.GL_ONE_MINUS_SRC_COLOR;
938
- DST_COLOR = GL.GL_DST_COLOR;
939
- SRC_COLOR = GL.GL_SRC_COLOR;
940
-
941
- SAMPLE_ALPHA_TO_COVERAGE = GL.GL_SAMPLE_ALPHA_TO_COVERAGE;
942
- SAMPLE_COVERAGE = GL.GL_SAMPLE_COVERAGE;
943
-
944
- KEEP = GL.GL_KEEP;
945
- REPLACE = GL.GL_REPLACE;
946
- INCR = GL.GL_INCR;
947
- DECR = GL.GL_DECR;
948
- INVERT = GL.GL_INVERT;
949
- INCR_WRAP = GL.GL_INCR_WRAP;
950
- DECR_WRAP = GL.GL_DECR_WRAP;
951
- NEVER = GL.GL_NEVER;
952
- ALWAYS = GL.GL_ALWAYS;
953
-
954
- EQUAL = GL.GL_EQUAL;
955
- LESS = GL.GL_LESS;
956
- LEQUAL = GL.GL_LEQUAL;
957
- GREATER = GL.GL_GREATER;
958
- GEQUAL = GL.GL_GEQUAL;
959
- NOTEQUAL = GL.GL_NOTEQUAL;
960
-
961
- FUNC_ADD = GL.GL_FUNC_ADD;
962
- FUNC_MIN = GL2ES3.GL_MIN;
963
- FUNC_MAX = GL2ES3.GL_MAX;
964
- FUNC_REVERSE_SUBTRACT = GL.GL_FUNC_REVERSE_SUBTRACT;
965
- FUNC_SUBTRACT = GL.GL_FUNC_SUBTRACT;
966
-
967
- DITHER = GL.GL_DITHER;
968
-
969
- CONSTANT_COLOR = GL2ES2.GL_CONSTANT_COLOR;
970
- CONSTANT_ALPHA = GL2ES2.GL_CONSTANT_ALPHA;
971
- ONE_MINUS_CONSTANT_COLOR = GL2ES2.GL_ONE_MINUS_CONSTANT_COLOR;
972
- ONE_MINUS_CONSTANT_ALPHA = GL2ES2.GL_ONE_MINUS_CONSTANT_ALPHA;
973
- SRC_ALPHA_SATURATE = GL.GL_SRC_ALPHA_SATURATE;
974
-
975
- SCISSOR_TEST = GL.GL_SCISSOR_TEST;
976
- STENCIL_TEST = GL.GL_STENCIL_TEST;
977
- DEPTH_TEST = GL.GL_DEPTH_TEST;
978
- DEPTH_WRITEMASK = GL.GL_DEPTH_WRITEMASK;
979
-
980
- COLOR_BUFFER_BIT = GL.GL_COLOR_BUFFER_BIT;
981
- DEPTH_BUFFER_BIT = GL.GL_DEPTH_BUFFER_BIT;
982
- STENCIL_BUFFER_BIT = GL.GL_STENCIL_BUFFER_BIT;
983
-
984
- FRAMEBUFFER = GL.GL_FRAMEBUFFER;
985
- COLOR_ATTACHMENT0 = GL.GL_COLOR_ATTACHMENT0;
986
- COLOR_ATTACHMENT1 = GL2ES2.GL_COLOR_ATTACHMENT1;
987
- COLOR_ATTACHMENT2 = GL2ES2.GL_COLOR_ATTACHMENT2;
988
- COLOR_ATTACHMENT3 = GL2ES2.GL_COLOR_ATTACHMENT3;
989
- RENDERBUFFER = GL.GL_RENDERBUFFER;
990
- DEPTH_ATTACHMENT = GL.GL_DEPTH_ATTACHMENT;
991
- STENCIL_ATTACHMENT = GL.GL_STENCIL_ATTACHMENT;
992
- READ_FRAMEBUFFER = GL.GL_READ_FRAMEBUFFER;
993
- DRAW_FRAMEBUFFER = GL.GL_DRAW_FRAMEBUFFER;
994
-
995
- RGBA8 = GL.GL_RGBA8;
996
- DEPTH24_STENCIL8 = GL.GL_DEPTH24_STENCIL8;
997
-
998
- DEPTH_COMPONENT = GL2ES2.GL_DEPTH_COMPONENT;
999
- DEPTH_COMPONENT16 = GL.GL_DEPTH_COMPONENT16;
1000
- DEPTH_COMPONENT24 = GL.GL_DEPTH_COMPONENT24;
1001
- DEPTH_COMPONENT32 = GL.GL_DEPTH_COMPONENT32;
1002
-
1003
- STENCIL_INDEX = GL2ES2.GL_STENCIL_INDEX;
1004
- STENCIL_INDEX1 = GL.GL_STENCIL_INDEX1;
1005
- STENCIL_INDEX4 = GL.GL_STENCIL_INDEX4;
1006
- STENCIL_INDEX8 = GL.GL_STENCIL_INDEX8;
1007
-
1008
- DEPTH_STENCIL = GL.GL_DEPTH_STENCIL;
1009
-
1010
- FRAMEBUFFER_COMPLETE = GL.GL_FRAMEBUFFER_COMPLETE;
1011
- FRAMEBUFFER_UNDEFINED = GL2ES3.GL_FRAMEBUFFER_UNDEFINED;
1012
- FRAMEBUFFER_INCOMPLETE_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
1013
- FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
1014
- FRAMEBUFFER_INCOMPLETE_DIMENSIONS = GL.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
1015
- FRAMEBUFFER_INCOMPLETE_FORMATS = GL.GL_FRAMEBUFFER_INCOMPLETE_FORMATS;
1016
- FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = GL2GL3.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER;
1017
- FRAMEBUFFER_INCOMPLETE_READ_BUFFER = GL2GL3.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER;
1018
- FRAMEBUFFER_UNSUPPORTED = GL.GL_FRAMEBUFFER_UNSUPPORTED;
1019
- FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = GL.GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
1020
- FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = GL3ES3.GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
1021
-
1022
- FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;
1023
- FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;
1024
- FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;
1025
- FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;
1026
-
1027
- RENDERBUFFER_WIDTH = GL.GL_RENDERBUFFER_WIDTH;
1028
- RENDERBUFFER_HEIGHT = GL.GL_RENDERBUFFER_HEIGHT;
1029
- RENDERBUFFER_RED_SIZE = GL.GL_RENDERBUFFER_RED_SIZE;
1030
- RENDERBUFFER_GREEN_SIZE = GL.GL_RENDERBUFFER_GREEN_SIZE;
1031
- RENDERBUFFER_BLUE_SIZE = GL.GL_RENDERBUFFER_BLUE_SIZE;
1032
- RENDERBUFFER_ALPHA_SIZE = GL.GL_RENDERBUFFER_ALPHA_SIZE;
1033
- RENDERBUFFER_DEPTH_SIZE = GL.GL_RENDERBUFFER_DEPTH_SIZE;
1034
- RENDERBUFFER_STENCIL_SIZE = GL.GL_RENDERBUFFER_STENCIL_SIZE;
1035
- RENDERBUFFER_INTERNAL_FORMAT = GL.GL_RENDERBUFFER_INTERNAL_FORMAT;
1036
-
1037
- MULTISAMPLE = GL.GL_MULTISAMPLE;
1038
- LINE_SMOOTH = GL.GL_LINE_SMOOTH;
1039
- POLYGON_SMOOTH = GL2GL3.GL_POLYGON_SMOOTH;
1040
-
1041
- SYNC_GPU_COMMANDS_COMPLETE = GL3ES3.GL_SYNC_GPU_COMMANDS_COMPLETE;
1042
- ALREADY_SIGNALED = GL3ES3.GL_ALREADY_SIGNALED;
1043
- CONDITION_SATISFIED = GL3ES3.GL_CONDITION_SATISFIED;
1044
- }
1045
-
1046
- ///////////////////////////////////////////////////////////
1047
-
1048
- // Special Functions
1049
-
1050
- @Override
1051
- public void flush() {
1052
- gl.glFlush();
1053
- }
1054
-
1055
- @Override
1056
- public void finish() {
1057
- gl.glFinish();
1058
- }
1059
-
1060
- @Override
1061
- public void hint(int target, int hint) {
1062
- gl.glHint(target, hint);
1063
- }
1064
-
1065
- ///////////////////////////////////////////////////////////
1066
-
1067
- // State and State Requests
1068
-
1069
- @Override
1070
- public void enable(int value) {
1071
- if (-1 < value) {
1072
- gl.glEnable(value);
1073
- }
1074
- }
1075
-
1076
- @Override
1077
- public void disable(int value) {
1078
- if (-1 < value) {
1079
- gl.glDisable(value);
1080
- }
1081
- }
1082
-
1083
- @Override
1084
- public void getBooleanv(int value, IntBuffer data) {
1085
- if (-1 < value) {
1086
- if (byteBuffer.capacity() < data.capacity()) {
1087
- byteBuffer = allocateDirectByteBuffer(data.capacity());
1088
- }
1089
- gl.glGetBooleanv(value, byteBuffer);
1090
- for (int i = 0; i < data.capacity(); i++) {
1091
- data.put(i, byteBuffer.get(i));
1092
- }
1093
- } else {
1094
- fillIntBuffer(data, 0, data.capacity() - 1, 0);
1095
- }
1096
- }
1097
-
1098
- @Override
1099
- public void getIntegerv(int value, IntBuffer data) {
1100
- if (-1 < value) {
1101
- gl.glGetIntegerv(value, data);
1102
- } else {
1103
- fillIntBuffer(data, 0, data.capacity() - 1, 0);
1104
- }
1105
- }
1106
-
1107
- @Override
1108
- public void getFloatv(int value, FloatBuffer data) {
1109
- if (-1 < value) {
1110
- gl.glGetFloatv(value, data);
1111
- } else {
1112
- fillFloatBuffer(data, 0, data.capacity() - 1, 0);
1113
- }
1114
- }
1115
-
1116
- @Override
1117
- public boolean isEnabled(int value) {
1118
- return gl.glIsEnabled(value);
1119
- }
1120
-
1121
- @Override
1122
- public String getString(int name) {
1123
- return gl.glGetString(name);
1124
- }
1125
-
1126
- ///////////////////////////////////////////////////////////
1127
-
1128
- // Error Handling
1129
-
1130
- @Override
1131
- public int getError() {
1132
- return gl.glGetError();
1133
- }
1134
-
1135
- @Override
1136
- public String errorString(int err) {
1137
- return glu.gluErrorString(err);
1138
- }
1139
-
1140
- //////////////////////////////////////////////////////////////////////////////
1141
-
1142
- // Buffer Objects
1143
-
1144
- @Override
1145
- public void genBuffers(int n, IntBuffer buffers) {
1146
- gl.glGenBuffers(n, buffers);
1147
- }
1148
-
1149
- @Override
1150
- public void deleteBuffers(int n, IntBuffer buffers) {
1151
- gl.glDeleteBuffers(n, buffers);
1152
- }
1153
-
1154
- @Override
1155
- public void bindBuffer(int target, int buffer) {
1156
- gl.glBindBuffer(target, buffer);
1157
- }
1158
-
1159
- @Override
1160
- public void bufferData(int target, int size, Buffer data, int usage) {
1161
- gl.glBufferData(target, size, data, usage);
1162
- }
1163
-
1164
- @Override
1165
- public void bufferSubData(int target, int offset, int size, Buffer data) {
1166
- gl.glBufferSubData(target, offset, size, data);
1167
- }
1168
-
1169
- @Override
1170
- public void isBuffer(int buffer) {
1171
- gl.glIsBuffer(buffer);
1172
- }
1173
-
1174
- @Override
1175
- public void getBufferParameteriv(int target, int value, IntBuffer data) {
1176
- gl.glGetBufferParameteriv(target, value, data);
1177
- }
1178
-
1179
- @Override
1180
- public ByteBuffer mapBuffer(int target, int access) {
1181
- return gl2.glMapBuffer(target, access);
1182
- }
1183
-
1184
- @Override
1185
- public ByteBuffer mapBufferRange(int target, int offset, int length, int access) {
1186
- if (gl2x != null) {
1187
- return gl2x.glMapBufferRange(target, offset, length, access);
1188
- } else if (gl3 != null) {
1189
- return gl3.glMapBufferRange(target, offset, length, access);
1190
- } else {
1191
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glMapBufferRange()"));
1192
- }
1193
- }
1194
-
1195
- @Override
1196
- public void unmapBuffer(int target) {
1197
- gl2.glUnmapBuffer(target);
1198
- }
1199
-
1200
- //////////////////////////////////////////////////////////////////////////////
1201
-
1202
- // Synchronization
1203
-
1204
- @Override
1205
- public long fenceSync(int condition, int flags) {
1206
- if (gl3es3 != null) {
1207
- return gl3es3.glFenceSync(condition, flags);
1208
- } else {
1209
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "fenceSync()"));
1210
- }
1211
- }
1212
-
1213
- @Override
1214
- public void deleteSync(long sync) {
1215
- if (gl3es3 != null) {
1216
- gl3es3.glDeleteSync(sync);
1217
- } else {
1218
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "deleteSync()"));
1219
- }
1220
- }
1221
-
1222
- @Override
1223
- public int clientWaitSync(long sync, int flags, long timeout) {
1224
- if (gl3es3 != null) {
1225
- return gl3es3.glClientWaitSync(sync, flags, timeout);
1226
- } else {
1227
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "clientWaitSync()"));
1228
- }
1229
- }
1230
-
1231
- //////////////////////////////////////////////////////////////////////////////
1232
-
1233
- // Viewport and Clipping
1234
-
1235
- @Override
1236
- public void depthRangef(float n, float f) {
1237
- gl.glDepthRangef(n, f);
1238
- }
1239
-
1240
- @Override
1241
- public void viewport(int x, int y, int w, int h) {
1242
- float scale = getPixelScale();
1243
- viewportImpl((int)scale * x, (int)(scale * y), (int)(scale * w), (int)(scale * h));
1244
- }
1245
-
1246
- @Override
1247
- protected void viewportImpl(int x, int y, int w, int h) {
1248
- gl.glViewport(x, y, w, h);
1249
- }
1250
-
1251
- //////////////////////////////////////////////////////////////////////////////
1252
-
1253
- // Reading Pixels
1254
-
1255
- @Override
1256
- protected void readPixelsImpl(int x, int y, int width, int height, int format, int type, Buffer buffer) {
1257
- gl.glReadPixels(x, y, width, height, format, type, buffer);
1258
- }
1259
-
1260
- @Override
1261
- protected void readPixelsImpl(int x, int y, int width, int height, int format, int type, long offset) {
1262
- gl.glReadPixels(x, y, width, height, format, type, 0);
1263
- }
1264
-
1265
- //////////////////////////////////////////////////////////////////////////////
1266
-
1267
- // Vertices
1268
-
1269
- @Override
1270
- public void vertexAttrib1f(int index, float value) {
1271
- gl2.glVertexAttrib1f(index, value);
1272
- }
1273
-
1274
- @Override
1275
- public void vertexAttrib2f(int index, float value0, float value1) {
1276
- gl2.glVertexAttrib2f(index, value0, value1);
1277
- }
1278
-
1279
- @Override
1280
- public void vertexAttrib3f(int index, float value0, float value1, float value2) {
1281
- gl2.glVertexAttrib3f(index, value0, value1, value2);
1282
- }
1283
-
1284
- @Override
1285
- public void vertexAttrib4f(int index, float value0, float value1, float value2, float value3) {
1286
- gl2.glVertexAttrib4f(index, value0, value1, value2, value3);
1287
- }
1288
-
1289
- @Override
1290
- public void vertexAttrib1fv(int index, FloatBuffer values) {
1291
- gl2.glVertexAttrib1fv(index, values);
1292
- }
1293
-
1294
- @Override
1295
- public void vertexAttrib2fv(int index, FloatBuffer values) {
1296
- gl2.glVertexAttrib2fv(index, values);
1297
- }
1298
-
1299
- @Override
1300
- public void vertexAttrib3fv(int index, FloatBuffer values) {
1301
- gl2.glVertexAttrib3fv(index, values);
1302
- }
1303
-
1304
- @Override
1305
- public void vertexAttrib4fv(int index, FloatBuffer values) {
1306
- gl2.glVertexAttrib4fv(index, values);
1307
- }
1308
-
1309
- @Override
1310
- public void vertexAttribPointer(int index, int size, int type, boolean normalized, int stride, int offset) {
1311
- gl2.glVertexAttribPointer(index, size, type, normalized, stride, offset);
1312
- }
1313
-
1314
- @Override
1315
- public void enableVertexAttribArray(int index) {
1316
- gl2.glEnableVertexAttribArray(index);
1317
- }
1318
-
1319
- @Override
1320
- public void disableVertexAttribArray(int index) {
1321
- gl2.glDisableVertexAttribArray(index);
1322
- }
1323
-
1324
- @Override
1325
- public void drawArraysImpl(int mode, int first, int count) {
1326
- gl.glDrawArrays(mode, first, count);
1327
- }
1328
-
1329
- @Override
1330
- public void drawElementsImpl(int mode, int count, int type, int offset) {
1331
- gl.glDrawElements(mode, count, type, offset);
1332
- }
1333
-
1334
- //////////////////////////////////////////////////////////////////////////////
1335
-
1336
- // Rasterization
1337
-
1338
- @Override
1339
- public void lineWidth(float width) {
1340
- gl.glLineWidth(width);
1341
- }
1342
-
1343
- @Override
1344
- public void frontFace(int dir) {
1345
- gl.glFrontFace(dir);
1346
- }
1347
-
1348
- @Override
1349
- public void cullFace(int mode) {
1350
- gl.glCullFace(mode);
1351
- }
1352
-
1353
- @Override
1354
- public void polygonOffset(float factor, float units) {
1355
- gl.glPolygonOffset(factor, units);
1356
- }
1357
-
1358
- //////////////////////////////////////////////////////////////////////////////
1359
-
1360
- // Pixel Rectangles
1361
-
1362
- @Override
1363
- public void pixelStorei(int pname, int param) {
1364
- gl.glPixelStorei(pname, param);
1365
- }
1366
-
1367
- ///////////////////////////////////////////////////////////
1368
-
1369
- // Texturing
1370
-
1371
- @Override
1372
- public void texImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, Buffer data) {
1373
- gl.glTexImage2D(target, level, internalFormat, width, height, border, format, type, data);
1374
- }
1375
-
1376
- @Override
1377
- public void copyTexImage2D(int target, int level, int internalFormat, int x, int y, int width, int height, int border) {
1378
- gl.glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border);
1379
- }
1380
-
1381
- @Override
1382
- public void texSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int type, Buffer data) {
1383
- gl.glTexSubImage2D(target, level, xOffset, yOffset, width, height, format, type, data);
1384
- }
1385
-
1386
- @Override
1387
- public void copyTexSubImage2D(int target, int level, int xOffset, int yOffset, int x, int y, int width, int height) {
1388
- gl.glCopyTexSubImage2D(target, level, x, y, xOffset, yOffset, width, height);
1389
- }
1390
-
1391
- @Override
1392
- public void compressedTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int imageSize, Buffer data) {
1393
- gl.glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data);
1394
- }
1395
-
1396
- @Override
1397
- public void compressedTexSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int imageSize, Buffer data) {
1398
- gl.glCompressedTexSubImage2D(target, level, xOffset, yOffset, width, height, format, imageSize, data);
1399
- }
1400
-
1401
- @Override
1402
- public void texParameteri(int target, int pname, int param) {
1403
- gl.glTexParameteri(target, pname, param);
1404
- }
1405
-
1406
- @Override
1407
- public void texParameterf(int target, int pname, float param) {
1408
- gl.glTexParameterf(target, pname, param);
1409
- }
1410
-
1411
- @Override
1412
- public void texParameteriv(int target, int pname, IntBuffer params) {
1413
- gl.glTexParameteriv(target, pname, params);
1414
- }
1415
-
1416
- @Override
1417
- public void texParameterfv(int target, int pname, FloatBuffer params) {
1418
- gl.glTexParameterfv(target, pname, params);
1419
- }
1420
-
1421
- @Override
1422
- public void generateMipmap(int target) {
1423
- gl.glGenerateMipmap(target);
1424
- }
1425
-
1426
- @Override
1427
- public void genTextures(int n, IntBuffer textures) {
1428
- gl.glGenTextures(n, textures);
1429
- }
1430
-
1431
- @Override
1432
- public void deleteTextures(int n, IntBuffer textures) {
1433
- gl.glDeleteTextures(n, textures);
1434
- }
1435
-
1436
- @Override
1437
- public void getTexParameteriv(int target, int pname, IntBuffer params) {
1438
- gl.glGetTexParameteriv(target, pname, params);
1439
- }
1440
-
1441
- @Override
1442
- public void getTexParameterfv(int target, int pname, FloatBuffer params) {
1443
- gl.glGetTexParameterfv(target, pname, params);
1444
- }
1445
-
1446
- @Override
1447
- public boolean isTexture(int texture) {
1448
- return gl.glIsTexture(texture);
1449
- }
1450
-
1451
- @Override
1452
- protected void activeTextureImpl(int texture) {
1453
- gl.glActiveTexture(texture);
1454
- }
1455
-
1456
- @Override
1457
- protected void bindTextureImpl(int target, int texture) {
1458
- gl.glBindTexture(target, texture);
1459
- }
1460
-
1461
- ///////////////////////////////////////////////////////////
1462
-
1463
- // Shaders and Programs
1464
-
1465
- @Override
1466
- public int createShader(int type) {
1467
- return gl2.glCreateShader(type);
1468
- }
1469
-
1470
- @Override
1471
- public void shaderSource(int shader, String source) {
1472
- gl2.glShaderSource(shader, 1, new String[] { source }, (int[]) null, 0);
1473
- }
1474
-
1475
- @Override
1476
- public void compileShader(int shader) {
1477
- gl2.glCompileShader(shader);
1478
- }
1479
-
1480
- @Override
1481
- public void releaseShaderCompiler() {
1482
- gl2.glReleaseShaderCompiler();
1483
- }
1484
-
1485
- @Override
1486
- public void deleteShader(int shader) {
1487
- gl2.glDeleteShader(shader);
1488
- }
1489
-
1490
- @Override
1491
- public void shaderBinary(int count, IntBuffer shaders, int binaryFormat, Buffer binary, int length) {
1492
- gl2.glShaderBinary(count, shaders, binaryFormat, binary, length);
1493
- }
1494
-
1495
- @Override
1496
- public int createProgram() {
1497
- return gl2.glCreateProgram();
1498
- }
1499
-
1500
- @Override
1501
- public void attachShader(int program, int shader) {
1502
- gl2.glAttachShader(program, shader);
1503
- }
1504
-
1505
- @Override
1506
- public void detachShader(int program, int shader) {
1507
- gl2.glDetachShader(program, shader);
1508
- }
1509
-
1510
- @Override
1511
- public void linkProgram(int program) {
1512
- gl2.glLinkProgram(program);
1513
- }
1514
-
1515
- @Override
1516
- public void useProgram(int program) {
1517
- gl2.glUseProgram(program);
1518
- }
1519
-
1520
- @Override
1521
- public void deleteProgram(int program) {
1522
- gl2.glDeleteProgram(program);
1523
- }
1524
-
1525
- @Override
1526
- public String getActiveAttrib(int program, int index, IntBuffer size, IntBuffer type) {
1527
- int[] tmp = {0, 0, 0};
1528
- byte[] namebuf = new byte[1024];
1529
- gl2.glGetActiveAttrib(program, index, 1024, tmp, 0, tmp, 1, tmp, 2, namebuf, 0);
1530
- size.put(tmp[1]);
1531
- type.put(tmp[2]);
1532
- String name = new String(namebuf, 0, tmp[0]);
1533
- return name;
1534
- }
1535
-
1536
- @Override
1537
- public int getAttribLocation(int program, String name) {
1538
- return gl2.glGetAttribLocation(program, name);
1539
- }
1540
-
1541
- @Override
1542
- public void bindAttribLocation(int program, int index, String name) {
1543
- gl2.glBindAttribLocation(program, index, name);
1544
- }
1545
-
1546
- @Override
1547
- public int getUniformLocation(int program, String name) {
1548
- return gl2.glGetUniformLocation(program, name);
1549
- }
1550
-
1551
- @Override
1552
- public String getActiveUniform(int program, int index, IntBuffer size, IntBuffer type) {
1553
- int[] tmp= {0, 0, 0};
1554
- byte[] namebuf = new byte[1024];
1555
- gl2.glGetActiveUniform(program, index, 1024, tmp, 0, tmp, 1, tmp, 2, namebuf, 0);
1556
- size.put(tmp[1]);
1557
- type.put(tmp[2]);
1558
- String name = new String(namebuf, 0, tmp[0]);
1559
- return name;
1560
- }
1561
-
1562
- @Override
1563
- public void uniform1i(int location, int value) {
1564
- gl2.glUniform1i(location, value);
1565
- }
1566
-
1567
- @Override
1568
- public void uniform2i(int location, int value0, int value1) {
1569
- gl2.glUniform2i(location, value0, value1);
1570
- }
1571
-
1572
- @Override
1573
- public void uniform3i(int location, int value0, int value1, int value2) {
1574
- gl2.glUniform3i(location, value0, value1, value2);
1575
- }
1576
-
1577
- @Override
1578
- public void uniform4i(int location, int value0, int value1, int value2, int value3) {
1579
- gl2.glUniform4i(location, value0, value1, value2, value3);
1580
- }
1581
-
1582
- @Override
1583
- public void uniform1f(int location, float value) {
1584
- gl2.glUniform1f(location, value);
1585
- }
1586
-
1587
- @Override
1588
- public void uniform2f(int location, float value0, float value1) {
1589
- gl2.glUniform2f(location, value0, value1);
1590
- }
1591
-
1592
- @Override
1593
- public void uniform3f(int location, float value0, float value1, float value2) {
1594
- gl2.glUniform3f(location, value0, value1, value2);
1595
- }
1596
-
1597
- @Override
1598
- public void uniform4f(int location, float value0, float value1, float value2, float value3) {
1599
- gl2.glUniform4f(location, value0, value1, value2, value3);
1600
- }
1601
-
1602
- @Override
1603
- public void uniform1iv(int location, int count, IntBuffer v) {
1604
- gl2.glUniform1iv(location, count, v);
1605
- }
1606
-
1607
- @Override
1608
- public void uniform2iv(int location, int count, IntBuffer v) {
1609
- gl2.glUniform2iv(location, count, v);
1610
- }
1611
-
1612
- @Override
1613
- public void uniform3iv(int location, int count, IntBuffer v) {
1614
- gl2.glUniform3iv(location, count, v);
1615
- }
1616
-
1617
- @Override
1618
- public void uniform4iv(int location, int count, IntBuffer v) {
1619
- gl2.glUniform4iv(location, count, v);
1620
- }
1621
-
1622
- @Override
1623
- public void uniform1fv(int location, int count, FloatBuffer v) {
1624
- gl2.glUniform1fv(location, count, v);
1625
- }
1626
-
1627
- @Override
1628
- public void uniform2fv(int location, int count, FloatBuffer v) {
1629
- gl2.glUniform2fv(location, count, v);
1630
- }
1631
-
1632
- @Override
1633
- public void uniform3fv(int location, int count, FloatBuffer v) {
1634
- gl2.glUniform3fv(location, count, v);
1635
- }
1636
-
1637
- @Override
1638
- public void uniform4fv(int location, int count, FloatBuffer v) {
1639
- gl2.glUniform4fv(location, count, v);
1640
- }
1641
-
1642
- @Override
1643
- public void uniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer mat) {
1644
- gl2.glUniformMatrix2fv(location, count, transpose, mat);
1645
- }
1646
-
1647
- @Override
1648
- public void uniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer mat) {
1649
- gl2.glUniformMatrix3fv(location, count, transpose, mat);
1650
- }
1651
-
1652
- @Override
1653
- public void uniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer mat) {
1654
- gl2.glUniformMatrix4fv(location, count, transpose, mat);
1655
- }
1656
-
1657
- @Override
1658
- public void validateProgram(int program) {
1659
- gl2.glValidateProgram(program);
1660
- }
1661
-
1662
- @Override
1663
- public boolean isShader(int shader) {
1664
- return gl2.glIsShader(shader);
1665
- }
1666
-
1667
- @Override
1668
- public void getShaderiv(int shader, int pname, IntBuffer params) {
1669
- gl2.glGetShaderiv(shader, pname, params);
1670
- }
1671
-
1672
- @Override
1673
- public void getAttachedShaders(int program, int maxCount, IntBuffer count, IntBuffer shaders) {
1674
- gl2.glGetAttachedShaders(program, maxCount, count, shaders);
1675
- }
1676
-
1677
- @Override
1678
- public String getShaderInfoLog(int shader) {
1679
- int[] val = { 0 };
1680
- gl2.glGetShaderiv(shader, GL2ES2.GL_INFO_LOG_LENGTH, val, 0);
1681
- int length = val[0];
1682
-
1683
- byte[] log = new byte[length];
1684
- gl2.glGetShaderInfoLog(shader, length, val, 0, log, 0);
1685
- return new String(log);
1686
- }
1687
-
1688
- @Override
1689
- public String getShaderSource(int shader) {
1690
- int[] len = {0};
1691
- byte[] buf = new byte[1024];
1692
- gl2.glGetShaderSource(shader, 1024, len, 0, buf, 0);
1693
- return new String(buf, 0, len[0]);
1694
- }
1695
-
1696
- @Override
1697
- public void getShaderPrecisionFormat(int shaderType, int precisionType, IntBuffer range, IntBuffer precision) {
1698
- gl2.glGetShaderPrecisionFormat(shaderType, precisionType, range, precision);
1699
- }
1700
-
1701
- @Override
1702
- public void getVertexAttribfv(int index, int pname, FloatBuffer params) {
1703
- gl2.glGetVertexAttribfv(index, pname, params);
1704
- }
1705
-
1706
- @Override
1707
- public void getVertexAttribiv(int index, int pname, IntBuffer params) {
1708
- gl2.glGetVertexAttribiv(index, pname, params);
1709
- }
1710
-
1711
- @Override
1712
- public void getVertexAttribPointerv(int index, int pname, ByteBuffer data) {
1713
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glGetVertexAttribPointerv()"));
1714
- }
1715
-
1716
- @Override
1717
- public void getUniformfv(int program, int location, FloatBuffer params) {
1718
- gl2.glGetUniformfv(program, location, params);
1719
- }
1720
-
1721
- @Override
1722
- public void getUniformiv(int program, int location, IntBuffer params) {
1723
- gl2.glGetUniformiv(program, location, params);
1724
- }
1725
-
1726
- @Override
1727
- public boolean isProgram(int program) {
1728
- return gl2.glIsProgram(program);
1729
- }
1730
-
1731
- @Override
1732
- public void getProgramiv(int program, int pname, IntBuffer params) {
1733
- gl2.glGetProgramiv(program, pname, params);
1734
- }
1735
-
1736
- @Override
1737
- public String getProgramInfoLog(int program) {
1738
- int[] val = { 0 };
1739
- gl2.glGetProgramiv(program, GL2ES2.GL_INFO_LOG_LENGTH, val, 0);
1740
- int length = val[0];
1741
-
1742
- if (0 < length) {
1743
- byte[] log = new byte[length];
1744
- gl2.glGetProgramInfoLog(program, length, val, 0, log, 0);
1745
- return new String(log);
1746
- } else {
1747
- return "Unknown error";
1748
- }
1749
- }
1750
-
1751
- ///////////////////////////////////////////////////////////
1752
-
1753
- // Per-Fragment Operations
1754
-
1755
- @Override
1756
- public void scissor(int x, int y, int w, int h) {
1757
- float scale = getPixelScale();
1758
- gl.glScissor((int)scale * x, (int)(scale * y), (int)(scale * w), (int)(scale * h));
1693
+ ///////////////////////////////////////////////////////////
1694
+ // Per-Fragment Operations
1695
+ @Override
1696
+ public void scissor(int x, int y, int w, int h) {
1697
+ float scale = getPixelScale();
1698
+ gl.glScissor((int) scale * x, (int) (scale * y), (int) (scale * w), (int) (scale * h));
1759
1699
  // gl.glScissor(x, y, w, h);
1760
- }
1761
-
1762
- @Override
1763
- public void sampleCoverage(float value, boolean invert) {
1764
- gl2.glSampleCoverage(value, invert);
1765
- }
1766
-
1767
- @Override
1768
- public void stencilFunc(int func, int ref, int mask) {
1769
- gl2.glStencilFunc(func, ref, mask);
1770
- }
1771
-
1772
- @Override
1773
- public void stencilFuncSeparate(int face, int func, int ref, int mask) {
1774
- gl2.glStencilFuncSeparate(face, func, ref, mask);
1775
- }
1776
-
1777
- @Override
1778
- public void stencilOp(int sfail, int dpfail, int dppass) {
1779
- gl2.glStencilOp(sfail, dpfail, dppass);
1780
- }
1781
-
1782
- @Override
1783
- public void stencilOpSeparate(int face, int sfail, int dpfail, int dppass) {
1784
- gl2.glStencilOpSeparate(face, sfail, dpfail, dppass);
1785
- }
1786
-
1787
- @Override
1788
- public void depthFunc(int func) {
1789
- gl.glDepthFunc(func);
1790
- }
1791
-
1792
- @Override
1793
- public void blendEquation(int mode) {
1794
- gl.glBlendEquation(mode);
1795
- }
1796
-
1797
- @Override
1798
- public void blendEquationSeparate(int modeRGB, int modeAlpha) {
1799
- gl.glBlendEquationSeparate(modeRGB, modeAlpha);
1800
- }
1801
-
1802
- @Override
1803
- public void blendFunc(int src, int dst) {
1804
- gl.glBlendFunc(src, dst);
1805
- }
1806
-
1807
- @Override
1808
- public void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) {
1809
- gl.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
1810
- }
1811
-
1812
- @Override
1813
- public void blendColor(float red, float green, float blue, float alpha) {
1814
- gl2.glBlendColor(red, green, blue, alpha);
1815
- }
1816
-
1817
- ///////////////////////////////////////////////////////////
1818
-
1819
- // Whole Framebuffer Operations
1820
-
1821
- @Override
1822
- public void colorMask(boolean r, boolean g, boolean b, boolean a) {
1823
- gl.glColorMask(r, g, b, a);
1824
- }
1825
-
1826
- @Override
1827
- public void depthMask(boolean mask) {
1828
- gl.glDepthMask(mask);
1829
- }
1830
-
1831
- @Override
1832
- public void stencilMask(int mask) {
1833
- gl.glStencilMask(mask);
1834
- }
1835
-
1836
- @Override
1837
- public void stencilMaskSeparate(int face, int mask) {
1838
- gl2.glStencilMaskSeparate(face, mask);
1839
- }
1840
-
1841
- @Override
1842
- public void clearColor(float r, float g, float b, float a) {
1843
- gl.glClearColor(r, g, b, a);
1844
- }
1845
-
1846
- @Override
1847
- public void clearDepth(float d) {
1848
- gl.glClearDepth(d);
1849
- }
1850
-
1851
- @Override
1852
- public void clearStencil(int s) {
1853
- gl.glClearStencil(s);
1854
- }
1855
-
1856
- @Override
1857
- public void clear(int buf) {
1858
- gl.glClear(buf);
1859
- }
1860
-
1861
- ///////////////////////////////////////////////////////////
1862
-
1863
- // Framebuffers Objects
1864
-
1865
- @Override
1866
- protected void bindFramebufferImpl(int target, int framebuffer) {
1867
- gl.glBindFramebuffer(target, framebuffer);
1868
- }
1869
-
1870
- @Override
1871
- public void deleteFramebuffers(int n, IntBuffer framebuffers) {
1872
- gl.glDeleteFramebuffers(n, framebuffers);
1873
- }
1874
-
1875
- @Override
1876
- public void genFramebuffers(int n, IntBuffer framebuffers) {
1877
- gl.glGenFramebuffers(n, framebuffers);
1878
- }
1879
-
1880
- @Override
1881
- public void bindRenderbuffer(int target, int renderbuffer) {
1882
- gl.glBindRenderbuffer(target, renderbuffer);
1883
- }
1884
-
1885
- @Override
1886
- public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
1887
- gl.glDeleteRenderbuffers(n, renderbuffers);
1888
- }
1889
-
1890
- @Override
1891
- public void genRenderbuffers(int n, IntBuffer renderbuffers) {
1892
- gl.glGenRenderbuffers(n, renderbuffers);
1893
- }
1894
-
1895
- @Override
1896
- public void renderbufferStorage(int target, int internalFormat, int width, int height) {
1897
- gl.glRenderbufferStorage(target, internalFormat, width, height);
1898
- }
1899
-
1900
- @Override
1901
- public void framebufferRenderbuffer(int target, int attachment, int rendbuferfTarget, int renderbuffer) {
1902
- gl.glFramebufferRenderbuffer(target, attachment, rendbuferfTarget, renderbuffer);
1903
- }
1904
-
1905
- @Override
1906
- public void framebufferTexture2D(int target, int attachment, int texTarget, int texture, int level) {
1907
- gl.glFramebufferTexture2D(target, attachment, texTarget, texture, level);
1908
- }
1909
-
1910
- @Override
1911
- public int checkFramebufferStatus(int target) {
1912
- return gl.glCheckFramebufferStatus(target);
1913
- }
1914
-
1915
- @Override
1916
- public boolean isFramebuffer(int framebuffer) {
1917
- return gl2.glIsFramebuffer(framebuffer);
1918
- }
1919
-
1920
- @Override
1921
- public void getFramebufferAttachmentParameteriv(int target, int attachment, int pname, IntBuffer params) {
1922
- gl2.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
1923
- }
1924
-
1925
- @Override
1926
- public boolean isRenderbuffer(int renderbuffer) {
1927
- return gl2.glIsRenderbuffer(renderbuffer);
1928
- }
1929
-
1930
- @Override
1931
- public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) {
1932
- gl2.glGetRenderbufferParameteriv(target, pname, params);
1933
- }
1934
-
1935
- @Override
1936
- public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) {
1937
- if (gl2x != null) {
1938
- gl2x.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1939
- } else if (gl3 != null) {
1940
- gl3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1941
- } else if (gl3es3 != null) {
1942
- gl3es3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1943
- } else {
1944
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glBlitFramebuffer()"));
1945
- }
1946
- }
1947
-
1948
- @Override
1949
- public void renderbufferStorageMultisample(int target, int samples, int format, int width, int height) {
1950
- if (gl2x != null) {
1951
- gl2x.glRenderbufferStorageMultisample(target, samples, format, width, height);
1952
- } else if (gl3 != null) {
1953
- gl3.glRenderbufferStorageMultisample(target, samples, format, width, height);
1954
- } else if (gl3es3 != null) {
1955
- gl3es3.glRenderbufferStorageMultisample(target, samples, format, width, height);
1956
- } else {
1957
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glRenderbufferStorageMultisample()"));
1958
- }
1959
- }
1960
-
1961
- @Override
1962
- public void readBuffer(int buf) {
1963
- if (gl2x != null) {
1964
- gl2x.glReadBuffer(buf);
1965
- } else if (gl3 != null) {
1966
- gl3.glReadBuffer(buf);
1967
- } else if (gl3es3 != null) {
1968
- gl3es3.glReadBuffer(buf);
1969
- } else {
1970
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glReadBuffer()"));
1971
- }
1972
- }
1973
-
1974
- @Override
1975
- public void drawBuffer(int buf) {
1976
- if (gl2x != null) {
1977
- gl2x.glDrawBuffer(buf);
1978
- } else if (gl3 != null) {
1979
- gl3.glDrawBuffer(buf);
1980
- } else if (gl3es3 != null) {
1981
- IntBuffer intBuffer = IntBuffer.allocate(1);
1982
- intBuffer.put(buf);
1983
- intBuffer.rewind();
1984
- gl3es3.glDrawBuffers(1, intBuffer);
1985
- } else {
1986
- throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glDrawBuffer()"));
1987
- }
1988
- }
1700
+ }
1701
+
1702
+ @Override
1703
+ public void sampleCoverage(float value, boolean invert) {
1704
+ gl2.glSampleCoverage(value, invert);
1705
+ }
1706
+
1707
+ @Override
1708
+ public void stencilFunc(int func, int ref, int mask) {
1709
+ gl2.glStencilFunc(func, ref, mask);
1710
+ }
1711
+
1712
+ @Override
1713
+ public void stencilFuncSeparate(int face, int func, int ref, int mask) {
1714
+ gl2.glStencilFuncSeparate(face, func, ref, mask);
1715
+ }
1716
+
1717
+ @Override
1718
+ public void stencilOp(int sfail, int dpfail, int dppass) {
1719
+ gl2.glStencilOp(sfail, dpfail, dppass);
1720
+ }
1721
+
1722
+ @Override
1723
+ public void stencilOpSeparate(int face, int sfail, int dpfail, int dppass) {
1724
+ gl2.glStencilOpSeparate(face, sfail, dpfail, dppass);
1725
+ }
1726
+
1727
+ @Override
1728
+ public void depthFunc(int func) {
1729
+ gl.glDepthFunc(func);
1730
+ }
1731
+
1732
+ @Override
1733
+ public void blendEquation(int mode) {
1734
+ gl.glBlendEquation(mode);
1735
+ }
1736
+
1737
+ @Override
1738
+ public void blendEquationSeparate(int modeRGB, int modeAlpha) {
1739
+ gl.glBlendEquationSeparate(modeRGB, modeAlpha);
1740
+ }
1741
+
1742
+ @Override
1743
+ public void blendFunc(int src, int dst) {
1744
+ gl.glBlendFunc(src, dst);
1745
+ }
1746
+
1747
+ @Override
1748
+ public void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) {
1749
+ gl.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
1750
+ }
1751
+
1752
+ @Override
1753
+ public void blendColor(float red, float green, float blue, float alpha) {
1754
+ gl2.glBlendColor(red, green, blue, alpha);
1755
+ }
1756
+
1757
+ ///////////////////////////////////////////////////////////
1758
+ // Whole Framebuffer Operations
1759
+ @Override
1760
+ public void colorMask(boolean r, boolean g, boolean b, boolean a) {
1761
+ gl.glColorMask(r, g, b, a);
1762
+ }
1763
+
1764
+ @Override
1765
+ public void depthMask(boolean mask) {
1766
+ gl.glDepthMask(mask);
1767
+ }
1768
+
1769
+ @Override
1770
+ public void stencilMask(int mask) {
1771
+ gl.glStencilMask(mask);
1772
+ }
1773
+
1774
+ @Override
1775
+ public void stencilMaskSeparate(int face, int mask) {
1776
+ gl2.glStencilMaskSeparate(face, mask);
1777
+ }
1778
+
1779
+ @Override
1780
+ public void clearColor(float r, float g, float b, float a) {
1781
+ gl.glClearColor(r, g, b, a);
1782
+ }
1783
+
1784
+ @Override
1785
+ public void clearDepth(float d) {
1786
+ gl.glClearDepth(d);
1787
+ }
1788
+
1789
+ @Override
1790
+ public void clearStencil(int s) {
1791
+ gl.glClearStencil(s);
1792
+ }
1793
+
1794
+ @Override
1795
+ public void clear(int buf) {
1796
+ gl.glClear(buf);
1797
+ }
1798
+
1799
+ ///////////////////////////////////////////////////////////
1800
+ // Framebuffers Objects
1801
+ @Override
1802
+ protected void bindFramebufferImpl(int target, int framebuffer) {
1803
+ gl.glBindFramebuffer(target, framebuffer);
1804
+ }
1805
+
1806
+ @Override
1807
+ public void deleteFramebuffers(int n, IntBuffer framebuffers) {
1808
+ gl.glDeleteFramebuffers(n, framebuffers);
1809
+ }
1810
+
1811
+ @Override
1812
+ public void genFramebuffers(int n, IntBuffer framebuffers) {
1813
+ gl.glGenFramebuffers(n, framebuffers);
1814
+ }
1815
+
1816
+ @Override
1817
+ public void bindRenderbuffer(int target, int renderbuffer) {
1818
+ gl.glBindRenderbuffer(target, renderbuffer);
1819
+ }
1820
+
1821
+ @Override
1822
+ public void deleteRenderbuffers(int n, IntBuffer renderbuffers) {
1823
+ gl.glDeleteRenderbuffers(n, renderbuffers);
1824
+ }
1825
+
1826
+ @Override
1827
+ public void genRenderbuffers(int n, IntBuffer renderbuffers) {
1828
+ gl.glGenRenderbuffers(n, renderbuffers);
1829
+ }
1830
+
1831
+ @Override
1832
+ public void renderbufferStorage(int target, int internalFormat, int width, int height) {
1833
+ gl.glRenderbufferStorage(target, internalFormat, width, height);
1834
+ }
1835
+
1836
+ @Override
1837
+ public void framebufferRenderbuffer(int target, int attachment, int rendbuferfTarget, int renderbuffer) {
1838
+ gl.glFramebufferRenderbuffer(target, attachment, rendbuferfTarget, renderbuffer);
1839
+ }
1840
+
1841
+ @Override
1842
+ public void framebufferTexture2D(int target, int attachment, int texTarget, int texture, int level) {
1843
+ gl.glFramebufferTexture2D(target, attachment, texTarget, texture, level);
1844
+ }
1845
+
1846
+ @Override
1847
+ public int checkFramebufferStatus(int target) {
1848
+ return gl.glCheckFramebufferStatus(target);
1849
+ }
1850
+
1851
+ @Override
1852
+ public boolean isFramebuffer(int framebuffer) {
1853
+ return gl2.glIsFramebuffer(framebuffer);
1854
+ }
1855
+
1856
+ @Override
1857
+ public void getFramebufferAttachmentParameteriv(int target, int attachment, int pname, IntBuffer params) {
1858
+ gl2.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
1859
+ }
1860
+
1861
+ @Override
1862
+ public boolean isRenderbuffer(int renderbuffer) {
1863
+ return gl2.glIsRenderbuffer(renderbuffer);
1864
+ }
1865
+
1866
+ @Override
1867
+ public void getRenderbufferParameteriv(int target, int pname, IntBuffer params) {
1868
+ gl2.glGetRenderbufferParameteriv(target, pname, params);
1869
+ }
1870
+
1871
+ @Override
1872
+ public void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) {
1873
+ if (gl2x != null) {
1874
+ gl2x.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1875
+ } else if (gl3 != null) {
1876
+ gl3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1877
+ } else if (gl3es3 != null) {
1878
+ gl3es3.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1879
+ } else {
1880
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glBlitFramebuffer()"));
1881
+ }
1882
+ }
1883
+
1884
+ @Override
1885
+ public void renderbufferStorageMultisample(int target, int samples, int format, int width, int height) {
1886
+ if (gl2x != null) {
1887
+ gl2x.glRenderbufferStorageMultisample(target, samples, format, width, height);
1888
+ } else if (gl3 != null) {
1889
+ gl3.glRenderbufferStorageMultisample(target, samples, format, width, height);
1890
+ } else if (gl3es3 != null) {
1891
+ gl3es3.glRenderbufferStorageMultisample(target, samples, format, width, height);
1892
+ } else {
1893
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glRenderbufferStorageMultisample()"));
1894
+ }
1895
+ }
1896
+
1897
+ @Override
1898
+ public void readBuffer(int buf) {
1899
+ if (gl2x != null) {
1900
+ gl2x.glReadBuffer(buf);
1901
+ } else if (gl3 != null) {
1902
+ gl3.glReadBuffer(buf);
1903
+ } else if (gl3es3 != null) {
1904
+ gl3es3.glReadBuffer(buf);
1905
+ } else {
1906
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glReadBuffer()"));
1907
+ }
1908
+ }
1909
+
1910
+ @Override
1911
+ public void drawBuffer(int buf) {
1912
+ if (gl2x != null) {
1913
+ gl2x.glDrawBuffer(buf);
1914
+ } else if (gl3 != null) {
1915
+ gl3.glDrawBuffer(buf);
1916
+ } else if (gl3es3 != null) {
1917
+ IntBuffer intBuffer = IntBuffer.allocate(1);
1918
+ intBuffer.put(buf);
1919
+ intBuffer.rewind();
1920
+ gl3es3.glDrawBuffers(1, intBuffer);
1921
+ } else {
1922
+ throw new RuntimeException(String.format(MISSING_GLFUNC_ERROR, "glDrawBuffer()"));
1923
+ }
1924
+ }
1989
1925
  }