Java 3D API version 1.5 Change Log

Here are the proposed changes for Java 3D version 1.5. These proposed changes are a results of discussion and collaboration with the Java 3D community on java.net (see https://java3d.dev.java.net). They are already part of daily and periodic stable builds available on java.net.

I. Proposed Changes

Here is the list of proposed changes for the Java 3D 1.5 API:

  1. Non-power-of-two textures
  2. NIO image buffer support for textures
  3. By-reference support for geometry indices
  4. Rendering error listeners
  5. Vecmath accessors/mutators
  6. Deprecated API

For a complete description of these changes, please see the proposed API specification (javadoc) for the 1.5 version of the Java 3D API.

1. Non-power-of-two textures

We propose to add non-power-of-two textures to Java 3D 1.5. Currently, the width, height, and depth of all textures must be an exact power of two. Most graphics cards now support non-power-of-two textures, so we propose to allow this in Java 3D. Since not all graphics drivers support this feature, we will add a new "textureNonPowerOfTwoAvailable" property to Canvas3D.queryProperties that will indicate whether or not non-power-of-two textures are supported. If this property is set to true, then non-power-of-two textures are rendered normally. If this property is set to false, then the graphics driver or card does not support non-power-of-two textures; texture mapping will be disabled if non-power-of-two textures are rendered on a Canvas3D that doesn't support them.


2. NIO image buffer support for textures

We propose to create a new javax.media.j3d.NioImageBuffer class, a wrapper for an image whose DataBuffer is specified via an appropriate subclass of java.nio.Buffer: ByteBuffer or IntBuffer, depending on the type of image. When using IntBuffer, the byte order of the buffer must match the native byte order of the underlying platform.

New public classes:

New constructors and methods:


3. By-reference support for geometry indices

We propose to add support for setting the coordinate indices of IndexedGeometryArray objects "by-reference". Currently, the coordinate indices array is set "by-copy" even for by-reference geometry, resulting in excessive memory usage. Though the excess memory usage is temporary, since it happens only at the time of creating an internal copy of the user-specified indices array, nevertheless it can turn out to be of significant concern especially for very large geometries or for dynamically changing geometry. The fact that the graphics drivers have long supported this feature makes the incorporation of this feature attractive, as it entails no special hardware support.

New fields and methods:


4. Rendering error listener

We propose to add a rendering error class and error listener interface that applications can use to detect rendering errors that are caught by the Java 3D rendering system. The default error listener, if no user-specified error listeners are added, prints out the error message and exits.

The following new classes and interfaces are proposed:

The following new methods are proposed:


5. Vecmath accessors/mutators

We propose to add accessors and mutators to all vecmath classes with publicly accessible fields. This follows the bean pattern, and allows these classes to be read and written by bean-aware tools, for example, the XMLEncoder. The following classes need public accessors and mutators (e.g., setX(), getX(), setY(), and so forth):


6. Deprecated API

We propose to deprecate the following fields and methods relating to the obsolete texture functionality.


II. Accepted Changes


III. Deferred Changes