Releases: JOML-CI/JOML
1.10.8
1.10.7
1.10.6
Breaking Changes
- Matrix/Quaternion/Vector.get(Buffer) - respect Buffer ByteOrder (ff3a0f5)
The above is potentially a breaking change for you whenever you use JOML without disabling sun.misc.Unsafe support to get a matrix's, quaternion's or vector's components into a NIO Buffer whose byte order is not nativeOrder() (the default for NIO Buffers created via methods in the JDK's class library is always BIG_ENDIAN). If you use other means, like LWJGL, to create NIO Buffers, there will be no problem.
Additions
- Many more Kotlin extension classes/methods - Thanks to @Peanuuutz (#323) (03cbd5e)
- Math.toDegrees(float) overload - (9f67120)
- Vector3.xy(Vector2) and Vector4.xy(Vector2) - (75d60fd)
- Vector2/3/4L and Vector2/3/4Lc - (#340) (de9186c, 5799e75)
- Vector4d/f multiply methods not taking dest argument - (18d6790)
- Vector4f.set(Vector3dc) - (158c926)
- Matrix.set(array)/.set(array, offset) - (#321) (3947657)
- Matrix3/4/4x3.getEulerAnglesYXZ() - (#325) (d93db9b)
- Matrix.getTransposedToAddress()/.setTransposedFromAddress(long) - (#329) (4072dff)
- Make all org.joml.Math constants public - (#331) (4b55bac)
- Vector4f.set(Vector3dc) - (158c926)
- Vector4.xyz(Vector3), Vector4.xy(Vector2), Vector3.xy(Vector2) - (#336) (d475251, 75d60fd, bbc988e)
- Vector2d(Vector3) constructors and Vector2d.set(Vector3) setters - (7dc7156)
Fixes
- Matrix3f.get3x4(Buffer) - (#345) (933eb41)
- Matrix/Quaternion/Vector.get(Buffer) - respect Buffer ByteOrder (ff3a0f5)
- Quaternion.getEulerAnglesZYX() - Thanks to @56738 (#326) (cc58108)
- Resetting matrix properties in Matrix4.set(col, row, v) and setRowColumn() - (#335) (8773210)
- Matrix4.rotateXYZ/YXZ/ZYX() erroneously using dest matrix properties when
this
was affine - (eab54cb) - Vector4i(Vector3fc, float, int) constructor not setting 'w' component - (be7efd4)
Miscellaneous
- Optimize various things - Thanks to @0x000006 (#334) (b36a5cc)
- Change Matrix4f.set3x3(Matrix4f) to Matrix4f.set3x3(Matrix4fc) - Thanks to @NicBOMB (#344) (0f66b42)
- Fix Quaternion.fromAxisAngleDeg() angle parameter JavaDocs - (#342) (52c7d15)
- Refactor mentions of specific vector classes in JavaDocs - (422242d, 11734ad)
- Optimize Matrix4f.rotateGeneric(Quaternionf) using fma
when-Djoml.useFma
is used - (f830b0c) - Avoid copying object fields in Matrix/Vector.set(Matrix/Vector other) if this == other - (ebe6de9)
- Implement all equals() methods consistently - (da75414)
- Document better which matrix properties imply which other properties - (afb0e79)
- Optimize Vector matrix multiply methods taking into account matrix properties - (#337) (22d6fc1, 534d472, d3912cf, 72c45e4)
- Mention order of M * v multiplication in all Vector.mul(Matrix) methods - (5b4d4c2)
- Mark Matrix4/4x3.assume()/properties() with @MagicConstant - (b2d3c67)
- Optimize Math.fastAtan2() - thanks to @0x000006 (#333) (9672295)
- Rearrange Matrix4f fields - (ec0a6ed)
- Migrate from Maven to Gradle for build/release - (cf78987, f477e8a, b75674d, 3539950)
- Make Kotlin extensions usable/compilable - (#320) (1288c5d)
- Switch to GitHub Actions (from Travis) for publishing - (4dcb53f)
- Add experimental support for accelerated Matrix4f.mul(Matrix4f), Matrix4f.invert(), Matrix4f.transpose(), Matrix4f.set(Matrix4f), Quaternionf.mul(Quaternionf) via JVMCI - (4fe6e9d, 8e47794, e903fad, a8c326e, bbcd698, ebd13a3, 8bcc1b2, 09be171, 4fdf196, 9a172b1)
The above is currently only available in the org.joml:joml-experimental
Maven artifact and has a few restrictions:
- The JVMCI code paths will only be enabled for the x64 architecture
- The following VM arguments must be passed at runtime to enable JVMCI:
-XX:+UnlockExperimentalVMOptions
-XX:+EnableJVMCI
--enable-preview
--add-modules jdk.internal.vm.ci
--add-exports jdk.internal.vm.ci/jdk.vm.ci.code=ALL-UNNAMED
--add-exports jdk.internal.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED
--add-exports jdk.internal.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED
--add-exports jdk.internal.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED
--add-exports jdk.internal.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED
- It will not work when running the JVM with a debugger attached (JVMCI will not be enabled under an attached debugger - but the native methods are still registered in JOML and will then fail/crash at runtime)
However, the performance benefits are quite dramatic. E.g. Matrix4f inversion is almost three times as fast and Matrix4f multiplication almost 4.5 times as fast.
1.10.5
Breaking Changes
- Rename Matrix4.projViewFromRectangle() to perspectiveOffCenterViewFromRectangle() - (8cc09c2)
Additions
- Quaternion.mul(scalar) - (#316) (313e839)
- Matrix2d.getTransposed([int, ]FloatBuffer)/getTransposedFloats() - (d99f4f0)
- Matrix3d.getTransposed()/getTransposedFloats() - (d99f4f0)
- Matrix3x2d.getTransposed()/getTransposedFloats() - (d99f4f0)
- Matrix4d.getTransposed([int, ]FloatBuffer)/getTransposedFloats() - (d99f4f0)
Fixes
- Matrix2.mulComponentWise() - Thanks to @TheIceCreamBear (#310) (44177d8)
- Vector2f.round() - Thanks to @xupwup (#314) (be615b3)
- Matrix2d.getTransposed(Buffer) - (d99f4f0)
- Matrix4x3d.getTransposedFloats(ByteBuffer) - Thanks to @theagentd (#317) (d99f4f0)
1.10.4
Breaking Changes
- Remove non-const methods from Matrix4f/dc interfaces - those were in there by mistake (4d3a4f3)
Additions
- Quaternion.getEulerAnglesZXY() - (1c1922f)
- Quaternion.getEulerAnglesYXZ() - (f5ede55)
- Matrix4.[set]perspectiveOffCenterFov() - (21db7f0, 82539ae)
- Matrix4/4x3.translationRotateInvert() - (aad9dfc)
- Matrix4.[set]perspectiveOffCenterFovLH() - (c88d4da)
Fixes
- Intersection.intersect/testSphereSphere() - (#304) (1ba8c57)
- Setting matrix properties in Matrix4.negateX/Y/Z() - (280d561)
- Matrix4x3f.invert(Matrix4f) - m33 element was set to 0.0 instead of 1.0 (01ae4f0)
Miscellaneous
1.10.3
Additions
- Matrix4.tile(x, y, w, h) - to map a sub-cuboid of a ortho or perspective view (676c543)
- Matrix4x3.mul3x3(elements...) - multiply by specifying individual matrix elements (21c14ae)
- Matrix3/4x3/4.mapXYZ/...() - doing 90°/180°/270° rotations (and -1 scaling) without using sin/cos (c2beed4, f37e8d5, 3ced0b4, 1948aa9, 15b6c17, dea2ddb)
- Matrix3/4x3/4.negateX/Y/Z() - (b6edd37, 3ced0b4, dea2ddb)
- Matrix3/4x3/4.getEulerAnglesXYZ() - (1587fbc)
- Quaternion.getEulerAnglesZYX() - (6fe925b)
Fixes
1.10.2
Breaking Changes
Additions
Fixes
- Matrix.toString() not respecting joml.format.decimals option - (b559f05)
- Matrix3dc.getRowColumn() parameter order - Thanks to @leacoleaco (#285) (71addb8)
- Matrix4x3d.setFloats(index, ByteBuffer) not respecting provided index - Thanks to @leacoleaco (#286) (5f59006)
Miscellaneous
1.10.1
Additions
- Reintroduce Intersectionf/d classes - temporarily moved to joml-primitives in the 1.10.0 release (51fd2fe)
- Matrix4x3.scaleAround() - (0b464dc)
- Matrix.set(int, Buffer) - (#281) (7fd5da7)
Fixes
- Vector4.set(array) - Thanks to @brunesto (#278) (4b002f1)
- Aliasing bug in Matrix4.scaleAround() - (130ecb3)
- Aliasing bug in Matrix4.frustum()/frustumLH() - (dceb7e8)
- Matrix3x2f.get3x3(buffer) when using sun.misc.Unsafe - Thanks to @nickthecoder (#280) (57bbb18)
Miscellaneous
1.10.0
Breaking Changes
- Geometry primitives classes and the Intersectionf/d classes have been moved to
org.joml:joml-primitives
under packageorg.joml.primitives
. The change of packageorg.joml
toorg.joml.primitives
for these classes was necessary because multiple modules in the Java 9+ module system (Jigsaw) cannot export the same package when one module also depends on the other for that same package. - (#274) (8211a8a)
Development (including release notes for the changes between 1.9.25 and 1.10.0) of those primitives are continued in the JOML-CI/joml-primitives repository. For this 1.10.0 release, see: https://github.com/JOML-CI/joml-primitives/releases/tag/1.10.0
Additions
- Vector2i.div() - Thanks to @EXTER7 (#253) (dc96170)
- Quaternion.equals(delta) - Thanks to @pollend (#263) (9867ebf)
- Math.lerp/biLerp/triLerp() - Thanks to @pollend (#275) (631362a)
- Math.signum() - (#267) (15bb744)
- Vector2i(float/double,float/double,RoundingMode) constructor - Thanks to @pollend (#276) (a26ae03)
- Matrix3.quadraticFormProduct() - (#251) (5a73b16)
Fixes
- GeometryUtils.bitangent() - Thanks to @Kerai (#243) (3a4dd2d)
- Creating AxisAngle from identity quaternion - Thanks to @lukehutch (#255) (1627a32, 57fb50c)
- Parameter aliasing in Matrix4.mulPerspectiveAffine() - Thanks to @Exolothon (#266) (3275f4f)
- Sign in GeometryUtils.perpendicular() - Thanks to @tpietzsch (#272) (1f50824)
- Use sync instead of CAS-seeding with sun.misc.Unsafe in Random - Thanks to @Danjb1 (#273) (407eabd)
- Parameter aliasing in Matrix3x2.scaleAround() - (424d180)
Miscellaneous
1.9.25
Breaking Changes
- Unify AABB/Rectangle intersection test method names - Thanks to @pollend (#239) (#240) (582daa1)
- rename AABB.test*() to intersects*()
- rename Rectangle.intersects() to intersectsRectangle()
- rename Rectangle.contains() to containsPoint()
Additions
- Matrix4.transformTranspose(), Vector4.mulTranspose() - (094f9fd, 8e8a5d3)
- Matrix4f.setTransposed(array|buffer) - (ff6deb5)
- Matrix4f.setTransposedFromAddress() - (2a523b6)
- Math.clamp(float|double|int) - Thanks to @pollend (#233) (14033e6)
- AABBi - Thanks to @pollend (#235) (4e35f9b)
- AABB.set(AABBi/d/f source) - Thanks to @pollend (#234) (#238) (579f1de)
- AABB.isValid(), .validate(), .intersection() - Thanks to @pollend (#239) (#240) (582daa1)
- Expose generic Matrix4.mul() as mul0() - (279d153)
Fixes
- AxisAngle4.set(Matrix) when identity matrix - (9fba2f4)
- Rectangle.contains(point) - Thanks to @BenjaminAmos (#227) (1cdb432)
- Vector2f/d.perpendicular() - Thanks to @ieperen3039 (#230) (2c119bd)
- Rectanglei.writeExternal() writing float instead of int - Thanks to @pollend (#236) (e18d378)
- Parameter ordering in Quaternion.rotateYXZ() - Thanks to @kBlaszczyk (#237) (6cf938b)
- Intersection.findClosestPointOnRectangle() - Thanks to @defance (#242) (fae6cfa)
Miscellaneous
- Make Matrix4f.rotateXYZ() take a Vector3fc - Thanks to @cry0genic (#226) (b2d980c)
- Improve performance of Matrix4.set/get(column, row) using Unsafe - (3e016d3)
- Add -Djoml.forceUnsafe option to force the use of Unsafe in MemUtil - (53c0245)
- Improve performance of Matrix3.set/get(column, row) using Unsafe - (d024b83)
- Do not include sources and gwt xml in Graal build - (7fdd55a)
- Fix JavaDocs of methods returning
this
- (be76b05)