New features in 2.1.0

2022, 24th May

2D charts improved

The layout of 2D charts is now much more accurate. The Y axis label is now vertical and legends can be displayed in the corners of the chart. Tutorials show how to create 2D charts for surfaces, scatters and lines. The great thing is that 2D remains a particular case of a 3D chart. In this regard, the next version will allow displaying XZ and YZ in addition to the existing XY dimensions. As for 3D, it supports rendering in GPU (JOGL), CPU (EmulGL/jGL), and can cope with HiDPI and non HiDPI monitors.

Text rotation and scale

The new TextRenderer is able to rotate text. Axis labels can be parallel to an axis, not only horizontal or vertical. Text can also be kept visually the same size while switching from HiDPI to non HiDPI monitor. This helps keep the same chart layout and preserve readability of the chart. The TextRenderer supports all Unicode characters and all fonts made available by java.awt.Font.

Displaying 3D contour

Displaying 3D contour required being able to address complex rendering issues with coplanar objects, which is now solved. The stencil buffer provided by OpenGL indeed allows dealing with Z-fighting situations where polygons override lines that are coplanar to it.


One can configure the scene graph with clipping planes, which allows ignoring any part standing outside of an area. It is especially useful to zoom on an area and avoid displaying the complete object standing outside of the expected bounds.

BoundingBox3d clippingBox = new BoundingBox3d(...); chart.getScene().getGraph().setClipBox(clippingBox);

Light support for volume visualization

Lights improve understanding the shape of a volume with uniform colors. Lights support more settings than before and can also be synchronized to the camera to always have a clear view of what stands in front of the viewer.

More compatibility for GPU rendering

We now support Apple M1 for native charts. Native charts have been verified on MacOS 10, 11, Windows 10, Ubuntu 20, on Java 9, 14 and 17. We invested a lot on JOGL and provided a handy compatibility matrix that also provides a list of workarounds for failing situations.

More performance for GPU rendering

VBOs have been improved to use faster buffers and also to allow sharing vertices among elements of a geometry. Multiple sharing schemes are available (see DrawableVBO2 documentation).

More performance for CPU rendering

EmulGL, introduced at version 2.0, avoids a dependency to native OpenGL and GPU which may fail to work with some combinations of {OS, GPU, JDK}. Rendering in CPU offers much better portability at the cost of performance when rendering a lot of polygons.

In addition to the existing optimization tricks, a dynamic level of detail system is added to allow the API to select a coarser representation of an object when rotation is asked. The extreme case is the display of the bounding box instead of the object itself just during rotation. All is automatic and made to keep the most detailed representation that does not go beyond a target rendering time.

More compatibility for CPU rendering

jGL has been ported to SWT, allowing to implement EmulGL for SWT in the next version.

More testing

Github Actions allowed to create a build system able to run unit tests on macOS 10.15, macOS 11.4 (with M1), Ubuntu 20 and Windows 10, for JDK 9 and 14, running on real hardware (not virtual machines). ITTests (integration tests) in module jzy3d-tests-java9 allow verifying charts as they are displayed in various situations (Swing/GPU, AWT/GPU, AWT/CPU). Baseline images are generated per hardware since there are subtle differences in the images generated by each hardware. MTest (manual tests) allow verifying charts while they move from one monitor to another.


  • Log4j has been bumped to a secure version.
  • Maintenance : volume rendering and depth peeling have been repaired.
  • Better description of GL extension capabilities (GetOpenGLVersion_JOGL and CanvasAWT.getDebugInfo).

Maven configuration

As of 2.0.0, Jzy3d artifacts have been splitted to be able to distinguish core java classes, native GL implementations, emulated GL implementation.
The jzy3d-api maven module disapear in favor of jzy-core and some other which are best documented here.

Maven dependency

For emulated OpenGL


For native OpenGL in AWT


For native OpenGL in Swing


For native OpenGL in SWT


Jzy3d maven repository

     <name>Jzy3d Snapshots</name>
     <name>Jzy3d Releases</name>

Downloading the jars

You can download jars manually from the Maven repositories :