propane 3.1.0.pre-java → 3.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
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
  }