picrate 1.2.4-java → 2.1.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile +3 -1
- data/README.md +11 -10
- data/Rakefile +10 -9
- data/bin/picrate +3 -1
- data/docs/_config.yml +1 -1
- data/docs/_editors/geany.md +1 -0
- data/docs/_gems/gems/gems.md +1 -1
- data/docs/_methods/alternative_methods.md +2 -1
- data/docs/_posts/2018-05-06-getting_started.md +4 -4
- data/docs/_posts/2018-05-06-install_jruby.md +5 -11
- data/docs/_posts/2018-05-11-arch-linux-arm.md +1 -11
- data/docs/_posts/2018-11-18-building-gem.md +2 -2
- data/docs/_posts/2018-11-27-getting_started_geany.md +1 -1
- data/docs/_posts/2019-11-11-getting_started_buster.md +4 -7
- data/docs/_posts/{2018-06-26-auto_install_picrate.md → 2020-03-09-auto_install_picrate.md} +9 -6
- data/docs/_posts/2020-05-11-getting_started_manjaro.md +94 -0
- data/docs/about.md +1 -1
- data/lib/picrate.rb +1 -1
- data/lib/picrate/app.rb +11 -3
- data/lib/picrate/creators/parameters.rb +8 -8
- data/lib/picrate/creators/sketch_factory.rb +5 -3
- data/lib/picrate/helper_methods.rb +21 -21
- data/lib/picrate/helpers/numeric.rb +2 -0
- data/lib/picrate/library.rb +5 -1
- data/lib/picrate/library_loader.rb +2 -0
- data/lib/picrate/native_folder.rb +2 -1
- data/lib/picrate/native_loader.rb +3 -0
- data/lib/picrate/runner.rb +1 -0
- data/lib/picrate/version.rb +1 -1
- data/library/boids/boids.rb +17 -8
- data/library/chooser/chooser.rb +10 -9
- data/library/color_group/color_group.rb +2 -0
- data/library/control_panel/control_panel.rb +7 -4
- data/library/dxf/dxf.rb +2 -0
- data/library/library_proxy/library_proxy.rb +2 -0
- data/library/net/net.rb +2 -0
- data/library/slider/slider.rb +24 -23
- data/library/vector_utils/vector_utils.rb +4 -0
- data/library/video_event/video_event.rb +2 -0
- data/picrate.gemspec +13 -14
- data/pom.rb +28 -26
- data/pom.xml +18 -6
- data/src/main/java/monkstone/ColorUtil.java +1 -1
- data/src/main/java/monkstone/MathToolModule.java +1 -1
- data/src/main/java/monkstone/PicrateLibrary.java +8 -8
- data/src/main/java/monkstone/fastmath/Deglut.java +16 -16
- data/src/main/java/monkstone/filechooser/Chooser.java +1 -1
- data/src/main/java/monkstone/noise/SimplexNoise.java +3 -3
- data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +12 -12
- data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SliderBar.java +1 -1
- data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
- data/src/main/java/monkstone/slider/WheelHandler.java +1 -1
- data/src/main/java/monkstone/vecmath/package-info.java +1 -1
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -1
- data/src/main/java/monkstone/videoevent/CaptureEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/MovieEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/package-info.java +1 -1
- data/src/main/java/processing/awt/PGraphicsJava2D.java +33 -36
- data/src/main/java/processing/awt/PImageAWT.java +377 -0
- data/src/main/java/processing/awt/PSurfaceAWT.java +0 -20
- data/src/main/java/processing/awt/ShimAWT.java +545 -0
- data/src/main/java/processing/core/PApplet.java +699 -1523
- data/src/main/java/processing/core/PConstants.java +180 -180
- data/src/main/java/processing/core/PFont.java +2 -2
- data/src/main/java/processing/core/PGraphics.java +190 -176
- data/src/main/java/processing/core/PImage.java +1536 -1721
- data/src/main/java/processing/core/PMatrix.java +39 -39
- data/src/main/java/processing/core/PSurface.java +69 -103
- data/src/main/java/processing/core/PSurfaceNone.java +29 -0
- data/src/main/java/processing/core/PVector.java +2 -2
- data/src/main/java/processing/data/FloatDict.java +251 -284
- data/src/main/java/processing/data/TableRow.java +32 -32
- data/src/main/java/processing/dxf/RawDXF.java +3 -3
- data/src/main/java/processing/net/Client.java +1 -1
- data/src/main/java/processing/opengl/PGL.java +1016 -4132
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +223 -184
- data/src/main/java/processing/opengl/PJOGL.java +374 -1526
- data/src/main/java/processing/opengl/PShapeOpenGL.java +5 -6
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +262 -147
- data/test/color_group_test.rb +4 -4
- data/test/deglut_spec_test.rb +2 -0
- data/test/helper_methods_test.rb +41 -13
- data/test/math_tool_test.rb +46 -37
- data/test/respond_to_test.rb +5 -3
- data/test/sketches/key_event.rb +2 -2
- data/test/sketches/library/my_library/my_library.rb +3 -0
- data/test/test_helper.rb +2 -0
- data/test/vecmath_spec_test.rb +30 -19
- data/vendors/Rakefile +8 -5
- data/vendors/{picrate_sketches.geany → geany.rb} +32 -7
- metadata +25 -46
- data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
- data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
@@ -47,13 +47,17 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
47
47
|
/** Font cache for texture objects. */
|
48
48
|
protected WeakHashMap<PFont, FontTexture> fontMap;
|
49
49
|
|
50
|
+
// Blocking save
|
51
|
+
protected volatile Object saveBlocker;
|
52
|
+
private volatile Optional<String> saveTargetMaybe;
|
53
|
+
|
50
54
|
// ........................................................
|
51
55
|
|
52
56
|
// Disposal of native resources
|
53
57
|
// Using the technique alternative to finalization described in:
|
54
58
|
// http://www.oracle.com/technetwork/articles/java/finalization-137655.html
|
55
59
|
private static final ReferenceQueue<Object> refQueue = new ReferenceQueue<>();
|
56
|
-
private static final List<Disposable
|
60
|
+
private static final List<Disposable<?>> reachableWeakReferences =
|
57
61
|
new LinkedList<>();
|
58
62
|
|
59
63
|
static final private int MAX_DRAIN_GLRES_ITERATIONS = 10;
|
@@ -61,8 +65,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
61
65
|
static void drainRefQueueBounded() {
|
62
66
|
int iterations = 0;
|
63
67
|
while (iterations < MAX_DRAIN_GLRES_ITERATIONS) {
|
64
|
-
Disposable
|
65
|
-
(Disposable
|
68
|
+
Disposable<?> res =
|
69
|
+
(Disposable<?>) refQueue.poll();
|
66
70
|
if (res == null) {
|
67
71
|
break;
|
68
72
|
}
|
@@ -568,6 +572,9 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
568
572
|
public PGraphicsOpenGL() {
|
569
573
|
pgl = createPGL(this);
|
570
574
|
|
575
|
+
saveTargetMaybe = Optional.empty();
|
576
|
+
saveBlocker = new Object();
|
577
|
+
|
571
578
|
if (intBuffer == null) {
|
572
579
|
intBuffer = PGL.allocateIntBuffer(2);
|
573
580
|
floatBuffer = PGL.allocateFloatBuffer(2);
|
@@ -709,7 +716,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
709
716
|
|
710
717
|
// Factory method
|
711
718
|
protected PGL createPGL(PGraphicsOpenGL pg) {
|
712
|
-
return new PJOGL(pg);
|
719
|
+
return new PJOGL(pg, () -> { onRender(); });
|
713
720
|
// return new PGLES(pg);
|
714
721
|
}
|
715
722
|
|
@@ -751,22 +758,35 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
751
758
|
}
|
752
759
|
|
753
760
|
|
761
|
+
@Override
|
754
762
|
public boolean saveImpl(String filename) {
|
755
763
|
// return super.save(filename); // ASYNC save frame using PBOs not yet available on Android
|
756
764
|
|
757
765
|
if (getHint(DISABLE_ASYNC_SAVEFRAME)) {
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
boolean result = super.save(filename);
|
763
|
-
format = prevFormat;
|
764
|
-
return result;
|
766
|
+
saveTargetMaybe = Optional.of(filename);
|
767
|
+
|
768
|
+
if (!drawing) {
|
769
|
+
beginDraw();
|
765
770
|
}
|
771
|
+
flush();
|
772
|
+
updatePixelSize();
|
773
|
+
endDraw(); // Briefly stop drawing
|
766
774
|
|
767
|
-
|
775
|
+
synchronized(saveBlocker) {
|
776
|
+
try {
|
777
|
+
while (saveTargetMaybe.isPresent()) {
|
778
|
+
saveBlocker.wait();
|
779
|
+
}
|
780
|
+
beginDraw(); // Resume drawing
|
781
|
+
return true;
|
782
|
+
} catch (InterruptedException e) {
|
783
|
+
return false;
|
784
|
+
}
|
785
|
+
}
|
768
786
|
}
|
769
787
|
|
788
|
+
boolean needEndDraw = false;
|
789
|
+
|
770
790
|
if (asyncImageSaver == null) {
|
771
791
|
asyncImageSaver = new AsyncImageSaver();
|
772
792
|
}
|
@@ -780,7 +800,6 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
780
800
|
}
|
781
801
|
|
782
802
|
if (asyncPixelReader != null && !loaded) {
|
783
|
-
boolean needEndDraw = false;
|
784
803
|
if (!drawing) {
|
785
804
|
beginDraw();
|
786
805
|
needEndDraw = true;
|
@@ -809,6 +828,21 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
809
828
|
}
|
810
829
|
|
811
830
|
|
831
|
+
private void onRender() {
|
832
|
+
if (saveTargetMaybe.isEmpty()) {
|
833
|
+
return; // Nothing to save
|
834
|
+
}
|
835
|
+
|
836
|
+
PImage outputImage = pgl.screenshot();
|
837
|
+
outputImage.save(saveTargetMaybe.get());
|
838
|
+
saveTargetMaybe = Optional.empty();
|
839
|
+
|
840
|
+
synchronized(saveBlocker) {
|
841
|
+
saveBlocker.notify();
|
842
|
+
}
|
843
|
+
}
|
844
|
+
|
845
|
+
|
812
846
|
//////////////////////////////////////////////////////////////
|
813
847
|
|
814
848
|
// IMAGE METADATA FOR THIS RENDERER
|
@@ -919,7 +953,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
919
953
|
int glId;
|
920
954
|
|
921
955
|
private PGL pgl;
|
922
|
-
private int context;
|
956
|
+
private final int context;
|
923
957
|
|
924
958
|
public GLResourceVertexBuffer(VertexBuffer vbo) {
|
925
959
|
super(vbo);
|
@@ -970,7 +1004,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
970
1004
|
int glFragment;
|
971
1005
|
|
972
1006
|
private PGL pgl;
|
973
|
-
private int context;
|
1007
|
+
private final int context;
|
974
1008
|
|
975
1009
|
public GLResourceShader(PShader sh) {
|
976
1010
|
super(sh);
|
@@ -1190,7 +1224,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
1190
1224
|
if (!polyBuffersCreated || polyBuffersContextIsOutdated()) {
|
1191
1225
|
polyBuffersContext = pgl.getCurrentContext();
|
1192
1226
|
|
1193
|
-
bufPolyVertex = new VertexBuffer(this, PGL.ARRAY_BUFFER,
|
1227
|
+
bufPolyVertex = new VertexBuffer(this, PGL.ARRAY_BUFFER, 4, PGL.SIZEOF_FLOAT);
|
1194
1228
|
bufPolyColor = new VertexBuffer(this, PGL.ARRAY_BUFFER, 1, PGL.SIZEOF_INT);
|
1195
1229
|
bufPolyNormal = new VertexBuffer(this, PGL.ARRAY_BUFFER, 3, PGL.SIZEOF_FLOAT);
|
1196
1230
|
bufPolyTexcoord = new VertexBuffer(this, PGL.ARRAY_BUFFER, 2, PGL.SIZEOF_FLOAT);
|
@@ -2390,8 +2424,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
2390
2424
|
|
2391
2425
|
protected void flushPolys() {
|
2392
2426
|
boolean customShader = polyShader != null;
|
2393
|
-
boolean needNormals = customShader
|
2394
|
-
boolean needTexCoords = customShader
|
2427
|
+
boolean needNormals = customShader && polyShader.accessNormals();
|
2428
|
+
boolean needTexCoords = customShader && polyShader.accessTexCoords();
|
2395
2429
|
|
2396
2430
|
updatePolyBuffers(lights, texCache.hasTextures, needNormals, needTexCoords);
|
2397
2431
|
|
@@ -2464,8 +2498,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
2464
2498
|
|
2465
2499
|
protected void flushSortedPolys() {
|
2466
2500
|
boolean customShader = polyShader != null;
|
2467
|
-
boolean needNormals = customShader
|
2468
|
-
boolean needTexCoords = customShader
|
2501
|
+
boolean needNormals = customShader && polyShader.accessNormals();
|
2502
|
+
boolean needTexCoords = customShader && polyShader.accessTexCoords();
|
2469
2503
|
|
2470
2504
|
sorter.sort(tessGeo);
|
2471
2505
|
|
@@ -3516,7 +3550,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3516
3550
|
|
3517
3551
|
|
3518
3552
|
@Override
|
3519
|
-
protected float textWidthImpl(char buffer
|
3553
|
+
protected float textWidthImpl(char[] buffer, int start, int stop) {
|
3520
3554
|
if (textFont == null) defaultFontOrDeath("textWidth");
|
3521
3555
|
Object font = textFont.getNative();
|
3522
3556
|
float twidth = 0;
|
@@ -3541,7 +3575,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3541
3575
|
* Implementation of actual drawing for a line of text.
|
3542
3576
|
*/
|
3543
3577
|
@Override
|
3544
|
-
protected void textLineImpl(char buffer
|
3578
|
+
protected void textLineImpl(char[] buffer, int start, int stop,
|
3545
3579
|
float x, float y) {
|
3546
3580
|
|
3547
3581
|
if (textMode == SHAPE && textFont.getNative() == null) {
|
@@ -3685,7 +3719,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3685
3719
|
PGL.FontOutline outline = pgl.createFontOutline(ch, textFont.getNative());
|
3686
3720
|
|
3687
3721
|
// six element array received from the Java2D path iterator
|
3688
|
-
float
|
3722
|
+
float[] textPoints = new float[6];
|
3689
3723
|
float lastX = 0;
|
3690
3724
|
float lastY = 0;
|
3691
3725
|
|
@@ -3803,6 +3837,13 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3803
3837
|
}
|
3804
3838
|
|
3805
3839
|
|
3840
|
+
static protected void invTranslate(PMatrix2D matrix,
|
3841
|
+
float tx, float ty) {
|
3842
|
+
matrix.preApply(1, 0, -tx,
|
3843
|
+
0, 1, -ty);
|
3844
|
+
}
|
3845
|
+
|
3846
|
+
|
3806
3847
|
static protected float matrixScale(PMatrix matrix) {
|
3807
3848
|
// Volumetric scaling factor that is associated to the given
|
3808
3849
|
// transformation matrix, which is given by the absolute value of its
|
@@ -3888,8 +3929,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3888
3929
|
}
|
3889
3930
|
|
3890
3931
|
|
3891
|
-
static
|
3892
|
-
|
3932
|
+
static protected void invRotate(PMatrix3D matrix, float angle,
|
3933
|
+
float v0, float v1, float v2) {
|
3893
3934
|
float c = PApplet.cos(-angle);
|
3894
3935
|
float s = PApplet.sin(-angle);
|
3895
3936
|
float t = 1.0f - c;
|
@@ -3901,6 +3942,11 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3901
3942
|
}
|
3902
3943
|
|
3903
3944
|
|
3945
|
+
static protected void invRotate(PMatrix2D matrix, float angle) {
|
3946
|
+
matrix.rotate(-angle);
|
3947
|
+
}
|
3948
|
+
|
3949
|
+
|
3904
3950
|
/**
|
3905
3951
|
* Same as scale(s, s, s).
|
3906
3952
|
*/
|
@@ -3942,6 +3988,11 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
3942
3988
|
}
|
3943
3989
|
|
3944
3990
|
|
3991
|
+
static protected void invScale(PMatrix2D matrix, float x, float y) {
|
3992
|
+
matrix.preApply(1/x, 0, 0, 1/y, 0, 0);
|
3993
|
+
}
|
3994
|
+
|
3995
|
+
|
3945
3996
|
@Override
|
3946
3997
|
public void shearX(float angle) {
|
3947
3998
|
float t = (float) Math.tan(angle);
|
@@ -4580,6 +4631,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
4580
4631
|
* against) the current perspective matrix.
|
4581
4632
|
* <P>
|
4582
4633
|
* Implementation based on the explanation in the OpenGL blue book.
|
4634
|
+
* @param znear
|
4635
|
+
* @param zfar
|
4583
4636
|
*/
|
4584
4637
|
@Override
|
4585
4638
|
public void frustum(float left, float right, float bottom, float top,
|
@@ -5352,9 +5405,9 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
5352
5405
|
// showWarning() and showException() available from PGraphics.
|
5353
5406
|
|
5354
5407
|
/**
|
5355
|
-
* Report on anything from glError().
|
5356
|
-
* otherwise it'll
|
5357
|
-
*
|
5408
|
+
* Report on anything from glError().
|
5409
|
+
* Don't use this inside glBegin/glEnd otherwise it'll
|
5410
|
+
* throw an GL_INVALID_OPERATION error.
|
5358
5411
|
*/
|
5359
5412
|
protected void report(String where) {
|
5360
5413
|
if (!hints[DISABLE_OPENGL_ERRORS]) {
|
@@ -6366,11 +6419,10 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6366
6419
|
|
6367
6420
|
|
6368
6421
|
/**
|
6369
|
-
* Not an approved function, this will change or be removed in the future.
|
6370
|
-
* utility method returns the texture associated to the renderer's.
|
6371
|
-
* surface, making sure is updated to reflect the current contents
|
6372
|
-
* screen (or offscreen drawing surface).
|
6373
|
-
* @return
|
6422
|
+
* Not an approved function, this will change or be removed in the future.
|
6423
|
+
* This utility method returns the texture associated to the renderer's.
|
6424
|
+
* drawing surface, making sure is updated to reflect the current contents
|
6425
|
+
* off the screen (or offscreen drawing surface).
|
6374
6426
|
*/
|
6375
6427
|
public Texture getTexture() {
|
6376
6428
|
return getTexture(true);
|
@@ -6379,8 +6431,6 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6379
6431
|
|
6380
6432
|
/**
|
6381
6433
|
* Not an approved function either, don't use it.
|
6382
|
-
* @param load
|
6383
|
-
* @return
|
6384
6434
|
*/
|
6385
6435
|
public Texture getTexture(boolean load) {
|
6386
6436
|
if (load) loadTexture();
|
@@ -6389,11 +6439,11 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6389
6439
|
|
6390
6440
|
|
6391
6441
|
/**
|
6392
|
-
* Not an approved function, this will change or be removed in the future.
|
6442
|
+
* Not an approved function, this will change or be removed in the future.
|
6443
|
+
* This utility method returns the texture associated to the image.
|
6393
6444
|
* creating and/or updating it if needed.
|
6394
6445
|
*
|
6395
6446
|
* @param img the image to have a texture metadata associated to it
|
6396
|
-
* @return
|
6397
6447
|
*/
|
6398
6448
|
public Texture getTexture(PImage img) {
|
6399
6449
|
Texture tex = (Texture)initCache(img);
|
@@ -6419,7 +6469,6 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6419
6469
|
/**
|
6420
6470
|
* Not an approved function, test its use in libraries to grab the FB objects
|
6421
6471
|
* for offscreen PGraphics.
|
6422
|
-
* @return
|
6423
6472
|
*/
|
6424
6473
|
public FrameBuffer getFrameBuffer() {
|
6425
6474
|
return getFrameBuffer(false);
|
@@ -6444,9 +6493,16 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6444
6493
|
if (tex == null || tex.contextIsOutdated()) {
|
6445
6494
|
tex = addTexture(img);
|
6446
6495
|
if (tex != null) {
|
6496
|
+
boolean dispose = img.pixels == null;
|
6447
6497
|
img.loadPixels();
|
6448
6498
|
tex.set(img.pixels, img.format);
|
6449
6499
|
img.setModified();
|
6500
|
+
if (dispose) {
|
6501
|
+
// We only used the pixels to load the image into the texture and the user did not request
|
6502
|
+
// to load the pixels, so we should dispose the pixels array to avoid wasting memory
|
6503
|
+
img.pixels = null;
|
6504
|
+
img.loaded = false;
|
6505
|
+
}
|
6450
6506
|
}
|
6451
6507
|
}
|
6452
6508
|
return tex;
|
@@ -6478,7 +6534,6 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6478
6534
|
* This utility method creates a texture for the provided image, and adds it
|
6479
6535
|
* to the metadata cache of the image.
|
6480
6536
|
* @param img the image to have a texture metadata associated to it
|
6481
|
-
* @return
|
6482
6537
|
*/
|
6483
6538
|
protected Texture addTexture(PImage img) {
|
6484
6539
|
Texture.Parameters params =
|
@@ -6830,6 +6885,9 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6830
6885
|
} else {
|
6831
6886
|
// offscreen surfaces are transparent by default.
|
6832
6887
|
background((backgroundColor & 0xFFFFFF));
|
6888
|
+
|
6889
|
+
// Recreate offscreen FBOs
|
6890
|
+
restartPGL();
|
6833
6891
|
}
|
6834
6892
|
|
6835
6893
|
// Sets the default projection and camera (initializes modelview).
|
@@ -6915,30 +6973,16 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
6915
6973
|
maxTextureSize = intBuffer.get(0);
|
6916
6974
|
|
6917
6975
|
// work around runtime exceptions in Broadcom's VC IV driver
|
6918
|
-
|
6919
|
-
|
6920
|
-
|
6921
|
-
|
6976
|
+
// if (false == OPENGL_RENDERER.equals("VideoCore IV HW")) {
|
6977
|
+
pgl.getIntegerv(PGL.MAX_SAMPLES, intBuffer);
|
6978
|
+
maxSamples = intBuffer.get(0);
|
6979
|
+
// }
|
6922
6980
|
|
6923
6981
|
if (anisoSamplingSupported) {
|
6924
6982
|
pgl.getFloatv(PGL.MAX_TEXTURE_MAX_ANISOTROPY, floatBuffer);
|
6925
6983
|
maxAnisoAmount = floatBuffer.get(0);
|
6926
6984
|
}
|
6927
6985
|
|
6928
|
-
// overwrite the default shaders with vendor specific versions
|
6929
|
-
// if needed
|
6930
|
-
if (OPENGL_RENDERER.equals("VideoCore IV HW")) { // Broadcom's binary driver for Raspberry Pi
|
6931
|
-
defLightShaderVertURL =
|
6932
|
-
PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/LightVert-brcm.glsl");
|
6933
|
-
defTexlightShaderVertURL =
|
6934
|
-
PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/TexLightVert-brcm.glsl");
|
6935
|
-
} else if (OPENGL_RENDERER.contains("VC4")) { // Mesa driver for same hardware
|
6936
|
-
defLightShaderVertURL =
|
6937
|
-
PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/LightVert-vc4.glsl");
|
6938
|
-
defTexlightShaderVertURL =
|
6939
|
-
PGraphicsOpenGL.class.getResource("/processing/opengl/shaders/TexLightVert-vc4.glsl");
|
6940
|
-
}
|
6941
|
-
|
6942
6986
|
glParamsRead = true;
|
6943
6987
|
}
|
6944
6988
|
|
@@ -7943,61 +7987,61 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
7943
7987
|
// Expand arrays
|
7944
7988
|
|
7945
7989
|
void expandVertices(int n) {
|
7946
|
-
float
|
7990
|
+
float[] temp = new float[3 * n];
|
7947
7991
|
PApplet.arrayCopy(vertices, 0, temp, 0, 3 * vertexCount);
|
7948
7992
|
vertices = temp;
|
7949
7993
|
}
|
7950
7994
|
|
7951
7995
|
void expandColors(int n) {
|
7952
|
-
int
|
7996
|
+
int[] temp = new int[n];
|
7953
7997
|
PApplet.arrayCopy(colors, 0, temp, 0, vertexCount);
|
7954
7998
|
colors = temp;
|
7955
7999
|
}
|
7956
8000
|
|
7957
8001
|
void expandNormals(int n) {
|
7958
|
-
float
|
8002
|
+
float[] temp = new float[3 * n];
|
7959
8003
|
PApplet.arrayCopy(normals, 0, temp, 0, 3 * vertexCount);
|
7960
8004
|
normals = temp;
|
7961
8005
|
}
|
7962
8006
|
|
7963
8007
|
void expandTexCoords(int n) {
|
7964
|
-
float
|
8008
|
+
float[] temp = new float[2 * n];
|
7965
8009
|
PApplet.arrayCopy(texcoords, 0, temp, 0, 2 * vertexCount);
|
7966
8010
|
texcoords = temp;
|
7967
8011
|
}
|
7968
8012
|
|
7969
8013
|
void expandStrokeColors(int n) {
|
7970
|
-
int
|
8014
|
+
int[] temp = new int[n];
|
7971
8015
|
PApplet.arrayCopy(strokeColors, 0, temp, 0, vertexCount);
|
7972
8016
|
strokeColors = temp;
|
7973
8017
|
}
|
7974
8018
|
|
7975
8019
|
void expandStrokeWeights(int n) {
|
7976
|
-
float
|
8020
|
+
float[] temp = new float[n];
|
7977
8021
|
PApplet.arrayCopy(strokeWeights, 0, temp, 0, vertexCount);
|
7978
8022
|
strokeWeights = temp;
|
7979
8023
|
}
|
7980
8024
|
|
7981
8025
|
void expandAmbient(int n) {
|
7982
|
-
int
|
8026
|
+
int[] temp = new int[n];
|
7983
8027
|
PApplet.arrayCopy(ambient, 0, temp, 0, vertexCount);
|
7984
8028
|
ambient = temp;
|
7985
8029
|
}
|
7986
8030
|
|
7987
8031
|
void expandSpecular(int n) {
|
7988
|
-
int
|
8032
|
+
int[] temp = new int[n];
|
7989
8033
|
PApplet.arrayCopy(specular, 0, temp, 0, vertexCount);
|
7990
8034
|
specular = temp;
|
7991
8035
|
}
|
7992
8036
|
|
7993
8037
|
void expandEmissive(int n) {
|
7994
|
-
int
|
8038
|
+
int[] temp = new int[n];
|
7995
8039
|
PApplet.arrayCopy(emissive, 0, temp, 0, vertexCount);
|
7996
8040
|
emissive = temp;
|
7997
8041
|
}
|
7998
8042
|
|
7999
8043
|
void expandShininess(int n) {
|
8000
|
-
float
|
8044
|
+
float[] temp = new float[n];
|
8001
8045
|
PApplet.arrayCopy(shininess, 0, temp, 0, vertexCount);
|
8002
8046
|
shininess = temp;
|
8003
8047
|
}
|
@@ -8016,33 +8060,33 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8016
8060
|
|
8017
8061
|
void expandFloatAttrib(VertexAttribute attrib, int n) {
|
8018
8062
|
float[] values = fattribs.get(attrib.name);
|
8019
|
-
float
|
8063
|
+
float[] temp = new float[attrib.size * n];
|
8020
8064
|
PApplet.arrayCopy(values, 0, temp, 0, attrib.size * vertexCount);
|
8021
8065
|
fattribs.put(attrib.name, temp);
|
8022
8066
|
}
|
8023
8067
|
|
8024
8068
|
void expandIntAttrib(VertexAttribute attrib, int n) {
|
8025
8069
|
int[] values = iattribs.get(attrib.name);
|
8026
|
-
int
|
8070
|
+
int[] temp = new int[attrib.size * n];
|
8027
8071
|
PApplet.arrayCopy(values, 0, temp, 0, attrib.size * vertexCount);
|
8028
8072
|
iattribs.put(attrib.name, temp);
|
8029
8073
|
}
|
8030
8074
|
|
8031
8075
|
void expandBoolAttrib(VertexAttribute attrib, int n) {
|
8032
8076
|
byte[] values = battribs.get(attrib.name);
|
8033
|
-
byte
|
8077
|
+
byte[] temp = new byte[attrib.size * n];
|
8034
8078
|
PApplet.arrayCopy(values, 0, temp, 0, attrib.size * vertexCount);
|
8035
8079
|
battribs.put(attrib.name, temp);
|
8036
8080
|
}
|
8037
8081
|
|
8038
8082
|
void expandCodes(int n) {
|
8039
|
-
int
|
8083
|
+
int[] temp = new int[n];
|
8040
8084
|
PApplet.arrayCopy(codes, 0, temp, 0, codeCount);
|
8041
8085
|
codes = temp;
|
8042
8086
|
}
|
8043
8087
|
|
8044
8088
|
void expandEdges(int n) {
|
8045
|
-
int
|
8089
|
+
int[][] temp = new int[n][3];
|
8046
8090
|
PApplet.arrayCopy(edges, 0, temp, 0, edgeCount);
|
8047
8091
|
edges = temp;
|
8048
8092
|
}
|
@@ -8076,73 +8120,73 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8076
8120
|
}
|
8077
8121
|
|
8078
8122
|
void trimVertices() {
|
8079
|
-
float
|
8123
|
+
float[] temp = new float[3 * vertexCount];
|
8080
8124
|
PApplet.arrayCopy(vertices, 0, temp, 0, 3 * vertexCount);
|
8081
8125
|
vertices = temp;
|
8082
8126
|
}
|
8083
8127
|
|
8084
8128
|
void trimColors() {
|
8085
|
-
int
|
8129
|
+
int[] temp = new int[vertexCount];
|
8086
8130
|
PApplet.arrayCopy(colors, 0, temp, 0, vertexCount);
|
8087
8131
|
colors = temp;
|
8088
8132
|
}
|
8089
8133
|
|
8090
8134
|
void trimNormals() {
|
8091
|
-
float
|
8135
|
+
float[] temp = new float[3 * vertexCount];
|
8092
8136
|
PApplet.arrayCopy(normals, 0, temp, 0, 3 * vertexCount);
|
8093
8137
|
normals = temp;
|
8094
8138
|
}
|
8095
8139
|
|
8096
8140
|
void trimTexCoords() {
|
8097
|
-
float
|
8141
|
+
float[] temp = new float[2 * vertexCount];
|
8098
8142
|
PApplet.arrayCopy(texcoords, 0, temp, 0, 2 * vertexCount);
|
8099
8143
|
texcoords = temp;
|
8100
8144
|
}
|
8101
8145
|
|
8102
8146
|
void trimStrokeColors() {
|
8103
|
-
int
|
8147
|
+
int[] temp = new int[vertexCount];
|
8104
8148
|
PApplet.arrayCopy(strokeColors, 0, temp, 0, vertexCount);
|
8105
8149
|
strokeColors = temp;
|
8106
8150
|
}
|
8107
8151
|
|
8108
8152
|
void trimStrokeWeights() {
|
8109
|
-
float
|
8153
|
+
float[] temp = new float[vertexCount];
|
8110
8154
|
PApplet.arrayCopy(strokeWeights, 0, temp, 0, vertexCount);
|
8111
8155
|
strokeWeights = temp;
|
8112
8156
|
}
|
8113
8157
|
|
8114
8158
|
void trimAmbient() {
|
8115
|
-
int
|
8159
|
+
int[] temp = new int[vertexCount];
|
8116
8160
|
PApplet.arrayCopy(ambient, 0, temp, 0, vertexCount);
|
8117
8161
|
ambient = temp;
|
8118
8162
|
}
|
8119
8163
|
|
8120
8164
|
void trimSpecular() {
|
8121
|
-
int
|
8165
|
+
int[] temp = new int[vertexCount];
|
8122
8166
|
PApplet.arrayCopy(specular, 0, temp, 0, vertexCount);
|
8123
8167
|
specular = temp;
|
8124
8168
|
}
|
8125
8169
|
|
8126
8170
|
void trimEmissive() {
|
8127
|
-
int
|
8171
|
+
int[] temp = new int[vertexCount];
|
8128
8172
|
PApplet.arrayCopy(emissive, 0, temp, 0, vertexCount);
|
8129
8173
|
emissive = temp;
|
8130
8174
|
}
|
8131
8175
|
|
8132
8176
|
void trimShininess() {
|
8133
|
-
float
|
8177
|
+
float[] temp = new float[vertexCount];
|
8134
8178
|
PApplet.arrayCopy(shininess, 0, temp, 0, vertexCount);
|
8135
8179
|
shininess = temp;
|
8136
8180
|
}
|
8137
8181
|
|
8138
8182
|
void trimCodes() {
|
8139
|
-
int
|
8183
|
+
int[] temp = new int[codeCount];
|
8140
8184
|
PApplet.arrayCopy(codes, 0, temp, 0, codeCount);
|
8141
8185
|
codes = temp;
|
8142
8186
|
}
|
8143
8187
|
|
8144
8188
|
void trimEdges() {
|
8145
|
-
int
|
8189
|
+
int[][] temp = new int[edgeCount][3];
|
8146
8190
|
PApplet.arrayCopy(edges, 0, temp, 0, edgeCount);
|
8147
8191
|
edges = temp;
|
8148
8192
|
}
|
@@ -8161,21 +8205,21 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8161
8205
|
|
8162
8206
|
void trimFloatAttrib(VertexAttribute attrib) {
|
8163
8207
|
float[] values = fattribs.get(attrib.name);
|
8164
|
-
float
|
8208
|
+
float[] temp = new float[attrib.size * vertexCount];
|
8165
8209
|
PApplet.arrayCopy(values, 0, temp, 0, attrib.size * vertexCount);
|
8166
8210
|
fattribs.put(attrib.name, temp);
|
8167
8211
|
}
|
8168
8212
|
|
8169
8213
|
void trimIntAttrib(VertexAttribute attrib) {
|
8170
8214
|
int[] values = iattribs.get(attrib.name);
|
8171
|
-
int
|
8215
|
+
int[] temp = new int[attrib.size * vertexCount];
|
8172
8216
|
PApplet.arrayCopy(values, 0, temp, 0, attrib.size * vertexCount);
|
8173
8217
|
iattribs.put(attrib.name, temp);
|
8174
8218
|
}
|
8175
8219
|
|
8176
8220
|
void trimBoolAttrib(VertexAttribute attrib) {
|
8177
8221
|
byte[] values = battribs.get(attrib.name);
|
8178
|
-
byte
|
8222
|
+
byte[] temp = new byte[attrib.size * vertexCount];
|
8179
8223
|
PApplet.arrayCopy(values, 0, temp, 0, attrib.size * vertexCount);
|
8180
8224
|
battribs.put(attrib.name, temp);
|
8181
8225
|
}
|
@@ -8394,7 +8438,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8394
8438
|
|
8395
8439
|
vert[SR] = ((strokeColors[i] >> 16) & 0xFF) / 255.0f;
|
8396
8440
|
vert[SG] = ((strokeColors[i] >> 8) & 0xFF) / 255.0f;
|
8397
|
-
vert[SB] = ((strokeColors[i]) & 0xFF) / 255.0f;
|
8441
|
+
vert[SB] = ((strokeColors[i] >> 0) & 0xFF) / 255.0f;
|
8398
8442
|
vert[SA] = ((strokeColors[i] >> 24) & 0xFF) / 255.0f;
|
8399
8443
|
|
8400
8444
|
vert[SW] = strokeWeights[i];
|
@@ -8797,8 +8841,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8797
8841
|
idx0 = pidx = idx = 0;
|
8798
8842
|
float val = 0;
|
8799
8843
|
for (int i = 0; i < accuracy; i++) {
|
8800
|
-
idx = addVertex(centerX +
|
8801
|
-
centerY +
|
8844
|
+
idx = addVertex(centerX + cosLUT[(int) val] * radiusH,
|
8845
|
+
centerY + sinLUT[(int) val] * radiusV,
|
8802
8846
|
VERTEX, i == 0 && !fill);
|
8803
8847
|
val = (val + inc) % SINCOS_LENGTH;
|
8804
8848
|
|
@@ -8811,8 +8855,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8811
8855
|
pidx = idx;
|
8812
8856
|
}
|
8813
8857
|
// Back to the beginning
|
8814
|
-
addVertex(centerX +
|
8815
|
-
centerY +
|
8858
|
+
addVertex(centerX + cosLUT[0] * radiusH,
|
8859
|
+
centerY + sinLUT[0] * radiusV,
|
8816
8860
|
VERTEX, false);
|
8817
8861
|
if (stroke) {
|
8818
8862
|
addEdge(idx, idx0, false, false);
|
@@ -8857,8 +8901,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8857
8901
|
if (arcMode == CHORD || arcMode == OPEN) {
|
8858
8902
|
// move center to the middle of flat side
|
8859
8903
|
// to properly display arcs smaller than PI
|
8860
|
-
float relX = (
|
8861
|
-
float relY = (
|
8904
|
+
float relX = (cosLUT[startLUT] + cosLUT[stopLUT]) * 0.5f * hr;
|
8905
|
+
float relY = (sinLUT[startLUT] + sinLUT[stopLUT]) * 0.5f * vr;
|
8862
8906
|
idx0 = addVertex(centerX + relX, centerY + relY, VERTEX, true);
|
8863
8907
|
} else {
|
8864
8908
|
idx0 = addVertex(centerX, centerY, VERTEX, true);
|
@@ -8895,8 +8939,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
8895
8939
|
if (ii >= SINCOS_LENGTH) ii -= SINCOS_LENGTH;
|
8896
8940
|
|
8897
8941
|
pidx = idx;
|
8898
|
-
idx = addVertex(centerX +
|
8899
|
-
centerY +
|
8942
|
+
idx = addVertex(centerX + cosLUT[ii] * hr,
|
8943
|
+
centerY + sinLUT[ii] * vr,
|
8900
8944
|
VERTEX, i == 0 && !fill);
|
8901
8945
|
|
8902
8946
|
if (stroke) {
|
@@ -9250,7 +9294,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9250
9294
|
//
|
9251
9295
|
// Allocate/dispose
|
9252
9296
|
|
9253
|
-
|
9297
|
+
void allocate() {
|
9254
9298
|
polyVertices = new float[4 * PGL.DEFAULT_TESS_VERTICES];
|
9255
9299
|
polyColors = new int[PGL.DEFAULT_TESS_VERTICES];
|
9256
9300
|
polyNormals = new float[3 * PGL.DEFAULT_TESS_VERTICES];
|
@@ -9717,56 +9761,56 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9717
9761
|
// Expand arrays
|
9718
9762
|
|
9719
9763
|
void expandPolyVertices(int n) {
|
9720
|
-
float
|
9764
|
+
float[] temp = new float[4 * n];
|
9721
9765
|
PApplet.arrayCopy(polyVertices, 0, temp, 0, 4 * polyVertexCount);
|
9722
9766
|
polyVertices = temp;
|
9723
9767
|
polyVerticesBuffer = PGL.allocateFloatBuffer(polyVertices);
|
9724
9768
|
}
|
9725
9769
|
|
9726
9770
|
void expandPolyColors(int n) {
|
9727
|
-
int
|
9771
|
+
int[] temp = new int[n];
|
9728
9772
|
PApplet.arrayCopy(polyColors, 0, temp, 0, polyVertexCount);
|
9729
9773
|
polyColors = temp;
|
9730
9774
|
polyColorsBuffer = PGL.allocateIntBuffer(polyColors);
|
9731
9775
|
}
|
9732
9776
|
|
9733
9777
|
void expandPolyNormals(int n) {
|
9734
|
-
float
|
9778
|
+
float[] temp = new float[3 * n];
|
9735
9779
|
PApplet.arrayCopy(polyNormals, 0, temp, 0, 3 * polyVertexCount);
|
9736
9780
|
polyNormals = temp;
|
9737
9781
|
polyNormalsBuffer = PGL.allocateFloatBuffer(polyNormals);
|
9738
9782
|
}
|
9739
9783
|
|
9740
9784
|
void expandPolyTexCoords(int n) {
|
9741
|
-
float
|
9785
|
+
float[] temp = new float[2 * n];
|
9742
9786
|
PApplet.arrayCopy(polyTexCoords, 0, temp, 0, 2 * polyVertexCount);
|
9743
9787
|
polyTexCoords = temp;
|
9744
9788
|
polyTexCoordsBuffer = PGL.allocateFloatBuffer(polyTexCoords);
|
9745
9789
|
}
|
9746
9790
|
|
9747
9791
|
void expandPolyAmbient(int n) {
|
9748
|
-
int
|
9792
|
+
int[] temp = new int[n];
|
9749
9793
|
PApplet.arrayCopy(polyAmbient, 0, temp, 0, polyVertexCount);
|
9750
9794
|
polyAmbient = temp;
|
9751
9795
|
polyAmbientBuffer = PGL.allocateIntBuffer(polyAmbient);
|
9752
9796
|
}
|
9753
9797
|
|
9754
9798
|
void expandPolySpecular(int n) {
|
9755
|
-
int
|
9799
|
+
int[] temp = new int[n];
|
9756
9800
|
PApplet.arrayCopy(polySpecular, 0, temp, 0, polyVertexCount);
|
9757
9801
|
polySpecular = temp;
|
9758
9802
|
polySpecularBuffer = PGL.allocateIntBuffer(polySpecular);
|
9759
9803
|
}
|
9760
9804
|
|
9761
9805
|
void expandPolyEmissive(int n) {
|
9762
|
-
int
|
9806
|
+
int[] temp = new int[n];
|
9763
9807
|
PApplet.arrayCopy(polyEmissive, 0, temp, 0, polyVertexCount);
|
9764
9808
|
polyEmissive = temp;
|
9765
9809
|
polyEmissiveBuffer = PGL.allocateIntBuffer(polyEmissive);
|
9766
9810
|
}
|
9767
9811
|
|
9768
9812
|
void expandPolyShininess(int n) {
|
9769
|
-
float
|
9813
|
+
float[] temp = new float[n];
|
9770
9814
|
PApplet.arrayCopy(polyShininess, 0, temp, 0, polyVertexCount);
|
9771
9815
|
polyShininess = temp;
|
9772
9816
|
polyShininessBuffer = PGL.allocateFloatBuffer(polyShininess);
|
@@ -9786,7 +9830,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9786
9830
|
|
9787
9831
|
void expandFloatAttribute(VertexAttribute attrib, int n) {
|
9788
9832
|
float[] array = fpolyAttribs.get(attrib.name);
|
9789
|
-
float
|
9833
|
+
float[] temp = new float[attrib.tessSize * n];
|
9790
9834
|
PApplet.arrayCopy(array, 0, temp, 0, attrib.tessSize * polyVertexCount);
|
9791
9835
|
fpolyAttribs.put(attrib.name, temp);
|
9792
9836
|
polyAttribBuffers.put(attrib.name, PGL.allocateFloatBuffer(temp));
|
@@ -9794,7 +9838,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9794
9838
|
|
9795
9839
|
void expandIntAttribute(VertexAttribute attrib, int n) {
|
9796
9840
|
int[] array = ipolyAttribs.get(attrib.name);
|
9797
|
-
int
|
9841
|
+
int[] temp = new int[attrib.tessSize * n];
|
9798
9842
|
PApplet.arrayCopy(array, 0, temp, 0, attrib.tessSize * polyVertexCount);
|
9799
9843
|
ipolyAttribs.put(attrib.name, temp);
|
9800
9844
|
polyAttribBuffers.put(attrib.name, PGL.allocateIntBuffer(temp));
|
@@ -9802,70 +9846,70 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9802
9846
|
|
9803
9847
|
void expandBoolAttribute(VertexAttribute attrib, int n) {
|
9804
9848
|
byte[] array = bpolyAttribs.get(attrib.name);
|
9805
|
-
byte
|
9849
|
+
byte[] temp = new byte[attrib.tessSize * n];
|
9806
9850
|
PApplet.arrayCopy(array, 0, temp, 0, attrib.tessSize * polyVertexCount);
|
9807
9851
|
bpolyAttribs.put(attrib.name, temp);
|
9808
9852
|
polyAttribBuffers.put(attrib.name, PGL.allocateByteBuffer(temp));
|
9809
9853
|
}
|
9810
9854
|
|
9811
9855
|
void expandPolyIndices(int n) {
|
9812
|
-
short
|
9856
|
+
short[] temp = new short[n];
|
9813
9857
|
PApplet.arrayCopy(polyIndices, 0, temp, 0, polyIndexCount);
|
9814
9858
|
polyIndices = temp;
|
9815
9859
|
polyIndicesBuffer = PGL.allocateShortBuffer(polyIndices);
|
9816
9860
|
}
|
9817
9861
|
|
9818
9862
|
void expandLineVertices(int n) {
|
9819
|
-
float
|
9863
|
+
float[] temp = new float[4 * n];
|
9820
9864
|
PApplet.arrayCopy(lineVertices, 0, temp, 0, 4 * lineVertexCount);
|
9821
9865
|
lineVertices = temp;
|
9822
9866
|
lineVerticesBuffer = PGL.allocateFloatBuffer(lineVertices);
|
9823
9867
|
}
|
9824
9868
|
|
9825
9869
|
void expandLineColors(int n) {
|
9826
|
-
int
|
9870
|
+
int[] temp = new int[n];
|
9827
9871
|
PApplet.arrayCopy(lineColors, 0, temp, 0, lineVertexCount);
|
9828
9872
|
lineColors = temp;
|
9829
9873
|
lineColorsBuffer = PGL.allocateIntBuffer(lineColors);
|
9830
9874
|
}
|
9831
9875
|
|
9832
9876
|
void expandLineDirections(int n) {
|
9833
|
-
float
|
9877
|
+
float[] temp = new float[4 * n];
|
9834
9878
|
PApplet.arrayCopy(lineDirections, 0, temp, 0, 4 * lineVertexCount);
|
9835
9879
|
lineDirections = temp;
|
9836
9880
|
lineDirectionsBuffer = PGL.allocateFloatBuffer(lineDirections);
|
9837
9881
|
}
|
9838
9882
|
|
9839
9883
|
void expandLineIndices(int n) {
|
9840
|
-
short
|
9884
|
+
short[] temp = new short[n];
|
9841
9885
|
PApplet.arrayCopy(lineIndices, 0, temp, 0, lineIndexCount);
|
9842
9886
|
lineIndices = temp;
|
9843
9887
|
lineIndicesBuffer = PGL.allocateShortBuffer(lineIndices);
|
9844
9888
|
}
|
9845
9889
|
|
9846
9890
|
void expandPointVertices(int n) {
|
9847
|
-
float
|
9891
|
+
float[] temp = new float[4 * n];
|
9848
9892
|
PApplet.arrayCopy(pointVertices, 0, temp, 0, 4 * pointVertexCount);
|
9849
9893
|
pointVertices = temp;
|
9850
9894
|
pointVerticesBuffer = PGL.allocateFloatBuffer(pointVertices);
|
9851
9895
|
}
|
9852
9896
|
|
9853
9897
|
void expandPointColors(int n) {
|
9854
|
-
int
|
9898
|
+
int[] temp = new int[n];
|
9855
9899
|
PApplet.arrayCopy(pointColors, 0, temp, 0, pointVertexCount);
|
9856
9900
|
pointColors = temp;
|
9857
9901
|
pointColorsBuffer = PGL.allocateIntBuffer(pointColors);
|
9858
9902
|
}
|
9859
9903
|
|
9860
9904
|
void expandPointOffsets(int n) {
|
9861
|
-
float
|
9905
|
+
float[] temp = new float[2 * n];
|
9862
9906
|
PApplet.arrayCopy(pointOffsets, 0, temp, 0, 2 * pointVertexCount);
|
9863
9907
|
pointOffsets = temp;
|
9864
9908
|
pointOffsetsBuffer = PGL.allocateFloatBuffer(pointOffsets);
|
9865
9909
|
}
|
9866
9910
|
|
9867
9911
|
void expandPointIndices(int n) {
|
9868
|
-
short
|
9912
|
+
short[] temp = new short[n];
|
9869
9913
|
PApplet.arrayCopy(pointIndices, 0, temp, 0, pointIndexCount);
|
9870
9914
|
pointIndices = temp;
|
9871
9915
|
pointIndicesBuffer = PGL.allocateShortBuffer(pointIndices);
|
@@ -9914,56 +9958,56 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9914
9958
|
}
|
9915
9959
|
|
9916
9960
|
void trimPolyVertices() {
|
9917
|
-
float
|
9961
|
+
float[] temp = new float[4 * polyVertexCount];
|
9918
9962
|
PApplet.arrayCopy(polyVertices, 0, temp, 0, 4 * polyVertexCount);
|
9919
9963
|
polyVertices = temp;
|
9920
9964
|
polyVerticesBuffer = PGL.allocateFloatBuffer(polyVertices);
|
9921
9965
|
}
|
9922
9966
|
|
9923
9967
|
void trimPolyColors() {
|
9924
|
-
int
|
9968
|
+
int[] temp = new int[polyVertexCount];
|
9925
9969
|
PApplet.arrayCopy(polyColors, 0, temp, 0, polyVertexCount);
|
9926
9970
|
polyColors = temp;
|
9927
9971
|
polyColorsBuffer = PGL.allocateIntBuffer(polyColors);
|
9928
9972
|
}
|
9929
9973
|
|
9930
9974
|
void trimPolyNormals() {
|
9931
|
-
float
|
9975
|
+
float[] temp = new float[3 * polyVertexCount];
|
9932
9976
|
PApplet.arrayCopy(polyNormals, 0, temp, 0, 3 * polyVertexCount);
|
9933
9977
|
polyNormals = temp;
|
9934
9978
|
polyNormalsBuffer = PGL.allocateFloatBuffer(polyNormals);
|
9935
9979
|
}
|
9936
9980
|
|
9937
9981
|
void trimPolyTexCoords() {
|
9938
|
-
float
|
9982
|
+
float[] temp = new float[2 * polyVertexCount];
|
9939
9983
|
PApplet.arrayCopy(polyTexCoords, 0, temp, 0, 2 * polyVertexCount);
|
9940
9984
|
polyTexCoords = temp;
|
9941
9985
|
polyTexCoordsBuffer = PGL.allocateFloatBuffer(polyTexCoords);
|
9942
9986
|
}
|
9943
9987
|
|
9944
9988
|
void trimPolyAmbient() {
|
9945
|
-
int
|
9989
|
+
int[] temp = new int[polyVertexCount];
|
9946
9990
|
PApplet.arrayCopy(polyAmbient, 0, temp, 0, polyVertexCount);
|
9947
9991
|
polyAmbient = temp;
|
9948
9992
|
polyAmbientBuffer = PGL.allocateIntBuffer(polyAmbient);
|
9949
9993
|
}
|
9950
9994
|
|
9951
9995
|
void trimPolySpecular() {
|
9952
|
-
int
|
9996
|
+
int[] temp = new int[polyVertexCount];
|
9953
9997
|
PApplet.arrayCopy(polySpecular, 0, temp, 0, polyVertexCount);
|
9954
9998
|
polySpecular = temp;
|
9955
9999
|
polySpecularBuffer = PGL.allocateIntBuffer(polySpecular);
|
9956
10000
|
}
|
9957
10001
|
|
9958
10002
|
void trimPolyEmissive() {
|
9959
|
-
int
|
10003
|
+
int[] temp = new int[polyVertexCount];
|
9960
10004
|
PApplet.arrayCopy(polyEmissive, 0, temp, 0, polyVertexCount);
|
9961
10005
|
polyEmissive = temp;
|
9962
10006
|
polyEmissiveBuffer = PGL.allocateIntBuffer(polyEmissive);
|
9963
10007
|
}
|
9964
10008
|
|
9965
10009
|
void trimPolyShininess() {
|
9966
|
-
float
|
10010
|
+
float[] temp = new float[polyVertexCount];
|
9967
10011
|
PApplet.arrayCopy(polyShininess, 0, temp, 0, polyVertexCount);
|
9968
10012
|
polyShininess = temp;
|
9969
10013
|
polyShininessBuffer = PGL.allocateFloatBuffer(polyShininess);
|
@@ -9983,7 +10027,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9983
10027
|
|
9984
10028
|
void trimFloatAttribute(VertexAttribute attrib) {
|
9985
10029
|
float[] array = fpolyAttribs.get(attrib.name);
|
9986
|
-
float
|
10030
|
+
float[] temp = new float[attrib.tessSize * polyVertexCount];
|
9987
10031
|
PApplet.arrayCopy(array, 0, temp, 0, attrib.tessSize * polyVertexCount);
|
9988
10032
|
fpolyAttribs.put(attrib.name, temp);
|
9989
10033
|
polyAttribBuffers.put(attrib.name, PGL.allocateFloatBuffer(temp));
|
@@ -9991,7 +10035,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9991
10035
|
|
9992
10036
|
void trimIntAttribute(VertexAttribute attrib) {
|
9993
10037
|
int[] array = ipolyAttribs.get(attrib.name);
|
9994
|
-
int
|
10038
|
+
int[] temp = new int[attrib.tessSize * polyVertexCount];
|
9995
10039
|
PApplet.arrayCopy(array, 0, temp, 0, attrib.tessSize * polyVertexCount);
|
9996
10040
|
ipolyAttribs.put(attrib.name, temp);
|
9997
10041
|
polyAttribBuffers.put(attrib.name, PGL.allocateIntBuffer(temp));
|
@@ -9999,70 +10043,70 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
9999
10043
|
|
10000
10044
|
void trimBoolAttribute(VertexAttribute attrib) {
|
10001
10045
|
byte[] array = bpolyAttribs.get(attrib.name);
|
10002
|
-
byte
|
10046
|
+
byte[] temp = new byte[attrib.tessSize * polyVertexCount];
|
10003
10047
|
PApplet.arrayCopy(array, 0, temp, 0, attrib.tessSize * polyVertexCount);
|
10004
10048
|
bpolyAttribs.put(attrib.name, temp);
|
10005
10049
|
polyAttribBuffers.put(attrib.name, PGL.allocateByteBuffer(temp));
|
10006
10050
|
}
|
10007
10051
|
|
10008
10052
|
void trimPolyIndices() {
|
10009
|
-
short
|
10053
|
+
short[] temp = new short[polyIndexCount];
|
10010
10054
|
PApplet.arrayCopy(polyIndices, 0, temp, 0, polyIndexCount);
|
10011
10055
|
polyIndices = temp;
|
10012
10056
|
polyIndicesBuffer = PGL.allocateShortBuffer(polyIndices);
|
10013
10057
|
}
|
10014
10058
|
|
10015
10059
|
void trimLineVertices() {
|
10016
|
-
float
|
10060
|
+
float[] temp = new float[4 * lineVertexCount];
|
10017
10061
|
PApplet.arrayCopy(lineVertices, 0, temp, 0, 4 * lineVertexCount);
|
10018
10062
|
lineVertices = temp;
|
10019
10063
|
lineVerticesBuffer = PGL.allocateFloatBuffer(lineVertices);
|
10020
10064
|
}
|
10021
10065
|
|
10022
10066
|
void trimLineColors() {
|
10023
|
-
int
|
10067
|
+
int[] temp = new int[lineVertexCount];
|
10024
10068
|
PApplet.arrayCopy(lineColors, 0, temp, 0, lineVertexCount);
|
10025
10069
|
lineColors = temp;
|
10026
10070
|
lineColorsBuffer = PGL.allocateIntBuffer(lineColors);
|
10027
10071
|
}
|
10028
10072
|
|
10029
10073
|
void trimLineDirections() {
|
10030
|
-
float
|
10074
|
+
float[] temp = new float[4 * lineVertexCount];
|
10031
10075
|
PApplet.arrayCopy(lineDirections, 0, temp, 0, 4 * lineVertexCount);
|
10032
10076
|
lineDirections = temp;
|
10033
10077
|
lineDirectionsBuffer = PGL.allocateFloatBuffer(lineDirections);
|
10034
10078
|
}
|
10035
10079
|
|
10036
10080
|
void trimLineIndices() {
|
10037
|
-
short
|
10081
|
+
short[] temp = new short[lineIndexCount];
|
10038
10082
|
PApplet.arrayCopy(lineIndices, 0, temp, 0, lineIndexCount);
|
10039
10083
|
lineIndices = temp;
|
10040
10084
|
lineIndicesBuffer = PGL.allocateShortBuffer(lineIndices);
|
10041
10085
|
}
|
10042
10086
|
|
10043
10087
|
void trimPointVertices() {
|
10044
|
-
float
|
10088
|
+
float[] temp = new float[4 * pointVertexCount];
|
10045
10089
|
PApplet.arrayCopy(pointVertices, 0, temp, 0, 4 * pointVertexCount);
|
10046
10090
|
pointVertices = temp;
|
10047
10091
|
pointVerticesBuffer = PGL.allocateFloatBuffer(pointVertices);
|
10048
10092
|
}
|
10049
10093
|
|
10050
10094
|
void trimPointColors() {
|
10051
|
-
int
|
10095
|
+
int[] temp = new int[pointVertexCount];
|
10052
10096
|
PApplet.arrayCopy(pointColors, 0, temp, 0, pointVertexCount);
|
10053
10097
|
pointColors = temp;
|
10054
10098
|
pointColorsBuffer = PGL.allocateIntBuffer(pointColors);
|
10055
10099
|
}
|
10056
10100
|
|
10057
10101
|
void trimPointOffsets() {
|
10058
|
-
float
|
10102
|
+
float[] temp = new float[2 * pointVertexCount];
|
10059
10103
|
PApplet.arrayCopy(pointOffsets, 0, temp, 0, 2 * pointVertexCount);
|
10060
10104
|
pointOffsets = temp;
|
10061
10105
|
pointOffsetsBuffer = PGL.allocateFloatBuffer(pointOffsets);
|
10062
10106
|
}
|
10063
10107
|
|
10064
10108
|
void trimPointIndices() {
|
10065
|
-
short
|
10109
|
+
short[] temp = new short[pointIndexCount];
|
10066
10110
|
PApplet.arrayCopy(pointIndices, 0, temp, 0, pointIndexCount);
|
10067
10111
|
pointIndices = temp;
|
10068
10112
|
pointIndicesBuffer = PGL.allocateShortBuffer(pointIndices);
|
@@ -10616,28 +10660,26 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
10616
10660
|
polyVertices, 4 * tessIdx, 3);
|
10617
10661
|
polyVertices[4 * tessIdx + 3] = 1;
|
10618
10662
|
|
10619
|
-
polyAttribs.keySet()
|
10663
|
+
for (String name: polyAttribs.keySet()) {
|
10620
10664
|
VertexAttribute attrib = polyAttribs.get(name);
|
10621
|
-
if (!
|
10622
|
-
|
10623
|
-
|
10624
|
-
|
10625
|
-
|
10626
|
-
|
10627
|
-
|
10628
|
-
});
|
10665
|
+
if (!attrib.isPosition()) continue;
|
10666
|
+
float[] inValues = in.fattribs.get(name);
|
10667
|
+
float[] tessValues = fpolyAttribs.get(name);
|
10668
|
+
PApplet.arrayCopy(inValues, 3 * inIdx,
|
10669
|
+
tessValues, 4 * tessIdx, 3);
|
10670
|
+
tessValues[4 * tessIdx + 3] = 1;
|
10671
|
+
}
|
10629
10672
|
}
|
10630
10673
|
PApplet.arrayCopy(in.normals, 3 * i0,
|
10631
10674
|
polyNormals, 3 * firstPolyVertex, 3 * nvert);
|
10632
|
-
polyAttribs.keySet()
|
10675
|
+
for (String name: polyAttribs.keySet()) {
|
10633
10676
|
VertexAttribute attrib = polyAttribs.get(name);
|
10634
|
-
if (!
|
10635
|
-
|
10636
|
-
|
10637
|
-
|
10638
|
-
|
10639
|
-
|
10640
|
-
});
|
10677
|
+
if (!attrib.isNormal()) continue;
|
10678
|
+
float[] inValues = in.fattribs.get(name);
|
10679
|
+
float[] tessValues = fpolyAttribs.get(name);
|
10680
|
+
PApplet.arrayCopy(inValues, 3 * i0,
|
10681
|
+
tessValues, 3 * firstPolyVertex, 3 * nvert);
|
10682
|
+
}
|
10641
10683
|
}
|
10642
10684
|
|
10643
10685
|
// Just copy attributes one by one.
|
@@ -11176,9 +11218,9 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
11176
11218
|
float inc = (float) SINCOS_LENGTH / perim;
|
11177
11219
|
for (int k = 0; k < perim; k++) {
|
11178
11220
|
tess.pointOffsets[2 * attribIdx + 0] =
|
11179
|
-
0.5f *
|
11221
|
+
0.5f * cosLUT[(int) val] * transformScale() * strokeWeight;
|
11180
11222
|
tess.pointOffsets[2 * attribIdx + 1] =
|
11181
|
-
0.5f *
|
11223
|
+
0.5f * sinLUT[(int) val] * transformScale() * strokeWeight;
|
11182
11224
|
val = (val + inc) % SINCOS_LENGTH;
|
11183
11225
|
attribIdx++;
|
11184
11226
|
}
|
@@ -11228,8 +11270,8 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
11228
11270
|
vertIdx++;
|
11229
11271
|
for (int k = 0; k < perim; k++) {
|
11230
11272
|
tess.setPolyVertex(vertIdx,
|
11231
|
-
x0 + 0.5f *
|
11232
|
-
y0 + 0.5f *
|
11273
|
+
x0 + 0.5f * cosLUT[(int) val] * strokeWeight,
|
11274
|
+
y0 + 0.5f * sinLUT[(int) val] * strokeWeight,
|
11233
11275
|
0, rgba, false);
|
11234
11276
|
vertIdx++;
|
11235
11277
|
val = (val + inc) % SINCOS_LENGTH;
|
@@ -12492,7 +12534,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
12492
12534
|
if (dupIndices.length == dupCount) {
|
12493
12535
|
int n = dupCount << 1;
|
12494
12536
|
|
12495
|
-
int
|
12537
|
+
int[] temp = new int[n];
|
12496
12538
|
PApplet.arrayCopy(dupIndices, 0, temp, 0, dupCount);
|
12497
12539
|
dupIndices = temp;
|
12498
12540
|
}
|
@@ -12539,7 +12581,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
12539
12581
|
}
|
12540
12582
|
|
12541
12583
|
void expandRawIndices(int n) {
|
12542
|
-
int
|
12584
|
+
int[] temp = new int[n];
|
12543
12585
|
PApplet.arrayCopy(rawIndices, 0, temp, 0, rawSize);
|
12544
12586
|
rawIndices = temp;
|
12545
12587
|
}
|
@@ -12642,23 +12684,18 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
12642
12684
|
}
|
12643
12685
|
}
|
12644
12686
|
|
12645
|
-
|
12646
|
-
|
12647
|
-
|
12648
|
-
|
12649
|
-
|
12650
|
-
|
12651
|
-
|
12652
|
-
|
12653
|
-
|
12654
|
-
|
12655
|
-
|
12656
|
-
|
12657
|
-
break;
|
12658
|
-
default:
|
12659
|
-
addVertex(i);
|
12660
|
-
i++;
|
12661
|
-
break;
|
12687
|
+
if (code == BEZIER_VERTEX) {
|
12688
|
+
addBezierVertex(i);
|
12689
|
+
i += 3;
|
12690
|
+
} else if (code == QUADRATIC_VERTEX) {
|
12691
|
+
addQuadraticVertex(i);
|
12692
|
+
i += 2;
|
12693
|
+
} else if (code == CURVE_VERTEX) {
|
12694
|
+
addCurveVertex(i);
|
12695
|
+
i++;
|
12696
|
+
} else {
|
12697
|
+
addVertex(i);
|
12698
|
+
i++;
|
12662
12699
|
}
|
12663
12700
|
}
|
12664
12701
|
if (stroke) {
|
@@ -12916,7 +12953,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
12916
12953
|
r[j++] = (fcol >> 24) & 0xFF; // fa
|
12917
12954
|
r[j++] = (fcol >> 16) & 0xFF; // fr
|
12918
12955
|
r[j++] = (fcol >> 8) & 0xFF; // fg
|
12919
|
-
r[j++] = (fcol
|
12956
|
+
r[j++] = (fcol) & 0xFF; // fb
|
12920
12957
|
|
12921
12958
|
r[j++] = in.normals[3*i + 0]; // nx
|
12922
12959
|
r[j++] = in.normals[3*i + 1]; // ny
|
@@ -12929,19 +12966,19 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
12929
12966
|
r[j++] = (acol >> 24) & 0xFF; // aa
|
12930
12967
|
r[j++] = (acol >> 16) & 0xFF; // ar
|
12931
12968
|
r[j++] = (acol >> 8) & 0xFF; // ag
|
12932
|
-
r[j++] = (acol
|
12969
|
+
r[j++] = (acol) & 0xFF; // ab
|
12933
12970
|
|
12934
12971
|
int scol = in.specular[i];
|
12935
12972
|
r[j++] = (scol >> 24) & 0xFF; // sa
|
12936
12973
|
r[j++] = (scol >> 16) & 0xFF; // sr
|
12937
12974
|
r[j++] = (scol >> 8) & 0xFF; // sg
|
12938
|
-
r[j++] = (scol
|
12975
|
+
r[j++] = (scol) & 0xFF; // sb
|
12939
12976
|
|
12940
12977
|
int ecol = in.emissive[i];
|
12941
12978
|
r[j++] = (ecol >> 24) & 0xFF; // ea
|
12942
12979
|
r[j++] = (ecol >> 16) & 0xFF; // er
|
12943
12980
|
r[j++] = (ecol >> 8) & 0xFF; // eg
|
12944
|
-
r[j++] = (ecol
|
12981
|
+
r[j++] = (ecol) & 0xFF; // eb
|
12945
12982
|
|
12946
12983
|
r[j++] = in.shininess[i]; // sh
|
12947
12984
|
|
@@ -12989,15 +13026,15 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
12989
13026
|
if (pathVertexCount == pathVertices.length / 3) {
|
12990
13027
|
int newSize = pathVertexCount << 1;
|
12991
13028
|
|
12992
|
-
float
|
13029
|
+
float[] vtemp = new float[3 * newSize];
|
12993
13030
|
PApplet.arrayCopy(pathVertices, 0, vtemp, 0, 3 * pathVertexCount);
|
12994
13031
|
pathVertices = vtemp;
|
12995
13032
|
|
12996
|
-
int
|
13033
|
+
int[] ctemp = new int[newSize];
|
12997
13034
|
PApplet.arrayCopy(pathColors, 0, ctemp, 0, pathVertexCount);
|
12998
13035
|
pathColors = ctemp;
|
12999
13036
|
|
13000
|
-
float
|
13037
|
+
float[] wtemp = new float[newSize];
|
13001
13038
|
PApplet.arrayCopy(pathWeights, 0, wtemp, 0, pathVertexCount);
|
13002
13039
|
pathWeights = wtemp;
|
13003
13040
|
}
|
@@ -13160,6 +13197,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
13160
13197
|
else if (type == PGL.TRIANGLES) primitive = TRIANGLES;
|
13161
13198
|
}
|
13162
13199
|
|
13200
|
+
@Override
|
13163
13201
|
public void end() {
|
13164
13202
|
if (PGL.MAX_VERTEX_INDEX1 <= vertFirst + vertCount) {
|
13165
13203
|
// We need a new index block for the new batch of
|
@@ -13235,6 +13273,7 @@ public class PGraphicsOpenGL extends PGraphics {
|
|
13235
13273
|
vertFirst + vertOffset + tessIdx2);
|
13236
13274
|
}
|
13237
13275
|
|
13276
|
+
@Override
|
13238
13277
|
public void vertex(Object data) {
|
13239
13278
|
if (data instanceof double[]) {
|
13240
13279
|
double[] d = (double[]) data;
|