All Versions
10
Latest Version
Avg Release Cycle
109 days
Latest Release
1985 days ago
Changelog History
Changelog History
-
v3.2.3 Changes
September 01, 2019🔄 Changes since
3.2.2
:Bindings
- ➕ Added Shaderc bindings. (#77)
- ➕ Added bindings to platform APIs that can be used to programmatically generate input events.
- ⚡️ Assimp: Updated to 5.0.0rc2 (up from 5.0.0rc1).
- ⚡️ bgfx: Updated to API version 100 (up from 99)
- 🚀 glfw: Updated to 3.4.0 pre-release (up from 3.3.0)
- EGL: Added
EGL_NV_stream_dma
. - ⚡️ jemalloc: Updated to 5.2.1 (up from 5.2.0)
- ⚡️ LibOVR: Updated to 1.39.0 (up from 1.35.0)
- ⚡️ libdivide: Updated to 2.0 (up from 1.0)
- ⚡️ lz4: Updated to 1.9.2 (up from 1.9.1)
- Also, the LWJGL memory allocator is now used for internal allocations.
- ⚡️ nuklear: Updated to 4.01.0 (up from 4.00.2)
- ✅ OpenGL(ES): Added latest extensions.
GL_EXT_multiview_tessellation_geometry_shader
GL_EXT_multiview_texture_multisample
GL_EXT_multiview_timer_query
GL_EXT_texture_shadow_lod
GL_EXT_texture_sRGB_R8
GL_KHR_shader_subgroup
GL_NV_shader_subgroup_partitioned
GL_NVX_gpu_multicast2
GL_NVX_progress_fence
- ⚡️ OpenVR: Updated to 1.6.10 (up from 1.3.22)
- ⚡️ par: Updated
par_shapes
to latest version.- Added
par_shapes_create_cone
.
- Added
- par: Added par_streamlines bindings.
- ⚡️ rpmalloc: Updated to 1.4.0 (up from 1.3.2)
- stb
- Updated
stb_image
to 2.23 (up from 2.22) - Updated
stb_truetype
to 1.22 (up from 1.21) - Updated
stb_vorbis
to 1.17 (up from 1.16)
- Updated
- ⚡️ Vulkan: Updated to 1.1.121 (up from 1.0.107)
- Includes MoltenVK 1.0.36
- ⚡️ xxhash: Updated to 0.7.1 (up from 0.7.0)
- ⚡️ Zstd: Updated to 1.4.3 (up from 1.4.0)
👌 Improvements
- 🐧 Linux: Added support for ARM builds.
- 32-bit: ARMv7/armhf architecture. Maven classifier:
linux-arm32
- 64-bit: ARMv8/AArch64 architecture. Maven classifier:
linux-arm64
- 32-bit: ARMv7/armhf architecture. Maven classifier:
- 🏁 Windows: There is now a separate native JAR file per architecture.
- The default contains x64 shared libraries only. Maven classifier:
windows
lwjgl-natives-windows-x86.jar
contains x86 shared libraries only. Maven classifier:windows-x86
- The
32
suffix has been dropped from x86 shared library names.
- The default contains x64 shared libraries only. Maven classifier:
- 🏁 Windows: Shared libraries are now built with Visual Studio 2019 (up from 2017)
- Maven: LWJGL artifacts now include a Bill of Materials (
lwjgl-bom
). (#481)- The build customizer may be used to migrate Maven/Gradle scripts.
- 🔨 Refactored the layout of native JAR files.
- Shared libraries have been moved from the root to a
<platform>/<arch>/<module>/
subfolder. <platform>
: one oflinux
,macos
,windows
.<arch>
: one ofx64
,x86
,arm64
,arm32
.<module>
: the corresponding Java module name as a package hierarchy.- Example:
glfw.so
inlwjgl-glfw-natives-linux.jar
is under thelinux/x64/org/lwjgl/glfw
folder. - The new layout allows multiple native JAR files to be combined for custom deployment.
- Custom (or the old) layout may be used with newly exposed
Configuration
options.
- Shared libraries have been moved from the root to a
- Core: Added
enum Platform.Architecture
andPlatform.getArchitecture()
API. - Core: Added relative & absolute
apply(Consumer<T>)
methods toStructBuffer<T>
. - Core: Added
Consumer<T>
setters to structs with nested arrays of structs. - Core: Added
memByteBuffer
overloads that returnByteBuffer
views of other buffer types. - Core: Added
CLongBuffer
, a class similar toPointerBuffer
but for Clong
values.
🛠 Fixes
- 🚑 Core: Removed support for Critical JNI Natives. (#490)
- Will be restored in LWJGL 3.3 (disabled by default, enabled with a
Configuration
option).
- Will be restored in LWJGL 3.3 (disabled by default, enabled with a
- 🛠 Core: Fixed buffer attachment offset detection on JDK 12+. (#491)
- 🛠 Core: Fixed
ByteBuffer
attachments inmemSlice
&memDuplicate
. - 🛠 Generator: Fixed invalid generation of functions with struct parameters passed by value. (#496)
- Affected bindings: OpenVR and LLVM/Clang.
- Generator: Improved javadoc for array and nested struct members.
- 🛠 EGL/GLES: Fixed bootstrapping code.
- Regression caused by
org.lwjgl.system.JNI
refactoring in3.2.2
.
- Regression caused by
- 0️⃣ LLVM: Fixed default library names.
- 🚀 lmdb: Reverted to the official release. (#482)
- Windows: Performance issues are eliminated, but sparse database mappings & incremental file growth are not supported anymore.
- 🛠 OpenGL: Fixed signatures of
glGetnUniformiv
andglGetnUniformuiv
.
💥 Breaking Changes
(B): binary incompatible change (S): source incompatible change
- Core: The
Library.loadSystem
&Library.loadNative
methods now require a module name parameter. (S) - Core: Removed
Consumer<T>
overloads from read-only structs with nested struct members. (S) - Core:
MemoryUtil.memFree(PointerBuffer)
changed tomemFree(CustomBuffer)
. (B) - LZ4: The
autoFlush
andfavorDecSpeed
members ofLZ4F_preferences_t
are now mapped to Javaboolean
. (S) - Vulkan: The
descriptorCount
member ofVkWriteDescriptorSet
must now be set explicitly. (S)- The semantics of
descriptorCount
may change via extensions, which invalidates auto-sizing.
- The semantics of
-
v3.2.2 Changes
May 05, 2019🔄 Changes since
3.2.1
:Bindings
- ⚡️ bgfx: Updated to API version 99 (up from 90)
- 🚀 glfw: Updated to 3.3.0 (up from 3.3.0 pre-release):
- Added
GLFW_RAW_MOUSE_MOTION
. - Added
glfwGetMonitorWorkarea
. - Added
glfwRawMouseMotionSupported
.
- Added
- ⚡️ CUDA: Updated to 10.1 (up from 10.0)
- 🚀 jemalloc: Updated to 5.2.0 (up from pre-release 5.2.0)
- ⚡️ LibOVR: Updated to 1.35.0 (up from 1.31.0)
- ⚡️ LLVM/Clang: Updated to 8.0 (up from 7.0)
- ⚡️ lmdb: Updated to 0.9.24 (up from 0.9.23)
- ⚡️ lz4: Updated to 1.9.1 (up from 1.8.3)
- 👍 NanoVG: Added support for using bgfx as the rendering back-end.
- NanoVG: Added Blendish & OUI bindings.
- ⚡️ NativeFileDialog: Updated to 1.1.4 (up from 1.1.3)
- ⚡️ OpenVR: Updated to 1.3.22 (up from 1.1.3b)
- ⚡️ Opus: Updated to 1.3.1 (up from 1.3.0)
- stb
- Updated
stb_image
to 2.22 (up from 2.19) - Updated
stb_image_resize
to 0.96 (up from 0.95) - Updated
stb_image_write
to 1.13 (up from 1.09) - Updated
stb_perlin
to 0.4 (up from 0.3) - Updated
stb_rect_pack
to 1.00 (up from 0.11) - Updated
stb_truetype
to 1.21 (up from 1.19) - Updated
stb_vorbis
to 1.16 (up from 1.14)
- Updated
- ⚡️ tinyfiledialogs: Updated to 3.3.9 (up from 3.3.8)
- ⚡️ vma: Updated to 2.2.0 (up from 2.1.0)
- ⚡️ Vulkan: Updated to 1.1.107 (up from 1.0.95)
- Includes MoltenVK 1.0.35 (up from 1.0.27)
- ⚡️ xxhash: Updated to 0.7.0 (up from 0.6.5)
- ⚡️ Yoga: Updated to 1.14.0 (up from 1.10.0)
- ⚡️ Zstd: Updated to 1.4.0 (up from 1.3.7)
👌 Improvements
- 🏗 build(ant): The
release
target now works in offline mode (LWJGL_BUILD_OFFLINE=true
).- The build can be incomplete. Missing natives will be ignored and javadoc generation can be disabled for faster builds.
- 🚀 build(gradle): Deployments of incomplete builds to the local Maven repository are now allowed.
- ↪ Core: Implemented workaround for JDK-8195129 in the
SharedLibraryLoader
. - 🚑 perf: Critical JNI Natives are now generated for primitive-only functions.
- LLVM: The bindings can now be used with LLVM/Clang version 5.0 or newer (down from 8.0).
🛠 Fixes
- 🍎 build(ant): Fixed building on Linux & macOS when the path to LWJGL's root directory is shallow. (#442)
- 🛠 Core: Fixed race condition in callback deallocation when the debug allocator is enabled. (#444)
- ↪ Generator: The workaround for JDK-8167409 is now applicable to functions with 5 parameters + 1 implicit parameter (function address or struct value result).
- 👍 Generator: Support
void()
in callback functions without parameters. - Assimp: Added missing members to various struct types.
- 👀 LLVM:
LLVMGetErrorMessage
now returnsByteBuffer
instead ofString
, so thatLLVMDisposeErrorMessage
can be used. - nuklear: The
nk_text_edit
,nk_text_undo_state
andnk_text_undo_record
structs are now public. - OpenCL: Array overloads of
EnqueueRead/Write
functions cannot be used to perform non-blocking reads/writes anymore. - OpenGL: Added
GL_DRAW_INDIRECT_BUFFER
overloads toNV_bindless_multi_draw_indirect
&NV_bindless_multi_draw_indirect_count
extensions. - 🛠 vma: Fixed
VmaMemoryUsage
enumeration values. (#458)
💥 Breaking Changes
(B): binary incompatible change (S): source incompatible change
- Core: Function address parameters in
org.lwjgl.system.JNI
&org.lwjgl.system.jawt.JAWTFunctions
methods are now last, after normal parameters. (S)- Enables tail-calls without argument shuffling, when Critical JNI Natives are used.
- glfw: removed
CharSequence
overload ofglfwUpdateGamepadMappings
. (S) (#462)
Known Issues
- Core: LWJGL 3.2.2 is incompatible with Java 12 or higher. (#491)
- This issue is fixed in LWJGL 3.2.3.
- 📌 Core: Using LWJGL 3.2.2 with a garbage collector that does not support object pinning, may lead to excessive GC-related blocking. (#490)
- Workaround: pass
-XX:-CriticalJNINatives
to the JVM. - This issue is fixed in LWJGL 3.2.3.
- Workaround: pass
-
v3.2.1 Changes
December 08, 2018🔄 Changes since
3.2.0
:Bindings
- ➕ Added CUDA bindings.
- Only the Driver API & NVRTC are supported in this release.
- Bindings to more CUDA Toolkit libraries will be added in the future.
- ➕ Added libdivide bindings.
- ➕ Added LLVM/Clang bindings.
- LLVM binaries are not included in this release. They must be separately downloaded or built for each platform.
- ➕ Added Meow hash bindings.
- ➕ Added Opus bindings.
- ⚡️ bgfx: Updated to API version 90 (up from 76)
- ⚡️ dyncall: Updated to 1.0 (up from 1.0-RC)
- 🚀 glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
- Added
GLFW_SCALE_TO_MONITOR
. - Added
glfwAttachWin32Window
. (experimental)
- Added
- 🚀 jemalloc: Updated to pre-release 5.2.0 (up from 5.1.0)
- When available, it is again the default memory allocator on Windows.
- ⚡️ LibOVR: Updated to 1.30.0 (up from 1.26.0)
- ⚡️ lz4: Updated to 1.8.3 (up from 1.8.2)
- ⚡️ Nuklear: Updated to 4.00.2 (up from 4.00.1)
- ⚡️ OpenAL Soft: Updated to 1.19.1 (up from 1.18.2)
- Added
ALC_SOFT_device_clock
extension.
- Added
- ✅ OpenGL(ES): Added latest extensions:
NV_memory_attachment
NV_compute_shader_derivatives
NV_fragment_shader_barycentric
NV_mesh_shader
NV_representative_fragment_test
NV_scissor_exclusive
NV_shader_texture_footprint
NV_shading_rate_image
QCOM_shader_framebuffer_fetch_rate
QCOM_texture_foveated_subsampled_layout
- ⚡️ OpenVR: Updated to 1.1.3b (up from 1.0.16)
- ⚡️ rpmalloc: Updated to 1.3.2 (up from 1.3.1)
- ⚡️ tinyfiledialogs: Updated to 3.3.8 (up from 3.3.6)
- ⚡️ vma: Updated to 2.1.0 (up from 2.0.0)
- ⚡️ Vulkan: Updated to 1.1.95 (up from 1.0.82)
- Includes MoltenVK 1.0.27 (up from 1.0.16)
- ⚡️ Yoga: Updated to 1.10.0 (up from 1.9.0)
- ⚡️ Zstd: Updated to 1.3.7 (up from 1.3.5)
👌 Improvements
- 🔨 perf(core): Refactored LWJGL internals to make call stacks shallower.
- Makes it harder to cross Hotspot's default
MaxInlineLevel
threshold, which can disable important optimizations.
- Makes it harder to cross Hotspot's default
- 🔨 perf(core): Added
memDuplicate
and refactoredmemSlice
with implementations that useUnsafe
to construct buffer instances, similar tomem-X-Buffer
.- Compared to the default JDK implementations, these methods are faster and enable Scalar Replacement via EA on Hotspot.
- The
memSlice
with offset method is also thread-safe now.
- ↪ perf(core): Implemented workarounds to make struct buffer iteration garbage free on Hotspot.
- perf(core): Re-tuned string codecs and
memCopy
/memSet
for Java versions 8 to 11. - perf(core): Added thread-local array cache to minimize allocations while decoding text.
- 🏗 bgfx: Builds of bgfx tools (
geometryc
,shaderc
,texturec
,texturev
) are now available.- Use the file browser in the LWJGL website to download the executables.
- For example, the latest Windows x64 build of
shaderc
can be found undernightly/windows/x64/bgfx-tools/
.
- vma:
VmaVulkanFunctions.set(VkInstance, VkDevice)
will now use Vulkan 1.1 functions instead ofKHR_get_memory_requirements2
functions, if available. - Generator: The template DSL has been simplified considerably.
- 📜 Generator: Added the
LWJGL Template Extraction Tool
. It uses the new Clang bindings to parse native headers and extract LWJGL template declarations.- Extracts both declarations and associated documentation.
- Written in Kotlin. The source can be found in the
extract
module.
🛠 Fixes
- 🛠 Core: Fixed text decoding from buffer with
.position() > 0
.- Affected all decoders on Java 9+, only UTF-16 on Java 8.
- 🛠 Core: Fixed the bounds check in
memCopy
. (#414) - 🛠 OpenAL: Fixed signature of
alListener3i
. (#427) - OpenVR: The
pGamePoseArray
parameter ofVRCompositor_WaitGetPoses
is now nullable. (#418) - 🛠 OpenVR: Fixed returned type of
VRRenderModels_GetComponentStateForDevicePath
. - OpenVR: Renamed
VRInput_UncompressSkeletalActionData
toVRInput_DecompressSkeletalBoneData
. - 🛠 OpenVR: Fixed wrong modifiers in
VRInput
functions:VRInput_GetDigitalActionData
VRInput_GetAnalogActionData
VRInput_GetPoseActionData
VRInput_GetSkeletalActionData
VRInput_GetOriginTrackedDeviceInfo
- vma: The native library is now initialized automatically.
- vma: Optional
KHR_get_memory_requirements2
addresses inVmaVulkanFunctions
are now nullable. - vma: Nullability of
VmaAllocationCreateInfo
&VmaAllocationInfo
members.
💥 Breaking Changes
(B): binary incompatible change (S): source incompatible change
- Core:
sun.misc.Unsafe
is now required, there is no JNI fallback. - vma: The
VmaVulkanFunctions.set
helper method now returnsVmaVulkanFunctions
. (B)
Known Issues
- Core: LWJGL 3.2.1 is incompatible with Java 12 or higher. (#491)
- This issue is fixed in LWJGL 3.2.3.
- ➕ Added CUDA bindings.
-
v3.2.0 Changes
July 30, 2018🔄 Changes since
3.1.6
:Bindings
- ➕ Added Vulkan Memory Allocator bindings.
- ⚡️ bgfx: Updated to API version 76 (up from 60)
bgfx_init
now accepts a parameter structure instead of arguments.
- 🚀 glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
- Added support for gamepad mapping input modifiers (SDL 2.0.6+ format)
- Added
GLFW_FOCUS_ON_SHOW
.
- ⚡️ dyncall: Updated to revision 275 (up from 241)
- ⚡️ jemalloc: Update to 5.1.0 (up from 5.0.1)
- ⚡️ lz4: Updated to 1.8.2 (up from 1.8.1)
- ⚡️ LibOVR: Updated to 1.26.0 (up from 1.20.0)
- ⚡️ Nuklear: Updated to 4.00.1 (up from 3.00.2)
- OpenGL: Introduced new
GL11C...GL46C
classes that include symbols of the Core Profile only.- Read the
org.lwjgl.opengl
package javadoc for more information on this feature.
- Read the
- ⚡️ OpenVR: Updated to 1.0.16 (up from 1.0.12)
- ⚡️ rpmalloc: Updated to 1.3.1 (up from 1.2.2)
- stb
- Updated
stb_image
to 2.19 (up from 2.18) - Updated
stb_image_write
to 1.09 (up from 1.08) - Updated
stb_truetype
to 1.19 (up from 1.18) - Updated
stb_vorbis
to 1.14 (up from 1.13b)
- Updated
- ⚡️ tinyfiledialogs: Updated to 3.3.6 (up from 3.2.9)
- ⚡️ Vulkan: Updated to 1.1.82 (up from 1.0.68)
- Includes MoltenVK 1.0.16
- ⚡️ xxhash: Update to 0.6.5 (up from 0.6.4)
- ⚡️ Yoga: Updated to 1.9.0 (up from 1.7.1)
- ⚡️ Zstd: Updated to 1.3.5 (up from 1.3.4)
👌 Improvements
- 🔖 Versioned classes in bindings now form inheritance hierarchies.
- Applicable to the following versioned classes:
AL
,ALC
,CL
,EGL
,GL
,GLES
,GLX
,VK
- For example, the
GL30
class now extends theGL21
class,GL21
extendsGL20
and so on. - With this change, importing a versioned class allows all symbols up to that version to be resolved. Earlier versions do not need to be imported separately.
- Applicable to the following versioned classes:
- perf(core):
memGetAddress
/memPutAddress
are now an order of magnitude faster on 32-bit JVMs. - ⚡️ perf(core): Optimized pointer arithmetic by helping the JVM identify unsigned integers.
- perf(core): The new
java.util.Objects
index check intrinsics are used on Java 9. - perf(core):
MemoryUtil
string decoding methods are now faster on both Java 8 and 9+.- The Java 9 implementations are tuned for compact strings (JEP 254).
- perf(generator): Function pointers in capabilities classes are not sorted by name anymore.
- This makes it more likely that for functions that are commonly used together, their respective pointers
will be closer in memory, avoiding unnecessary cache misses.
- This makes it more likely that for functions that are commonly used together, their respective pointers
- Generator:
org.lwjgl.system.JNI
now includes signatures for known callback functions.- Can be used for callback function delegation.
- 👍 Generator: Added support for custom methods in struct classes.
- Generator: Added fluent setters for nested structs.
- Generator: Made StructBuffer subclass generation optional.
- 🖨 Loader: Now prints the path of shared libraries loaded from system paths in debug mode, when possible.
- 📄 docs(core): Improved
PointerBuffer
javadoc. - 📄 docs: The LWJGL javadoc is now generated with JDK 10.
- Core:
MemoryUtil
methods now replace requests for zero-size allocations with non-zero-size allocations.- A zero-size allocation now always returns a non-
NULL
pointer or throws anOOME
. This is consistent withByteBuffer.allocateDirect
and avoids the undefined behavior of native allocators. - The returned buffer has a capacity of zero, regardless of the actual allocation size.
- A zero-size allocation now always returns a non-
- Core
MemoryUtil.memRealloc
is not@Nullable
anymore, will either succeed or throw anOOME
, likememAlloc/memCalloc
. - Core: It is now possible to create a
MemoryStack
backed by externally managed memory. - 🔧 Core: The debug allocator now also tracks internal allocations of shared libraries that have been configured to use the LWJGL memory allocator.
- This enables monitoring/debugging allocations inside shared libraries. Internal resources that are never released are now reported on shutdown.
- Enabled by default when
Configuration.DEBUG_MEMORY_ALLOCATOR
is enabled. - May be disabled with
Configuration.DEBUG_MEMORY_ALLOCATOR_INTERNAL.set(false)
.
- LMDB: The LWJGL memory allocator is now used for internal allocations.
- NanoVG/NanoSVG: The LWJGL memory allocator is now used for internal allocations.
- OpenGL/GLES: Calling an unavailable function triggers a JNI
FatalError
instead of an arbitrary segfault.- Avoids the intimidating crash log and writes a clean stack trace to
stderr
.
- Avoids the intimidating crash log and writes a clean stack trace to
🛠 Fixes
- 🛠 Generator: Fixed nullability of macro bindings.
- 🛠 Generator: Fixed location of generated static blocks
- 👍 Core: Struct buffer
malloc/calloc
methods now support zero capacity, instead of throwing aNPE
. - 🍎 macOS: Fixed version number detection in
.dylib
name mapping - 🛠 Nullability fixes in:
- Assimp
- CGL
- Yoga
- Parameters of struct multi-setter methods
- OpenCL: Fixed
CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT
constant name. - OpenCL: Dropped unnecessary
clSetKernalArg3<t>
overloads. - 🆓 OpenGL/GLES: The thread-local-free function pointer lookups do not depend on JVMTI anymore.
- stb: Fixed type of
stbi_write_jpg
function'sdata
parameter.
💥 Breaking Changes
- Core:
MemoryUtil.MemoryAllocationReport
now also returns the address of the memory allocation. - NanoVG: Parameters
windowWidth
/windowHeight
of thenvgBeginFrame
function changed tofloat
.
Known Issues
- vma: The native library is not initialized automatically.
- Workaround: call
Class.forName("org.lwjgl.util.vma.LibVma")
before using the VMA bindings.
- Workaround: call
- vma:
KHR_get_memory_requirements2
function addresses inVmaVulkanFunctions
are not optional.- Workaround: Enable the
KHR_get_memory_requirements2
extension, or set the equivalent function addresses from Vulkan1.1
.
- Workaround: Enable the
-
v3.1.6 Changes
February 04, 2018🔄 Changes since
3.1.5
:Bindings
- ⚡️ bgfx: Updated to API version 60 (up from 55)
- 🚀 glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
- Support for lock key modifiers (
GLFW_LOCK_KEY_MODS
input mode,GLFW_MOD_CAPS_LOCK
,GLFW_MOD_NUM_LOCK
) - Support for string window hints (
glfwWindowHintString
,GLFW_COCOA_FRAME_NAME
,GLFW_X11_CLASS_NAME
,GLFW_X11_INSTANCE_NAME
) - Support monitor & joystick user ponters (
glfwSetMonitorUserPointer
,glfwGetMonitorUserPointer
,glfwSetJoystickUserPointer
,glfwGetJoystickUserPointer
) - Support for window content scale callbacks (
glfwSetWindowContentScaleCallback
) - Support for cursor hover tests (
GLFW_HOVERED
)
- Support for lock key modifiers (
- ⚡️ lz4: Update to 1.8.1 (up from 1.8.0)
- ⚡️ Nuklear: Update to 3.00.2 (up from 2.00.4)
- ⚡️ OpenVR: Updated to 1.0.12 (up from 1.0.10)
- ⚡️ rpmalloc: Updated to 1.2.2 (up from 1.2.0)
- stb
- Updated
stb_dxt
to 1.08b (up from 1.0.7) - Updated
stb_image
to 2.18 (up from 2.16) - Updated
stb_image_write
to 1.08 (up from 1.07) STBIW_ZLIB_COMPRESS
can be overridden at runtime withstbi_zlib_compress
.- Updated
stb_truetype
to 1.18 (up from 1.17) - Updated
stb_vorbis
to 1.13b (up from 1.11)
- Updated
- ⚡️ tinyfiledialogs: Updated to 3.2.9 (up from 3.2.4)
- ⚡️ Vulkan: Updated to 1.0.68 (up from 1.0.65)
- ⚡️ xxhash: Updated to 0.6.4 (up from 0.6.3)
- ⚡️ Zstd: Updated to 1.3.4 (up from 1.3.2)
- ⚡️ Yoga: Updated to 1.9.0 (up from 1.7.0)
👌 Improvements
- ➕ Added JSR-305 nullability annotations to the core and all bindings. (#344)
- Enables static analysis tools (FindBugs, IDEs) to detect accesses that could cause
NullPointerException
. Eliminating those improves the quality of LWJGL applications. - Enables better interopation with JVM-based languages that feature built-in null-safety. For example, see Kotlin's JSR-305 support.
- Enables static analysis tools (FindBugs, IDEs) to detect accesses that could cause
- ➕ Added
Configuration
setting to disable function lookup checks. - lmdb: Databases are now binary compatible across 32 & 64-bit architectures. (#364)
MDB_VL32
is enabled on 32-bit builds.
- 👍 par_shapes: Patched to support 32-bit indices and extremely dense meshes.
- stb_truetype: Exposed members of internal structures for advanced glyph packing customization. (#358)
- 👍 Tootle: Now supports the Direct3D rasterizer for overdraw optimization.
🛠 Fixes
- JPMS: A natives module now
requires transitive
the corresponding Java module, instead of the opposite. (#334)- Enables loading shared libraries from non-modular paths/JARs.
- 🚚 JPMS:
module-info
files have been moved underMETA-INF/version/9/
(#334)- All LWJGL artifacts are now multi-release JAR files to avoid trouble with older tools that are not compatible with Java 9.
- JPMS: Added appropriate
requires static
declarations to satisfy optional binding interop dependencies. (#369) - 🛠 Fixed broken javadoc links in all bindings. Also updated URLs to avoid redirects.
- ⏪ bgfx: Restored default API thread encoder functions, that were erroneously removed in
3.1.4
. - 🛠 LibOVR: Fixed
ovr_TraceMessage
signature. - OpenAL: Fixed capability name of the
AL_SOFT_source_resampler
extension. - 🛠 Tootle: Fixed
pnClusterRemapOut
parameter validation.
💥 Breaking Changes
- Several methods that previously accepted
null
/NULL
and returnednull
, now require non-null input.- Applies to: struct & callback creation methods and
memByteBuffer
/memUTF8
/stack.UTF8
/etc. - Added corresponding methods with the
Safe
suffix that acceptnull
/NULL
, matching the old behavior. - With this change the common case (non-null input) requires no code changes and is warning/error-free. The uncommon case (null input) is recognizable (the suffix) and must be handled properly to eliminate warnings/errors.
- Applies to: struct & callback creation methods and
- Allocation methods that returned
null
/NULL
on allocation failure, now throwOutOfMemoryError
instead. This matches the behavior ofByteBuffer.allocateDirect
.- Applies to: struct allocation methods and
memAlloc
/memCalloc
/etc. - Does not apply to allocations via direct binding calls (e.g.
LibCStdlib.malloc
).
- Applies to: struct allocation methods and
- Getters of struct members that should never be
NULL
, throwNullPointerException
instead of returningnull
when the struct instance is not initialized.- Use
Struct::isNull
to test pointer members of untrusted struct instances.
- Use
- bgfx: Restored native mapping of
bgfx_init(_vendorId)
andbgfx_update_texture_cube(_side)
parameters. (#368) - bgfx:
uint16_t
bitfield constants are now mapped toint
. (#368) - glfw:
glfwInitHintString
has been renamed toglfwWindowHintString
. - lmdb: Databases developed on 32-bit architectures must be recreated. (#364)
- par_shapes: Changed
par_shapes_mesh::triangles
fromuint16_t/ShortBuffer
touint32_t/IntBuffer
. - stb_rect_pack:
stbrp_rect::was_packed
is now mapped to Javaboolean
.
-
v3.1.5 Changes
January 23, 2018🔄 Changes since
3.1.4
:Bindings
- ➕ Added AMD Tootle bindings.
- Only the software rasterizer is supported.
🛠 Fixes
- 🛠 Fixed various javadoc links.
- 📜 par: Parsing of floating point values in L-systems is now locale-insensitive.
- 🛠 stb: Fixed buffer checks to account for row stride, when specified.
- 🛠 Generator: Fixed auto-size transformations by non-constant expressions.
💥 Breaking Changes
- ✂ Removed array overloads from the LZ4 & ODBC bindings.
- They were added by mistake in LWJGL
3.1.4
.
- They were added by mistake in LWJGL
- ➕ Added AMD Tootle bindings.
-
v3.1.4 Changes
November 19, 2017🔄 Changes since
3.1.3
:Bindings
- ➕ Added LZ4 bindings.
- ➕ Added NanoSVG to the existing
NanoVG
bindings. - ➕ Added ODBC bindings.
- ➕ Added Remotery bindings.
- ➕ Added Zstandard bindings.
- ⚡️ bgfx: Updated to API version 55 (up from 48)
- 🚀 glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
- Support for transparent window framebuffers (
GLFW_TRANSPARENT_FRAMEBUFFER
window hint) - Support for whole window opacity (
glfwGetWindowOpacity
andglfwSetWindowOpacity
) - Support for content scale queries (
glfwGetMonitorContentScale
andglfwGetWindowContentScale
) - Linux: Added support for the experimental Wayland backend. Enable with
-Dorg.lwjgl.glfw.libname=glfw_wayland
.
- Support for transparent window framebuffers (
- ⚡️ LibOVR: Updated to 1.20.0 (up from 1.18.0)
- ⚡️ Nuklear: Updated to 2.00.4 (up from 2.00.2)
- ⚡️ tinyfiledialogs: Updated to 3.2.4 (up from 3.0.5)
- ⚡️ Vulkan: Updated to 1.0.65 (up from 1.0.61)
- ⚡️ Yoga: Updated to 1.7.0 (up from 1.6.0)
👌 Improvements
- Replaced
Automatic-Module-Name
with explicit JPMS modules.- Enables applications using LWJGL to be bundled in custom run-time images with the
jlink
tool.
- Enables applications using LWJGL to be bundled in custom run-time images with the
- 🐎 lmdb: Significantly improved incremental growth performance on Windows.
- Granularity of mapped memory commits increased from
4KB
(page size) to2MB
. - This is an unofficial patch of
ITS#8324
.
- Granularity of mapped memory commits increased from
🛠 Fixes
- 🛠 EGL: Fixed nullability of
eglMakeCurrent
arguments. - 🛠 OpenVR: Fixed mapping of Vulkan forward declarations.
- 🛠 Fixed native library resource discovery when running LWJGL as JPMS modules.
- 🛠 Fixed invalid size calculation in
<StructType>.malloc(capacity)
methods. - 🛠 Fixed
MemoryStack
debugging when a try-with-resources block does not inline the call toAutoCloseable::close
.- Supports Java 9 try-with-resources, which generates a synthetic
$closeResource
method. - Supports Kotlin's
T.use
, which uses thekotlin.AutoCloseable::closeFinally
extension function.
- Supports Java 9 try-with-resources, which generates a synthetic
- 🛠 Fixed build number lookup from the jar manifest.
-
v3.1.3 Changes
September 22, 2017🔄 Changes since
3.1.2
:Bindings
- ➕ Added rpmalloc bindings.
- Use
-Dorg.lwjgl.system.allocator=rpmalloc
to make it the default memory allocator.
- Use
- ➕ Added new extensions to OpenCL, EGL, OpenGL and OpenGL ES.
- ⚡️ Assimp: Updated to 4.0.1 (up from 3.3.1)
- ⚡️ bgfx: Updated to API version 48 (up from 41)
- ✅ EGL: Added support for latest extensions
- 🚀 glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
- Improvements to error code query (
glfwGetError
) - More library initialization hints (
glfwInitHintString
) - SDL_GameControllerDB support
- Import gamepad mappings (
glfwUpdateGamepadMappings
) - Query to determine whether a joystick has a gamepad mapping (
glfwJoystickIsGamepad
) - Query the name of a controller provided by its gamepad mapping (
glfwGetGamepadName
) - Retrieve gamepad input state (
glfwGetGamepadState
,GLFW_GAMEPAD_*
,GLFWgamepadstate
) - Query the SDL compatible GUID of a joystick (
glfwGetJoystickGUID
) - Linux: Moved to evdev for joystick input
- EGL: Fixed support for
EGL_KHR_create_context_no_error
- GLX: Added support for
GLX_ARB_create_context_no_error
- WGL: Added support for
WGL_ARB_create_context_no_error
andWGL_EXT_colorspace
- Improvements to error code query (
- ⚡️ jemalloc: Updated to 5.0.1 (up from 4.5.0)
- ⚡️ LibOVR: Updated to 1.18.0 (up from 1.14.0)
- ⚡️ lmdb: Updated to 0.9.21 (up from withdrawn 0.9.20)
- 🐎 NanoVG: Updated to latest version (performance updates and new
nvgShapeAntiAlias
function). - ⚡️ Nuklear: Updated to 2.00.2 (up from 1.37.0)
- OpenAL: Added
ALC_SOFT_output_limiter
extension. - ⚡️ OpenAL Soft: Updated to 1.18.2 (up from 1.17.2)
- 👍 OpenCL: Added support for OpenCL 2.2
- ✅ OpenGL: Added support for OpenGL 4.6 and latest extensions
- ✅ OpenGL ES: Added support for latest extensions
- ⚡️ OpenVR: Update to 1.0.10 (up from 1.0.7)
- stb
- Updated
stb_dxt
to 1.07 (up from 1.06) - Updated
stb_image
to 2.16 (up from 2.15) - Updated
stb_image_resize
to 0.95 (up from 0.94) - Updated
stb_image_write
to 1.07 (up from 1.05) - Updated
stb_truetype
to 1.17 (up from 1.15) - Updated
stb_vorbis
to 1.11 (up from 1.10)
- Updated
- ⚡️ tinyfiledialogs: Updated to 3.0.5 (up from 2.8.3)
- ⚡️ Vulkan: Updated to 1.0.61 (up from 1.0.49)
- ⚡️ xxhash: Updated to 0.6.3 (up from 0.6.2)
- ⚡️ Yoga: Updated to 1.6.0 (up from 1.5.0)
👌 Improvements
- Generator: Added
@NativeType
annotations to generated bindings. Documents the native type of:- Callback and struct classes.
- Struct members.
- Function parameters and return values.
- 🏁 The default memory allocator on Windows is now the system allocator instead of jemalloc.
- jemalloc is not properly optimized for Windows and its performance is not competitive.
- jemalloc is still a major performance win on Linux and macOS.
- rpmalloc is faster on all platforms but requires per-thread setup, so must be enabled manually.
- Buffers created via
MemoryUtil
may now have up toInteger.MAX_VALUE
elements, regardless of element size.- For example this allows a
LongBuffer
allocation of up to 16GB.
- For example this allows a
- ➕ Added typed overloads to
MemoryUtil::memSet
andMemoryUtil::memCopy
. StructBuffer
subclasses are nowIterable
and havestream()
andparallelStream()
methods.- OpenGL: Added
LongBuffer
overloads to buffer object functions.
🛠 Fixes
- bgfx: Fixed signature of
bgfx_create_frame_buffer_from_attachment
. - 🛠 OpenGL: Fixed signature of
glPixelStoref
. - OpenGL:
ARB_direct_state_access
interactions are now respected when checking if the extension is available. - stb_image: added
ShortBuffer
overload tostbi_image_free
. - 🛠 stb_truetype: Fixed signature of
stbtt_PackFontRangesGatherRects
andstbtt_PackFontRangesRenderIntoRects
.
💥 Breaking Changes
- glfw: Signature of
glfwGetError
has changed. - 🚚 jemalloc: Removed
JEmacros
and moved its functionality toJEmalloc
. - jemalloc:
ChunkHooks
has been replaced byExtentHooks
. - 🚚 OpenCL: Removed two confusing
clCompileProgram
overloads.
- ➕ Added rpmalloc bindings.
-
v3.1.2 Changes
May 15, 2017🔄 Changes since
3.1.1
:Bindings
- ➕ Added OpenVR bindings.
- ➕ Added Tiny OpenEXR bindings.
- ➕ Added Yoga bindings.
- ⚡️ bgfx: Updated to API version 41 (up from 34)
- 🚀 glfw: Updated to pre-release 3.3.0 version (up from 3.2.1). Includes many fixes and new features:
- Last error code query (
glfwGetError
) - Requesting attention from the user (
glfwRequestWindowAttention
) - Platform dependent scancodes for keys (
glfwGetKeyScancode
) - Window maximization events (
glfwSetWindowMaximizeCallback
) - Window attribute modification (
glfwSetWindowAttrib
) - Joystick hats (
glfwGetJoystickHats
) - Library initialization hints (
glfwInitHint
) - Headless OSMesa backend
- Cursor centering control (
GLFW_CENTER_CURSOR
) - macOS: Cocoa hints (
GLFW_COCOA_RETINA_FRAMEBUFFER
,GLFW_COCOA_FRAME_AUTOSAVE
,GLFW_COCOA_GRAPHICS_SWITCHING
,GLFW_COCOA_CHDIR_RESOURCES
,GLFW_COCOA_MENUBAR
) - macOS: Vulkan support via MoltenVK
- X11: Moved to XI2
XI_RawMotion
for disabled cursor mode motion input - EGL: Added support for
EGL_KHR_get_all_proc_addresses
andEGL_KHR_context_flush_control
- Last error code query (
- ⚡️ jemalloc: Updated to 4.5.0 (up from 4.4.0)
- ⚡️ LibOVR: Update to 1.14.0 (up from 1.10.0)
- ⚡️ lmdb: Updated to 0.9.20 (up from 0.9.18)
- 👍 NanoVG: Added support for fallback fonts.
- ⚡️ nuklear: Updated to 1.37.0 (up from 1.29.1, with the new versioning)
- OpenAL: Added
AL_SOFT_source_resampler
extension. - stb
- Updated
stb_dxt
to 1.0.6 (up from 1.0.4) - Updated
stb_easy_font
to 1.0 (up from 0.7) - Updated
stb_image
to 2.15 (up from 2.13) - Updated
stb_image_resize
to 0.94 (up from 0.91) - Updated
stb_image_write
to 1.05 (up from 1.02) - Updated
stb_perlin
to 0.3 (up from 0.2) - Updated
stb_rect_pack
to 0.11 (up from 0.10) - Updated
stb_truetype
to 1.15 (up from 1.12) - Updated
stb_vorbis
to 1.10 (up from 1.09)
- Updated
- ⚡️ tinyfiledialogs: Updated to 2.8.3 (up from 2.7.2)
- ⚡️ Vulkan: Updated to 1.0.49 (up from 1.0.38)
👌 Improvements
- 0️⃣
MemoryStack
: Increased default stack size to 64kb (up from 32kb) - Shared library loading can now utilize a
ClassLoader
specified by the caller. (#277) - Significantly reduced
DEBUG_MEMORY_ALLOCATOR
andDEBUG_STACK
overhead in Java 9 using the newStackWalker
API. - ⚡️ Migrated windows builds to appveyor and updated to Visual Studio 2017 (up from 2015)
- EGL: The core API now includes javadoc links to the Khronos references pages
- OpenGL ES: The core API now includes javadoc links to the Khronos references pages
🛠 Fixes
- 🛠 Assimp: Struct member nullability fixes
- 🐧 Linux: Removed dependencies to newer GLIBC versions.
- 🛠 LibOVR: Fixed layout of the
ovrInputState
struct. - 🚚 OpenAL: Removed buffer auto-sizing from
alcCaptureSamples
. The number of samples must now be specified explicitly, similar toalcRenderSamplesSOFT
. - Vulkan: Function addresses are now retrieved only once, using the optimal method for each function type.
- This avoids warnings on pedantic validation layers.
- 🛠 Fixed callback invocation bugs on 32-bit architectures.
- 🛠 Fixed various javadoc formatting issues (#308)
💥 Breaking Changes
- Mapped more integer parameters and return values to Java
boolean
, that were missed while working on #181.- Xlib's
Bool
- OpenCL's
cl_bool
- DynCall's
DCbool
- Xlib's
- 🚚 Moved JNI global reference functions from
MemoryUtil
to the generatedorg.lwjgl.system.jni.JNINativeInterface
. - The Vulkan capabilities have been split into two classes:
VKCapabilitiesInstance
andVKCapabilitiesDevice
.- Flags for core Vulkan versions exist in both classes.
- Flags for instance extensions exist only in
VKCapabilitiesInstance
. - Flags for device extensions exist only in
VKCapabilitiesDevice
. - Functions that dispatch on
VkInstance
orVkPhysicalDevice
exist only inVKCapabilitiesInstance
. - Functions that dispatch on
VkDevice
and device-derived handles exist only inVKCapabilitiesDevice
. - Bootstrapping functions can be retrieved with
VK.getFunctionProvider()
.
-
v3.1.1 Changes
December 27, 2016🔄 Changes since
3.1.0
:Bindings
- ➕ Added Assimp bindings.
- ⚡️ bgfx: Updated to API version 34 (up from 28)
- ⚡️ jemalloc: Updated to version 4.4.0 (up from 4.2.1)
- ⚡️ LibOVR: Updated to version 1.10.0 (up from 1.9.0)
- ⚡️ nuklear: Updated to version 1.191 (up from 1.17)
- ⚡️ Vulkan: Updated to version 1.0.38 (up from 1.0.32)
- ⚡️ stb: Updated stb_image to 2.13 (up from 2.12)
- ⚡️ tinyfiledialogs: Updated to version 2.7.2 (up from 2.6.1)
👌 Improvements
- 🔨 Refactored function pointer lookups in OpenAL, OpenGL and OpenGL ES.
- Significant reduction in bytecode size (and corresponding JIT code).
- No thread-local lookup in GL and GLES, even with incompatible contexts.
- Removed obsolete thread-local and capabilities state
Configuration
options.
- 🐧 Linux: All natives are now built with GCC 6.2 (up from 4.8)
- ⚠ Loader: If
jemalloc
initialization fails andorg.lwjgl.system.allocator
has not been set, a simple warning is now shown instead of an exception. - Structs: Added bound checks to element accessors of array members.
- Generator: Validation is now required for all data pointer parameters. If validation is not possible, such parameters must be marked as potentially unsafe.
- The SHA-1 hash of shared libraries is now included in the corresponding
natives
JAR files. - 🏗 The upstream git revision used to build shared libraries is now included in the corresponding
natives
JAR files.
🛠 Fixes
- 🛠 Fixed loader diagnostics when
System.loadLibrary
fails. - 🛠 Fixed setters of struct members with optional AutoSize. (#255)
- 🛠 Fixed
MemoryUtil.memRealloc
to returnnull
when the allocation fails. - Vulkan: Function pointer loading of disabled extensions is now skipped.
- Generator:
binding.DISABLE_CHECKS
is now respected in structs.
💥 Breaking Changes
- 🍎 macOS: LWJGL now requires macOS 10.9/Mavericks or later (up from 10.7/Lion)
- 🚀 A small number of method signatures have changed because of auto-size transformations that were missing in previous releases.
- NanoVG: Text functions with an
end
pointer to the end of the string are now auto-size transformed. Buffers passed to them should not include a null-terminating byte. - ➕ Added
LibC
prefix to all class names in thelibc
bindings, to avoid conflicts with standard Java classes (Locale
,String
, etc.) - OpenGL and OpenGL ES now come with native libraries (
lwjgl_opengl
andlwjgl_opengles
respectively). - ✂ Removed
MemoryUtil.memSetupBuffer
.