picrate 0.7.0-java → 0.8.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.mvn/wrapper/MavenWrapperDownloader.java +117 -0
- data/.mvn/wrapper/maven-wrapper.properties +2 -1
- data/.travis.yml +2 -5
- data/CHANGELOG.md +4 -0
- data/README.md +3 -3
- data/Rakefile +15 -27
- data/docs/_config.yml +1 -1
- data/docs/_posts/2018-05-11-arch-linux-arm.md +1 -1
- data/docs/_posts/2018-11-18-building-gem.md +1 -1
- data/lib/picrate/app.rb +1 -1
- data/lib/picrate/native_folder.rb +1 -1
- data/lib/picrate/version.rb +1 -1
- data/mvnw +127 -51
- data/mvnw.cmd +182 -0
- data/pom.rb +39 -30
- data/pom.xml +50 -37
- data/src/main/java/monkstone/ColorUtil.java +1 -1
- data/src/main/java/monkstone/core/LibraryProxy.java +0 -1
- data/src/main/java/monkstone/noise/SimplexNoise.java +1 -1
- data/src/main/java/monkstone/vecmath/GfxRender.java +87 -0
- data/src/main/java/monkstone/vecmath/ShapeRender.java +1 -1
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
- data/src/main/java/processing/awt/PGraphicsJava2D.java +48 -50
- data/src/main/java/processing/awt/PShapeJava2D.java +10 -0
- data/src/main/java/processing/awt/PSurfaceAWT.java +315 -371
- data/src/main/java/processing/core/PApplet.java +15424 -15495
- data/src/main/java/processing/core/PConstants.java +4 -4
- data/src/main/java/processing/core/PFont.java +394 -369
- data/src/main/java/processing/core/PGraphics.java +11 -10
- data/src/main/java/processing/core/PImage.java +1389 -1435
- data/src/main/java/processing/core/PMatrix2D.java +297 -294
- data/src/main/java/processing/core/PMatrix3D.java +641 -594
- data/src/main/java/processing/core/PShape.java +1755 -1784
- data/src/main/java/processing/core/PShapeOBJ.java +145 -133
- data/src/main/java/processing/core/PShapeSVG.java +808 -801
- data/src/main/java/processing/core/PStyle.java +141 -149
- data/src/main/java/processing/core/PSurface.java +111 -117
- data/src/main/java/processing/core/PSurfaceNone.java +178 -187
- data/src/main/java/processing/javafx/PGraphicsFX2D.java +349 -346
- data/src/main/java/processing/opengl/FontTexture.java +40 -59
- data/src/main/java/processing/opengl/FrameBuffer.java +28 -18
- data/src/main/java/processing/opengl/LinePath.java +7 -7
- data/src/main/java/processing/opengl/LineStroker.java +6 -10
- data/src/main/java/processing/opengl/PGL.java +56 -44
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +909 -2338
- data/src/main/java/processing/opengl/PJOGL.java +1722 -1763
- data/src/main/java/processing/opengl/PShader.java +1308 -1192
- data/src/main/java/processing/opengl/PShapeOpenGL.java +487 -1811
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +482 -497
- data/src/main/java/processing/opengl/Texture.java +99 -76
- data/src/main/java/processing/opengl/VertexBuffer.java +41 -43
- data/vendors/Rakefile +1 -1
- metadata +7 -4
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
2
2
|
|
3
|
-
/*
|
3
|
+
/*
|
4
4
|
Part of the Processing project - http://processing.org
|
5
5
|
|
6
6
|
Copyright (c) 2012-15 The Processing Foundation
|
@@ -20,8 +20,7 @@
|
|
20
20
|
Public License along with this library; if not, write to the
|
21
21
|
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
22
22
|
Boston, MA 02111-1307 USA
|
23
|
-
*/
|
24
|
-
|
23
|
+
*/
|
25
24
|
package processing.opengl;
|
26
25
|
|
27
26
|
import processing.core.PApplet;
|
@@ -33,22 +32,21 @@ import processing.core.PImage;
|
|
33
32
|
import java.util.HashMap;
|
34
33
|
|
35
34
|
/**
|
36
|
-
* All the infrastructure needed for optimized font rendering
|
37
|
-
*
|
38
|
-
*
|
39
|
-
*
|
40
|
-
*
|
41
|
-
*
|
42
|
-
*
|
43
|
-
*
|
44
|
-
* glyphs
|
45
|
-
* in the case that the font size is very large, one single
|
46
|
-
* OpenGL texture might not be enough to store all the glyphs,
|
47
|
-
* so PFontTexture also takes care of spreading a single font
|
35
|
+
* All the infrastructure needed for optimized font rendering in OpenGL.
|
36
|
+
* Basically, this special class is needed because fonts in Processing are
|
37
|
+
* handled by a separate PImage for each glyph. For performance reasons, all
|
38
|
+
* these glyphs should be stored in a single OpenGL texture (otherwise,
|
39
|
+
* rendering a string of text would involve binding and un-binding several
|
40
|
+
* textures. PFontTexture manages the correspondence between individual glyphs
|
41
|
+
* and the large OpenGL texture containing them. Also, in the case that the font
|
42
|
+
* size is very large, one single OpenGL texture might not be enough to store
|
43
|
+
* all the glyphs, so PFontTexture also takes care of spreading a single font
|
48
44
|
* over several textures.
|
45
|
+
*
|
49
46
|
* @author Andres Colubri
|
50
47
|
*/
|
51
48
|
class FontTexture implements PConstants {
|
49
|
+
|
52
50
|
protected PGL pgl;
|
53
51
|
protected boolean is3D;
|
54
52
|
|
@@ -70,32 +68,29 @@ class FontTexture implements PConstants {
|
|
70
68
|
initTexture(pg, font);
|
71
69
|
}
|
72
70
|
|
73
|
-
|
74
71
|
protected void allocate() {
|
75
72
|
// Nothing to do here: the font textures will allocate
|
76
73
|
// themselves.
|
77
74
|
}
|
78
75
|
|
79
|
-
|
80
76
|
protected void dispose() {
|
81
|
-
for (
|
82
|
-
|
77
|
+
for (Texture texture : textures) {
|
78
|
+
texture.dispose();
|
83
79
|
}
|
84
80
|
}
|
85
81
|
|
86
|
-
|
87
|
-
protected void initTexture(PGraphicsOpenGL pg, PFont font) {
|
82
|
+
protected final void initTexture(PGraphicsOpenGL pg, PFont font) {
|
88
83
|
lastTex = -1;
|
89
84
|
|
90
85
|
int spow = PGL.nextPowerOfTwo(font.getSize());
|
91
86
|
minSize = PApplet.min(PGraphicsOpenGL.maxTextureSize,
|
92
|
-
|
87
|
+
PApplet.max(PGL.MIN_FONT_TEX_SIZE, spow));
|
93
88
|
maxSize = PApplet.min(PGraphicsOpenGL.maxTextureSize,
|
94
|
-
|
89
|
+
PApplet.max(PGL.MAX_FONT_TEX_SIZE, 2 * spow));
|
95
90
|
|
96
91
|
if (maxSize < spow) {
|
97
|
-
PGraphics.showWarning("The font size is too large to be properly "
|
98
|
-
|
92
|
+
PGraphics.showWarning("The font size is too large to be properly "
|
93
|
+
+ "displayed with OpenGL");
|
99
94
|
}
|
100
95
|
|
101
96
|
addTexture(pg);
|
@@ -104,12 +99,11 @@ class FontTexture implements PConstants {
|
|
104
99
|
offsetY = 0;
|
105
100
|
lineHeight = 0;
|
106
101
|
|
107
|
-
texinfoMap = new HashMap
|
102
|
+
texinfoMap = new HashMap<>();
|
108
103
|
glyphTexinfos = new TextureInfo[font.getGlyphCount()];
|
109
104
|
addAllGlyphsToTexture(pg, font);
|
110
105
|
}
|
111
106
|
|
112
|
-
|
113
107
|
public boolean addTexture(PGraphicsOpenGL pg) {
|
114
108
|
int w, h;
|
115
109
|
boolean resize;
|
@@ -130,14 +124,14 @@ class FontTexture implements PConstants {
|
|
130
124
|
// Bilinear sampling ensures that the texture doesn't look pixelated
|
131
125
|
// either when it is magnified or minified...
|
132
126
|
tex = new Texture(pg, w, h,
|
133
|
-
|
127
|
+
new Texture.Parameters(ARGB, Texture.BILINEAR, false));
|
134
128
|
} else {
|
135
129
|
// ...however, the effect of bilinear sampling is to add some blurriness
|
136
130
|
// to the text in its original size. In 2D, we assume that text will be
|
137
131
|
// shown at its original size, so linear sampling is chosen instead (which
|
138
132
|
// only affects minimized text).
|
139
133
|
tex = new Texture(pg, w, h,
|
140
|
-
|
134
|
+
new Texture.Parameters(ARGB, Texture.LINEAR, false));
|
141
135
|
}
|
142
136
|
|
143
137
|
if (textures == null) {
|
@@ -177,23 +171,19 @@ class FontTexture implements PConstants {
|
|
177
171
|
return resize;
|
178
172
|
}
|
179
173
|
|
180
|
-
|
181
174
|
public void begin() {
|
182
175
|
}
|
183
176
|
|
184
|
-
|
185
177
|
public void end() {
|
186
|
-
for (
|
187
|
-
pgl.disableTexturing(
|
178
|
+
for (Texture texture : textures) {
|
179
|
+
pgl.disableTexturing(texture.glTarget);
|
188
180
|
}
|
189
181
|
}
|
190
182
|
|
191
|
-
|
192
183
|
public PImage getTexture(TextureInfo info) {
|
193
184
|
return images[info.texIndex];
|
194
185
|
}
|
195
186
|
|
196
|
-
|
197
187
|
// Add all the current glyphs to opengl texture.
|
198
188
|
public void addAllGlyphsToTexture(PGraphicsOpenGL pg, PFont font) {
|
199
189
|
// loop over current glyphs.
|
@@ -202,24 +192,20 @@ class FontTexture implements PConstants {
|
|
202
192
|
}
|
203
193
|
}
|
204
194
|
|
205
|
-
|
206
195
|
public void updateGlyphsTexCoords() {
|
207
196
|
// loop over current glyphs.
|
208
|
-
for (
|
209
|
-
TextureInfo tinfo = glyphTexinfos[i];
|
197
|
+
for (TextureInfo tinfo : glyphTexinfos) {
|
210
198
|
if (tinfo != null && tinfo.texIndex == lastTex) {
|
211
199
|
tinfo.updateUV();
|
212
200
|
}
|
213
201
|
}
|
214
202
|
}
|
215
203
|
|
216
|
-
|
217
204
|
public TextureInfo getTexInfo(PFont.Glyph glyph) {
|
218
205
|
TextureInfo info = texinfoMap.get(glyph);
|
219
206
|
return info;
|
220
207
|
}
|
221
208
|
|
222
|
-
|
223
209
|
public TextureInfo addToTexture(PGraphicsOpenGL pg, PFont.Glyph glyph) {
|
224
210
|
int n = glyphTexinfos.length;
|
225
211
|
if (n == 0) {
|
@@ -229,17 +215,16 @@ class FontTexture implements PConstants {
|
|
229
215
|
return glyphTexinfos[n];
|
230
216
|
}
|
231
217
|
|
232
|
-
|
233
218
|
public boolean contextIsOutdated() {
|
234
219
|
boolean outdated = false;
|
235
|
-
for (
|
236
|
-
if (
|
220
|
+
for (Texture texture : textures) {
|
221
|
+
if (texture.contextIsOutdated()) {
|
237
222
|
outdated = true;
|
238
223
|
}
|
239
224
|
}
|
240
225
|
if (outdated) {
|
241
|
-
for (
|
242
|
-
|
226
|
+
for (Texture texture : textures) {
|
227
|
+
texture.dispose();
|
243
228
|
}
|
244
229
|
}
|
245
230
|
return outdated;
|
@@ -251,8 +236,6 @@ class FontTexture implements PConstants {
|
|
251
236
|
// tex.glWidth, tex.glHeight,
|
252
237
|
// 0, 0, tex.glWidth, tex.glHeight);
|
253
238
|
// }
|
254
|
-
|
255
|
-
|
256
239
|
// Adds this glyph to the opengl texture in PFont.
|
257
240
|
protected void addToTexture(PGraphicsOpenGL pg, int idx, PFont.Glyph glyph) {
|
258
241
|
// We add one pixel to avoid issues when sampling the font texture at
|
@@ -271,7 +254,7 @@ class FontTexture implements PConstants {
|
|
271
254
|
int[] rgba = new int[w * h];
|
272
255
|
int t = 0;
|
273
256
|
int p = 0;
|
274
|
-
if (PGL.BIG_ENDIAN)
|
257
|
+
if (PGL.BIG_ENDIAN) {
|
275
258
|
java.util.Arrays.fill(rgba, 0, w, 0xFFFFFF00); // Set the first row to blank pixels.
|
276
259
|
t = w;
|
277
260
|
for (int y = 0; y < glyph.height; y++) {
|
@@ -333,8 +316,8 @@ class FontTexture implements PConstants {
|
|
333
316
|
texinfoMap.put(glyph, tinfo);
|
334
317
|
}
|
335
318
|
|
336
|
-
|
337
319
|
class TextureInfo {
|
320
|
+
|
338
321
|
int texIndex;
|
339
322
|
int width;
|
340
323
|
int height;
|
@@ -344,7 +327,7 @@ class FontTexture implements PConstants {
|
|
344
327
|
int[] pixels;
|
345
328
|
|
346
329
|
TextureInfo(int tidx, int cropX, int cropY, int cropW, int cropH,
|
347
|
-
|
330
|
+
int[] pix) {
|
348
331
|
texIndex = tidx;
|
349
332
|
crop = new int[4];
|
350
333
|
// The region of the texture corresponding to the glyph is surrounded by a
|
@@ -359,21 +342,19 @@ class FontTexture implements PConstants {
|
|
359
342
|
updateTex();
|
360
343
|
}
|
361
344
|
|
362
|
-
|
363
|
-
void updateUV() {
|
345
|
+
final void updateUV() {
|
364
346
|
width = textures[texIndex].glWidth;
|
365
347
|
height = textures[texIndex].glHeight;
|
366
348
|
|
367
|
-
u0 = (float)crop[0] / (float)width;
|
368
|
-
u1 = u0 + (float)crop[2] / (float)width;
|
369
|
-
v0 = (float)(crop[1] + crop[3]) / (float)height;
|
370
|
-
v1 = v0 - (float)crop[3] / (float)height;
|
349
|
+
u0 = (float) crop[0] / (float) width;
|
350
|
+
u1 = u0 + (float) crop[2] / (float) width;
|
351
|
+
v0 = (float) (crop[1] + crop[3]) / (float) height;
|
352
|
+
v1 = v0 - (float) crop[3] / (float) height;
|
371
353
|
}
|
372
354
|
|
373
|
-
|
374
|
-
void updateTex() {
|
355
|
+
final void updateTex() {
|
375
356
|
textures[texIndex].setNative(pixels, crop[0] - 1, crop[1] + crop[3] - 1,
|
376
|
-
|
357
|
+
crop[2] + 2, -crop[3] + 2);
|
377
358
|
}
|
378
359
|
}
|
379
360
|
}
|
@@ -393,9 +393,7 @@ public class FrameBuffer implements PConstants {
|
|
393
393
|
"buffers.");
|
394
394
|
}
|
395
395
|
|
396
|
-
|
397
|
-
colorBufferTex[i] = textures[i];
|
398
|
-
}
|
396
|
+
System.arraycopy(textures, 0, colorBufferTex, 0, numColorBuffers);
|
399
397
|
|
400
398
|
pg.pushFramebuffer();
|
401
399
|
pg.setFramebuffer(this);
|
@@ -474,7 +472,7 @@ public class FrameBuffer implements PConstants {
|
|
474
472
|
*/
|
475
473
|
|
476
474
|
|
477
|
-
protected void allocate() {
|
475
|
+
protected final void allocate() {
|
478
476
|
dispose(); // Just in the case this object is being re-allocated.
|
479
477
|
|
480
478
|
context = pgl.getCurrentContext();
|
@@ -598,13 +596,19 @@ public class FrameBuffer implements PConstants {
|
|
598
596
|
pgl.bindRenderbuffer(PGL.RENDERBUFFER, glDepth);
|
599
597
|
|
600
598
|
int glConst = PGL.DEPTH_COMPONENT16;
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
599
|
+
switch (depthBits) {
|
600
|
+
case 16:
|
601
|
+
glConst = PGL.DEPTH_COMPONENT16;
|
602
|
+
break;
|
603
|
+
case 24:
|
604
|
+
glConst = PGL.DEPTH_COMPONENT24;
|
605
|
+
break;
|
606
|
+
case 32:
|
607
|
+
glConst = PGL.DEPTH_COMPONENT32;
|
608
|
+
break;
|
609
|
+
default:
|
610
|
+
break;
|
611
|
+
}
|
608
612
|
|
609
613
|
if (multisample) {
|
610
614
|
pgl.renderbufferStorageMultisample(PGL.RENDERBUFFER, nsamples, glConst,
|
@@ -635,13 +639,19 @@ public class FrameBuffer implements PConstants {
|
|
635
639
|
pgl.bindRenderbuffer(PGL.RENDERBUFFER, glStencil);
|
636
640
|
|
637
641
|
int glConst = PGL.STENCIL_INDEX1;
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
642
|
+
switch (stencilBits) {
|
643
|
+
case 1:
|
644
|
+
glConst = PGL.STENCIL_INDEX1;
|
645
|
+
break;
|
646
|
+
case 4:
|
647
|
+
glConst = PGL.STENCIL_INDEX4;
|
648
|
+
break;
|
649
|
+
case 8:
|
650
|
+
glConst = PGL.STENCIL_INDEX8;
|
651
|
+
break;
|
652
|
+
default:
|
653
|
+
break;
|
654
|
+
}
|
645
655
|
if (multisample) {
|
646
656
|
pgl.renderbufferStorageMultisample(PGL.RENDERBUFFER, nsamples, glConst,
|
647
657
|
width, height);
|
@@ -357,7 +357,7 @@ public class LinePath {
|
|
357
357
|
|
358
358
|
LinePath path;
|
359
359
|
|
360
|
-
static final int
|
360
|
+
static final int[] CURVE_COORDS = { 2, 2, 0 };
|
361
361
|
|
362
362
|
PathIterator(LinePath p2df) {
|
363
363
|
this.path = p2df;
|
@@ -373,14 +373,14 @@ public class LinePath {
|
|
373
373
|
*/
|
374
374
|
public int currentSegment(float[] coords) {
|
375
375
|
int type = path.pointTypes[typeIdx];
|
376
|
-
int numCoords =
|
376
|
+
int numCoords = CURVE_COORDS[type];
|
377
377
|
if (numCoords > 0) {
|
378
378
|
System.arraycopy(floatCoords, pointIdx, coords, 0, numCoords);
|
379
379
|
int color = path.pointColors[colorIdx];
|
380
380
|
coords[numCoords + 0] = (color >> 24) & 0xFF;
|
381
381
|
coords[numCoords + 1] = (color >> 16) & 0xFF;
|
382
382
|
coords[numCoords + 2] = (color >> 8) & 0xFF;
|
383
|
-
coords[numCoords + 3] = (color
|
383
|
+
coords[numCoords + 3] = (color) & 0xFF;
|
384
384
|
}
|
385
385
|
return type;
|
386
386
|
}
|
@@ -392,7 +392,7 @@ public class LinePath {
|
|
392
392
|
*/
|
393
393
|
public int currentSegment(double[] coords) {
|
394
394
|
int type = path.pointTypes[typeIdx];
|
395
|
-
int numCoords =
|
395
|
+
int numCoords = CURVE_COORDS[type];
|
396
396
|
if (numCoords > 0) {
|
397
397
|
for (int i = 0; i < numCoords; i++) {
|
398
398
|
coords[i] = floatCoords[pointIdx + i];
|
@@ -401,7 +401,7 @@ public class LinePath {
|
|
401
401
|
coords[numCoords + 0] = (color >> 24) & 0xFF;
|
402
402
|
coords[numCoords + 1] = (color >> 16) & 0xFF;
|
403
403
|
coords[numCoords + 2] = (color >> 8) & 0xFF;
|
404
|
-
coords[numCoords + 3] = (color
|
404
|
+
coords[numCoords + 3] = (color) & 0xFF;
|
405
405
|
}
|
406
406
|
return type;
|
407
407
|
}
|
@@ -427,8 +427,8 @@ public class LinePath {
|
|
427
427
|
*/
|
428
428
|
public void next() {
|
429
429
|
int type = path.pointTypes[typeIdx++];
|
430
|
-
if (0 <
|
431
|
-
pointIdx +=
|
430
|
+
if (0 < CURVE_COORDS[type]) {
|
431
|
+
pointIdx += CURVE_COORDS[type];
|
432
432
|
colorIdx++;
|
433
433
|
}
|
434
434
|
}
|
@@ -61,9 +61,9 @@ public class LineStroker {
|
|
61
61
|
|
62
62
|
private boolean[] penIncluded;
|
63
63
|
private int[] join;
|
64
|
-
private int[] offset = new int[2];
|
64
|
+
private final int[] offset = new int[2];
|
65
65
|
private int[] reverse = new int[100];
|
66
|
-
private int[] miter = new int[2];
|
66
|
+
private final int[] miter = new int[2];
|
67
67
|
private long miterLimitSq;
|
68
68
|
private int prev;
|
69
69
|
private int rindex;
|
@@ -118,7 +118,7 @@ public class LineStroker {
|
|
118
118
|
* @param output
|
119
119
|
* an output <code>LineStroker</code>.
|
120
120
|
*/
|
121
|
-
|
121
|
+
private void setOutput(LineStroker output) {
|
122
122
|
this.output = output;
|
123
123
|
}
|
124
124
|
|
@@ -141,7 +141,7 @@ public class LineStroker {
|
|
141
141
|
* required in order to produce consistently shaped end caps and
|
142
142
|
* joins.
|
143
143
|
*/
|
144
|
-
public void setParameters(int lineWidth, int capStyle, int joinStyle,
|
144
|
+
public final void setParameters(int lineWidth, int capStyle, int joinStyle,
|
145
145
|
int miterLimit, PMatrix2D transform) {
|
146
146
|
this.m00 = LinePath.FloatToS15_16(transform.m00);
|
147
147
|
this.m01 = LinePath.FloatToS15_16(transform.m01);
|
@@ -262,18 +262,14 @@ public class LineStroker {
|
|
262
262
|
if (side == 0) {
|
263
263
|
centerSide = side(cx, cy, xa, ya, xb, yb);
|
264
264
|
} else {
|
265
|
-
centerSide = (side == 1)
|
265
|
+
centerSide = (side == 1);
|
266
266
|
}
|
267
267
|
for (int i = 0; i < numPenSegments; i++) {
|
268
268
|
px = cx + pen_dx[i];
|
269
269
|
py = cy + pen_dy[i];
|
270
270
|
|
271
271
|
boolean penSide = side(px, py, xa, ya, xb, yb);
|
272
|
-
|
273
|
-
penIncluded[i] = true;
|
274
|
-
} else {
|
275
|
-
penIncluded[i] = false;
|
276
|
-
}
|
272
|
+
penIncluded[i] = penSide != centerSide;
|
277
273
|
}
|
278
274
|
|
279
275
|
int start = -1, end = -1;
|
@@ -131,12 +131,12 @@ public abstract class PGL {
|
|
131
131
|
* shorts as primitive type we have 2^15 = 32768 as the maximum number of
|
132
132
|
* vertices that can be referred to within a single VBO.
|
133
133
|
*/
|
134
|
-
protected static int MAX_VERTEX_INDEX = 32767;
|
134
|
+
protected static final int MAX_VERTEX_INDEX = 32767;
|
135
135
|
|
136
136
|
/**
|
137
137
|
*
|
138
138
|
*/
|
139
|
-
protected static int MAX_VERTEX_INDEX1 = MAX_VERTEX_INDEX + 1;
|
139
|
+
protected static final int MAX_VERTEX_INDEX1 = MAX_VERTEX_INDEX + 1;
|
140
140
|
|
141
141
|
/** Count of tessellated fill, line or point vertices that will
|
142
142
|
* trigger a flush in the immediate mode. It doesn't necessarily
|
@@ -643,7 +643,7 @@ public abstract class PGL {
|
|
643
643
|
// Constants
|
644
644
|
|
645
645
|
/** Size of different types in bytes */
|
646
|
-
protected static int SIZEOF_SHORT = Short.SIZE / 8;
|
646
|
+
protected static final int SIZEOF_SHORT = Short.SIZE / 8;
|
647
647
|
|
648
648
|
/**
|
649
649
|
*
|
@@ -827,15 +827,16 @@ public abstract class PGL {
|
|
827
827
|
* @return
|
828
828
|
*/
|
829
829
|
static public int smoothToSamples(int smooth) {
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
830
|
+
switch (smooth) {
|
831
|
+
case 0:
|
832
|
+
// smooth(0) is noSmooth(), which is 1x sampling
|
833
|
+
return 1;
|
834
|
+
case 1:
|
835
|
+
// smooth(1) means "default smoothing", which is 2x for OpenGL
|
836
|
+
return 2;
|
837
|
+
default:
|
838
|
+
// smooth(N) can be used for 4x, 8x, etc
|
839
|
+
return smooth;
|
839
840
|
}
|
840
841
|
}
|
841
842
|
|
@@ -905,7 +906,7 @@ public abstract class PGL {
|
|
905
906
|
*
|
906
907
|
* @return
|
907
908
|
*/
|
908
|
-
protected boolean isFBOBacked() {
|
909
|
+
protected boolean isFBOBacked() {
|
909
910
|
return fboLayerEnabled;
|
910
911
|
}
|
911
912
|
|
@@ -966,7 +967,7 @@ public abstract class PGL {
|
|
966
967
|
protected boolean getDepthTest() {
|
967
968
|
intBuffer.rewind();
|
968
969
|
getBooleanv(DEPTH_TEST, intBuffer);
|
969
|
-
return intBuffer.get(0)
|
970
|
+
return intBuffer.get(0) != 0;
|
970
971
|
}
|
971
972
|
|
972
973
|
/**
|
@@ -976,7 +977,7 @@ public abstract class PGL {
|
|
976
977
|
protected boolean getDepthWriteMask() {
|
977
978
|
intBuffer.rewind();
|
978
979
|
getBooleanv(DEPTH_WRITEMASK, intBuffer);
|
979
|
-
return intBuffer.get(0)
|
980
|
+
return intBuffer.get(0) != 0;
|
980
981
|
}
|
981
982
|
|
982
983
|
/**
|
@@ -1306,13 +1307,13 @@ public abstract class PGL {
|
|
1306
1307
|
float ba = ((stopButtonColor >> 24) & 0xFF) / 255f;
|
1307
1308
|
float br = ((stopButtonColor >> 16) & 0xFF) / 255f;
|
1308
1309
|
float bg = ((stopButtonColor >> 8) & 0xFF) / 255f;
|
1309
|
-
float bb = ((stopButtonColor
|
1310
|
+
float bb = ((stopButtonColor) & 0xFF) / 255f;
|
1310
1311
|
for (int i = 0; i < color.length; i++) {
|
1311
1312
|
int c = closeButtonPix[i];
|
1312
1313
|
int a = (int)(ba * ((c >> 24) & 0xFF));
|
1313
1314
|
int r = (int)(br * ((c >> 16) & 0xFF));
|
1314
1315
|
int g = (int)(bg * ((c >> 8) & 0xFF));
|
1315
|
-
int b = (int)(bb * ((c
|
1316
|
+
int b = (int)(bb * ((c) & 0xFF));
|
1316
1317
|
color[i] = javaToNativeARGB((a << 24) | (r << 16) | (g << 8) | b);
|
1317
1318
|
}
|
1318
1319
|
IntBuffer buf = allocateIntBuffer(color);
|
@@ -1614,12 +1615,18 @@ public abstract class PGL {
|
|
1614
1615
|
// separate depth and stencil buffers
|
1615
1616
|
if (0 < depthBits) {
|
1616
1617
|
int depthComponent = DEPTH_COMPONENT16;
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1618
|
+
switch (depthBits) {
|
1619
|
+
case 32:
|
1620
|
+
depthComponent = DEPTH_COMPONENT32;
|
1621
|
+
break;
|
1622
|
+
case 24:
|
1623
|
+
depthComponent = DEPTH_COMPONENT24;
|
1624
|
+
break;
|
1625
|
+
case 16:
|
1626
|
+
depthComponent = DEPTH_COMPONENT16;
|
1627
|
+
break;
|
1628
|
+
default:
|
1629
|
+
break;
|
1623
1630
|
}
|
1624
1631
|
|
1625
1632
|
IntBuffer depthBuf = multisample ? glMultiDepth : glDepth;
|
@@ -1638,12 +1645,18 @@ public abstract class PGL {
|
|
1638
1645
|
|
1639
1646
|
if (0 < stencilBits) {
|
1640
1647
|
int stencilIndex = STENCIL_INDEX1;
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1648
|
+
switch (stencilBits) {
|
1649
|
+
case 8:
|
1650
|
+
stencilIndex = STENCIL_INDEX8;
|
1651
|
+
break;
|
1652
|
+
case 4:
|
1653
|
+
stencilIndex = STENCIL_INDEX4;
|
1654
|
+
break;
|
1655
|
+
case 1:
|
1656
|
+
stencilIndex = STENCIL_INDEX1;
|
1657
|
+
break;
|
1658
|
+
default:
|
1659
|
+
break;
|
1647
1660
|
}
|
1648
1661
|
|
1649
1662
|
IntBuffer stencilBuf = multisample ? glMultiStencil : glStencil;
|
@@ -2824,8 +2837,7 @@ public abstract class PGL {
|
|
2824
2837
|
* @return
|
2825
2838
|
*/
|
2826
2839
|
protected static boolean containsVersionDirective(String[] shSrc) {
|
2827
|
-
for (
|
2828
|
-
String line = shSrc[i];
|
2840
|
+
for (String line : shSrc) {
|
2829
2841
|
int versionIndex = line.indexOf("#version");
|
2830
2842
|
if (versionIndex >= 0) {
|
2831
2843
|
int commentIndex = line.indexOf("//");
|
@@ -2888,7 +2900,7 @@ public abstract class PGL {
|
|
2888
2900
|
protected boolean compiled(int shader) {
|
2889
2901
|
intBuffer.rewind();
|
2890
2902
|
getShaderiv(shader, COMPILE_STATUS, intBuffer);
|
2891
|
-
return intBuffer.get(0)
|
2903
|
+
return intBuffer.get(0) != 0;
|
2892
2904
|
}
|
2893
2905
|
|
2894
2906
|
/**
|
@@ -2899,7 +2911,7 @@ public abstract class PGL {
|
|
2899
2911
|
protected boolean linked(int program) {
|
2900
2912
|
intBuffer.rewind();
|
2901
2913
|
getProgramiv(program, LINK_STATUS, intBuffer);
|
2902
|
-
return intBuffer.get(0)
|
2914
|
+
return intBuffer.get(0) != 0;
|
2903
2915
|
}
|
2904
2916
|
|
2905
2917
|
/**
|
@@ -2970,9 +2982,9 @@ public abstract class PGL {
|
|
2970
2982
|
|
2971
2983
|
int[] res = {0, 0, 0};
|
2972
2984
|
String[] parts = version.split(" ");
|
2973
|
-
for (
|
2974
|
-
if (0 <
|
2975
|
-
String
|
2985
|
+
for (String part : parts) {
|
2986
|
+
if (0 < part.indexOf(".")) {
|
2987
|
+
String[] nums = part.split("\\.");
|
2976
2988
|
try {
|
2977
2989
|
res[0] = Integer.parseInt(nums[0]);
|
2978
2990
|
} catch (NumberFormatException e) { }
|
@@ -3001,10 +3013,10 @@ public abstract class PGL {
|
|
3001
3013
|
int major = getGLVersion()[0];
|
3002
3014
|
if (major < 2) {
|
3003
3015
|
String ext = getString(EXTENSIONS);
|
3004
|
-
return ext.
|
3005
|
-
|
3006
|
-
|
3007
|
-
|
3016
|
+
return ext.contains("_framebuffer_object") &&
|
3017
|
+
ext.contains("_vertex_shader") &&
|
3018
|
+
ext.contains("_shader_objects") &&
|
3019
|
+
ext.contains("_shading_language");
|
3008
3020
|
} else {
|
3009
3021
|
return true;
|
3010
3022
|
}
|
@@ -3021,10 +3033,10 @@ public abstract class PGL {
|
|
3021
3033
|
int major = getGLVersion()[0];
|
3022
3034
|
if (major < 2) {
|
3023
3035
|
String ext = getString(EXTENSIONS);
|
3024
|
-
return ext.
|
3025
|
-
|
3026
|
-
|
3027
|
-
|
3036
|
+
return ext.contains("_fragment_shader") &&
|
3037
|
+
ext.contains("_vertex_shader") &&
|
3038
|
+
ext.contains("_shader_objects") &&
|
3039
|
+
ext.contains("_shading_language");
|
3028
3040
|
} else {
|
3029
3041
|
return true;
|
3030
3042
|
}
|