Releases: LWJGL/lwjgl3
Releases · LWJGL/lwjgl3
LWJGL 3.3.5
Changes since 3.3.4:
Bindings
- Assimp: Updated to 5.4.3 (up from 5.4.2)
- bgfx: Updated to API version 129 (up from 128)
- FMOD: Updated to 2.03.04 (up from 2.02.21)
- freetype: Updated to 2.13.3 (up from 2.13.2)
- harfbuzz: Updated to 10.1.0 (up from 9.0.0)
- hwloc: Updated to 2.11.2 (up from 2.11.1)
- libdivide: Updated to 5.1 (up from 5.0)
- Added
MathUtil
multi-release support forLong.divideUnsigned
/Long.remainderUnsigned
andMath.unsignedMultiplyHigh
.
- Added
- liburing: Updated to 2.8 (up from 2.6)
- LLVM/Clang: Updated to 19.1.0 (up from 18.1.7)
- lmdb: Updated to 0.9.33 (up from 0.9.32)
- lz4: Updated to 1.10.0 (up from 1.9.4)
- meshoptimizer: Updated to 0.22 (up from 0.21)
- NativeFileDialog: Update to 1.2.1 (up from 1.2.0)
- Nuklear: Updated to 4.12.3 (up from 4.12.1)
- OpenAL Soft: Updated to 1.24.1 (up from 1.23.1)
- Added
ALC_SOFT_system_events
extension. - Added
AL_EXT_debug
extension. - Added
AL_EXT_direct_context
extension. - macOS: 10.15+ is now required (up from 10.11).
- Added
- OpenXR: Updated to 1.1.43 (up from 1.1.38)
- Shaderc: Updated to 2024.4 (up from 2024.2)
- SPIRV-Cross: Updated to 0.64.0 (up from 0.61.0)
- stb
- Updated
stb_image_resize
to 2.12 (up from 2.09)
- Updated
- Vulkan: Updated to 1.4.303 (up from 1.3.289)
- Includes MoltenVK 1.2.11 (up from 1.2.10)
- Yoga: Updated to 3.2.0 (up from 3.1.0)
Improvements
- Core: Migrated jsr305 nullability annotations to JSpecify (https://jspecify.dev). (#1008)
- The
org.jspecify:jspecify
dependency remains optional.
- The
- Core: Added
Configuration.DISABLE_HASH_CHECKS
, a dynamic option that disables shared library hash checks. (#1007) - FreeBSD: LWJGL now requires FreeBSD 13.3 or later. (up from 13.2)
- OpenGL: Added
Configuration.OPENGL_CONTEXT_API
option to control the default OpenGL context management API. - OpenGL: The
Configuration.OPENGL(ES)_CONTEXT_API
options now support"OSMesa"
as a value.- Similar to
GLFW_OSMESA_CONTEXT_API
, LWJGL will try to load libOSMesa when enabled, without having to changeConfiguration.OPENGL_LIBRARY_NAME
.
- Similar to
- OpenGL: The default context management API is now EGL when Wayland is detected.
- msdfgen: Added support for glyph index based msdfgen-ext APIs. (#1002)
Fixes
- Core: Fixed support for
va_list
parameters.
Breaking Changes
- Core: Replaced thread-local storage of
errno/GetLastError()
with virtual output parameters. (#1003)- The
LibCErrno.getErrno()
andWinBase.getLastError()
methods have been removed. - System calls in
org.lwjgl.system.linux.*
,org.lwjgl.system.windows.*
andorg.lwjgl.opengl.WGL
now take an optional output parameter for the error code. - This approach is similar to
Linker.Option.CaptureCallState
in Project Panama's FFM API.
- The
- Core: Dropped support for non-LTS JDK versions earlier than the latest LTS version.
- Supported JDK versions: 8, 11, 17, 21+
- The
module-info
class and the first batch of multi-release overrides now live underMETA-INF/versions/11
instead ofMETA-INF/versions/9
.
LWJGL 3.3.4
Changes since 3.3.3:
Bindings
- Added msdfgen bindings.
- Assimp: Updated to 5.4.2 (up from 5.2.5)
- bgfx: Updated to API version 128 (up from 122)
- Windows: support for the Direct3D 9 backend has been dropped.
- CUDA: Updated to 12.5.1 (up from 12.1.0)
- FMOD: Updated to 2.02.21 (up from 2.02.16)
- glfw: Updated to 3.4 (up from 3.3.8)
- Added
GLFW_UNLIMITED_MOUSE_BUTTONS
,GLFW_SCALE_FRAMEBUFFER
,GLFW_WIN32_SHOWDEFAULT
. - Added
glfwGetWindowTitle
,glfwGetCocoaView
.
- Added
- glfw: Added experimental support for IME. (#946)
- Added
GLFW_SOFT_FULLSCREEN
,GLFW_IME
,GLFW_MANAGE_PREEDIT_CANDIDATE
andGLFW_X11_ONTHESPOT
. - Added
glfwGetPreeditCursorRectangle
,glfwSetPreeditCursorRectangle
,glfwResetPreeditText
,glfwGetPreeditCandidate
. - Added
glfwSetPreeditCallback
,glfwSetIMEStatusCallback
,glfwSetPreeditCandidateCallback
.
- Added
- harfbuzz: Updated to 9.0.0 (up from 8.2.0)
- hwloc: Updated to 2.11.1 (up from 2.9.3)
- KTX: Updated to 4.3.2 (up from 4.3.0-alpha3)
- libffi: Updated to 3.4.6 (up from 3.4.4)
- liburing: Updated to 2.6 (up from 2.4)
- lmdb: Updated to 0.9.32 (up from 0.9.31)
- LLVM/Clang: Updated to 18.1.7 (up from 16.0.0)
- meshoptimizer: Updated to 0.21 (up from 0.19)
- NativeFileDialog: Update to 1.2.0 (up from 1.1.0)
- Nuklear: Updated to 4.12.1 (up from 4.10.6)
- OpenVR: Updated to 2.5.1 (up from 1.26.7)
- Added support for Linux ARM64
- OpenXR: Updated to 1.1.38 (up from 1.0.29)
- Opus: Updated to 1.5.2 (up from 1.4.0)
- rpmalloc: Updated to 1.4.5 (up from 1.4.4)
- Shaderc: Updated to 2024.2 (up from 2023.6)
- SPIRV-Cross: Updated to 0.61.0 (up from 0.57.0)
- stb
- Updated
stb_image
to 2.30 (up from 2.28) - Updated
stb_image_resize
to 2.09 (up from 0.97)
- Updated
- tinyexr: Updated to 1.0.8 (up from 1.0.7)
- tinyfiledialogs: Updated to 3.18.1 (up from 3.13.3)
- vma: Updated to 3.1.0 (up from 3.0.1)
- Vulkan: Updated to 1.3.289 (up from 1.3.264)
- Includes MoltenVK 1.2.10 (up from 1.2.5)
- Yoga: Updated to 3.1.0 (up from 2.0.0)
- Zstd: Updated to 1.5.6 (up from 1.5.5)
Improvements
- FreeBSD: Added support for the FreeBSD operating system, x64 architecture. (#421)
- Maven classifier:
freebsd
- Maven classifier:
- Linux: Added support for the PowerPC 64 LE architecture. (#495)
- Maven classifier:
linux-ppc64le
- Maven classifier:
- Linux: Added support for the RISC-V 64 architecture. (#890)
- Maven classifier:
linux-riscv64
- Maven classifier:
- Linux: ARM/PowerPC/RISC-V shared libraries are now built with GCC 11 (up from GCC 7).
- Windows: Shared libraries are now built with Clang/LLVM (clang-cl toolset) when possible.
- Vulkan: Made
VkMemoryRequirements
mutable for thevmaAllocateMemory(Pages)
functions. (#937)
Fixes
- Core: Fixed callback wrapper memory leak with the CHM closure registry. (#927)
- Core: The
SharedLibraryLoader
will now always test ifSystem::load
works before choosing the extract path. (#987) - bgfx: Fixed
bgfx_is_frame_buffer_valid
to acceptBGFXAttachment.Buffer
. (#993) - JAWT: Fixed
JAWT_MACOSX_USE_CALAYER
value. - LLVM: Fixed
LLVMGetBufferStart
to returnByteBuffer
instead ofString
. (#934) - LLVM: Fixed
LookupIntrinsicID
to returnunsigned
instead ofvoid
. (#950) - Nuklear: Fixed auto-sizing of
nk_stroke_polyline
,nk_stroke_polygon
,nk_fill_polygon
buffers. (#978) - tinyfd: The
aDefaultPath
parameter oftinyfd_selectFolderDialog
is now nullable. (#922)
Breaking Changes
- Linux: ARM/PowerPC/RISC-V shared libraries now require GLIBC version 2.35 (up from 2.27)
- macOS: LWJGL now requires macOS 10.11/El Capitan or later (up from 10.9/Mavericks)
- meshoptimizer: Fixed autosizing issues. (#981)
- For consistency across the API, auto-sizing of some parameters was removed and the corresponding count parameters were made explicit.
- Auto-sizing is now always based on input parameters, the destination buffers are only checked for enough capacity.
- stb:
stb_image_resize2.h
replacedstb_image_resize.h
with a new API.
LWJGL 3.3.3
Changes since 3.3.2:
Bindings
- bgfx: Updated to API version 122 (up from 118)
- macOS: support for the OpenGL backend has been dropped.
- EGL: Added latest extensions.
EGL_EXT_gl_colorspace_bt2020_hlg
- FMOD: Updated to 2.02.16 (up from 2.02.13)
- freetype: Updated to 2.13.2 (up from 2.13.0)
- harfbuzz: Updated to 8.2.0 (up from 7.1.0)
- hwloc: Updated to 2.9.3 (up from 2.9.0)
- KTX: Updated to 4.3.0-alpha3 (up from 4.1.0-rc3)
- liburing: Updated to 2.4 (up from 2.4-dev)
- lmdb: Updated to 0.9.31 (up from 0.9.30)
- meshoptimizer: Updated to 0.19 (up from 0.18)
- NativeFileDialog: Update to 1.1.0 (up from 1.0.2)
- Added
Configuration.NFD_LINUX_PORTAL
which enables the XDG Desktop Portal backend on Linux. (#893)
- Added
- Nuklear: Updated to 4.10.6 (up from 4.10.5)
- OpenAL Soft: Updated to 1.23.1 (up from 1.23.0)
- Added
AL_SOFT_buffer_length_query
extension. - Added
AL_SOFT_source_start_delay
extension. - Added
AL_SOFT_UHJ_ex
extension.
- Added
- OpenCL: Added latest extensions.
cl_ext_image_from_buffer
cl_ext_image_requirements_info
cl_intel_bfloat16_conversions
cl_intel_split_work_group_barrier
cl_intel_subgroup_matrix_multiply_accumulate
cl_intel_subgroup_split_matrix_multiply_accumulate
- OpenGL: Added latest extensions.
GL_NV_uniform_buffer_std430_layout
- OpenVR: Updated to 1.26.7 (up from 1.23.7)
- OpenXR: Updated to 1.0.29 (up from 1.0.27)
- Opus: Updated to 1.4.0 (up from 1.3.1)
- Shaderc: Updated to 2023.6 (up from 2023.3)
- SPIRV-Cross: Updated to 0.57.0 (up from 0.51.0)
- tinyexr: Updated to 1.0.7 (up from 1.0.2)
- tinyfiledialogs: Updated to 3.13.3 (up from 3.9.0)
- Vulkan: Updated to 1.3.264 (up from 1.3.246)
- Includes MoltenVK 1.2.5 (up from 1.2.3)
- xxhash: Updated to 0.8.2 (up from 0.8.1)
- Yoga: Updated to 2.0.0 (up from 1.19.0)
- Zstd: Updated to 1.5.5 (up from 1.5.4)
Improvements
- Core: LWJGL is now compatible with GraalVM Native Image. (#875)
Fixes
- Core: Java
memset
/memcpy
implementations no longer touch memory outside the target range. (#892) - CUDA: Fixed library name on Linux. (#884)
- Nuklear: Fixed the result auto-sizing of
nk_font_atlas_bake
. (#903) - OpenGL: Added support for libglvnd. (#880)
- LWJGL will now try to load
libGLX.so.0
beforelibGL.so.1
on Linux, matching GLFW. - Use
Configuration.OPENGL_LIBRARY_NAME
andGLFWNativeGLX::setPath
to override this behavior.
- LWJGL will now try to load
LWJGL 3.3.2
Changes since 3.3.1:
Bindings
- Added FMOD bindings. (#295)
- Native binaries are not included, because the license does not permit redistribution. They must be downloaded and deployed separately from LWJGL.
- Added FreeType bindings. (#611)
- The default build includes HarfBuzz and exports its full API.
- Added HarfBuzz bindings. (#611)
- The default build works standalone.
- FreeType interop can be enabled by making HarfBuzz use FreeType's shared library (see
Configuration.HARFBUZZ_LIBRARY_NAME
).
- Added hwloc bindings. (#98)
- Added KTX (Khronos Texture) bindings. (#660)
- Windows: Added bindings to
dpapi.h
. (#851) - Assimp: Updated to 5.2.5 (up from 5.2.2)
- bgfx: Updated to API version 118 (up from 115)
- CUDA: Updated to 12.1.0 (up from 11.5.0)
- glfw: Updated to latest 3.3.8 (up from 3.3.6)
- Added
GLFW_WAYLAND_LIBDECOR
,GLFW_WAYLAND_PREFER_LIBDECOR
andGLFW_WAYLAND_DISABLE_LIBDECOR
. - Added
GLFW_CURSOR_CAPTURED
. - Added
GLFW_WAYLAND_APP_ID
. - Added
GLFW_POSITION_X
,GLFW_POSITION_Y
andGLFW_ANY_POSITION
.
- Added
- jemalloc: Updated to 5.3.0 (up from 5.2.1)
- libffi: Updated to 3.4.4 (up from 3.4.2)
- liburing: Updated to 2.4-dev (up from 2.1)
- lmdb: Updated to 0.9.30 (up from 0.9.28)
- lz4: Updated to 1.9.4 (up from 1.9.3)
- LLVM/Clang: Updated to 16.0.0 (up from 13.0.1)
- meshoptimizer: Updated to 0.18 (up from 0.17)
- NativeFileDialog: Switched to Native File Dialog Extended (#823)
- This is a fork of the original library with new features and breaking API changes.
- Nuklear: Updated to 4.10.5 (up from 4.9.6)
- Added the font baking API.
- OpenAL Soft: Updated to 1.23.0 (up from 1.21.1)
- Added
ALC_SOFT_loopback_bformat
extension. - Added
ALC_SOFT_output_mode
extension. - Added
ALC_SOFT_reopen_device
extension. - Added
AL_SOFT_callback_buffer
extension. - Added
AL_SOFT_effect_target
extension. - Added
AL_SOFT_events
extension. (#854) - Added
AL_SOFT_UHJ
extension. - Added
AL_SOFTX_hold_on_disconnect
extension. (#795)
- Added
- OpenGL(ES): Added latest extensions.
GL_EXT_framebuffer_blit_layers
GL_EXT_fragment_shading_rate
GL_EXT_fragment_shading_rate_attachment
GL_EXT_fragment_shading_rate_primitive
GL_EXT_separate_depth_stencil
GL_EXT_shader_samples_identical
- OpenVR: Updated to 1.23.7 (up from 1.16.8)
- OpenXR: Updated to 1.0.27 (up from 1.0.22)
- Remotery: Updated to 1.2.1 (up from 1.0.0)
- rpmalloc: Updated to 1.4.4 (up from 1.4.3)
- Shaderc: Updated to 2023.3 (up from 2022.1)
- SPIRV-Cross: Updated to 0.51.0 (up from 0.48.0)
- stb
- Updated
stb_image
to 2.28 (up from 2.27)
- Updated
- tinyexr: Updated to 1.0.2 (up from 1.0.1)
- tinyfiledialogs: Updated to 3.9.0 (up from 3.8.8)
- vma: Updated to 3.0.1 (up from 3.0.0-development)
- Vulkan: Updated to 1.3.246 (up from 1.3.206)
- Includes MoltenVK 1.2.3 (up from 1.1.7)
- Zstd: Updated to 1.5.4 (up from 1.5.2)
Improvements
- Linux: x64 shared libraries are now built with GCC 11.2 (up from GCC 7.5)
- The minimum GLIBC version is now 2.17. (down from 2.27) (#842)
- Windows: Shared libraries are now built with Visual Studio 2022 (up from 2019)
- Core: Added support for JDK 19 (#799)
- Core: Added
MemoryUtil::memByteBuffer(Struct)
. It creates aByteBuffer
view of a struct value. - Core: More
SharedLibraryLoader
improvements. (#790)- The default
Configuration.SHARED_LIBRARY_EXTRACT_DIRECTORY
is nowlwjgl_<trimmed_user_name>
. - The default
Configuration.SHARED_LIBRARY_EXTRACT_PATH
now includes the CPU architecture. (<temp_root>/<extract_dir>/<version>/<arch>/
) - Added
Configuration.SHARED_LIBRARY_EXTRACT_FORCE
.
- The default
- Core: The string returned by
Version::getVersion()
now follows the Java version format (M.m.r+B
orM.m.r-snapshot+B
). - Core: Added
Configuration.DEBUG_MEMORY_ALLOCATOR_FAST
, a dynamic option that dramatically reduces the performance overhead of memory leak detection. - Core: Reduced the performance overhead of
Configuration.DEBUG_STACK
. - docs: The LWJGL javadoc is now generated with JDK 19 (up from JDK 10) for improved search functionality.
- The
.sha1
and.git
files, used for validating LWJGL artifacts, are now stored under theMETA-INF
folder. - glfw: It will now always be patched with the latest SDL_GameControllerDB version.
- Reminder:
glfwUpdateGamepadMappings
can be used to update the mappings at runtime.
- Reminder:
- Nuklear:
NK_BUTTON_TRIGGER_ON_RELEASE
is now also defined on Linux & macOS, not only Windows, for consistency. - OpenXR: Added extension class javadoc.
- Currently, only the overview section is included.
- Also added a link that opens the OpenXR specification at the corresponding section for the extension.
- Remotery: Made it easier to get started with Remotery profiling: (#784)
- Users can now identify the commit used to build the Remotery bindings in the
Remotery
class javadoc. - A script that quickly clones the Remotery repository at that commit is also included.
The viewer application atvis/index.html
is guaranteed to be compatible with the LWJGL bindings. - Ported two simple Remotery samples (
modules/samples/src/test/java/org/lwjgl/demo/util/remotery/
).
- Users can now identify the commit used to build the Remotery bindings in the
Fixes
- Core: Fixed Java/native library incompatibility detection. (#737)
- Core: Fixed
dlerror
decoding to use UTF-8. (#738) - Core: Fixed
Version::getVersion()
when LWJGL is in the module path. (#770) - Core: Fixed handling of unsigned 8/16-bit integer parameters in JNI code. (#858)
- Core: Many debug messages can no longer tear under concurrency. (#825)
- Build: Fixed offline mode with multiple local architectures. (#740)
- NanoSVG: Fixed auto-sizing of
NSVGPath::pts
buffer. - OpenCL: Fixed initialization on macOS 13. (#861)
- Opus: Fixed
pcm
parameter type ofopus_decode_float
function. (#785) - Remotery: Fixed
rmtSettings::free
callback signature. - stb: Fixed
stb_image_resize
flag values. (#857) - Vulkan: Fixed definition of the
VK_API_VERSION_PATCH
macro. (#743) - Vulkan: Fixed
EXT_debug_utils
function dispatch. (#755)
Breaking Changes
- Core: Introduced additional mangling of
org.lwjgl.system.JNI
method names for 8/16-bit integer parameters. (#858) (S) - NanoVG: The
freeData
parameters ofnvgCreateFontMem*
functions are now mapped to Javaboolean
. (S) - NativeFileDialog: Now uses the btzy/nativefiledialog-extended API. (S)
- Nuklear: Renamed
NkConvertConfig::null_texture
totex_null
to match the change in the native API. (S)
(B): binary incompatible change
(S): source incompatible change
LWJGL 3.3.1
Changes since 3.3.0:
Bindings
- Added liburing bindings.
- Can be found in the LWJGL core module (package
org.lwjgl.system.linux.liburing
).
- Can be found in the LWJGL core module (package
- Added OpenXR bindings. (#569)
- Assimp: Updated to 5.2.2 (up from 5.1.0)
- glfw: Updated to latest 3.3.6 (up from 3.3.5)
- Added
glfwGetGLXFBConfig
. - Added
glfwGetEGLConfig
.
- Added
- meshoptimizer: Updated to 0.17 (up from 0.16)
- Nuklear: Updated to 4.9.6 (up from 4.09.0)
- Shaderc: Updated to 2022.1 (up from 2021.3)
- vma: Updated to latest 3.3.0-development
- Added virtual allocator API.
- Added
VMA_MEMORY_USAGE_AUTO
.
- Vulkan: Updated to 1.3.206 (up from 1.2.198)
- Includes MoltenVK 1.1.7 (up from 1.1.5)
- xxhash: Updated to 0.8.1 (up from 0.8.0)
- Zstd: Updated to 1.5.2 (up from 1.5.0)
- Also, the LWJGL memory allocator is now used for internal allocations.
Improvements
- GLFW: An alternative macOS build now supports Cocoa calls on any thread.
- A different window toolkit (AWT, JavaFX, etc.) may now run at the same time as GLFW. It must be initialized before
glfwInit
is called. - Enabled with
Configuration.GLFW_LIBRARY_NAME.set("glfw_async");
.
- A different window toolkit (AWT, JavaFX, etc.) may now run at the same time as GLFW. It must be initialized before
Fixes
- Core: Fixed extra
NUL
in string returned fromSharedLibrary::getPath()
on Linux & macOS. (#713) - Core: Fixed integer overflow when casting pointers on 32-bit architectures. (#720)
- Core: Fixed rare
NPE
withConfiguration.DEBUG_STACK
enabled. (#721) - OpenCL: Fixed values of the
KERNEL_ARG_ADDRESS_*
constants. (#733) - OpenCL: Fixed value of
KERNEL_ARG_TYPE_QUALIFIER
constant. (#735) - vma: Fixed nullability of
VmaVirtualAllocationCreateInfo::pUserData
member. - Vulkan: All
noautovalidity
parameters/members are now regarded as nullable. (#702)
LWJGL 3.3.0
Changes since 3.2.3
:
Bindings
- Added libffi bindings.
- Bundled with the LWJGL core, under the
org.lwjgl.system
package.
- Bundled with the LWJGL core, under the
- Added meshoptimizer bindings.
- Added SPIRV-Cross bindings.
- Assimp: Updated to 5.1.0 (up from 5.0.0.rc2)
- bgfx: Updated to API version 115 (up from 100)
- CUDA: Updated to 11.5.0 (up from 10.1.0)
- Now includes full API documentation.
- glfw: Updated to latest 3.3.4 (up from 3.3.1):
- Added
GLFW_WIN32_KEYBOARD_MENU
. - Added
GLFW_CURSOR_UNAVAILABLE
. - Added
GLFW_FEATURE_UNAVAILABLE
. - Added
GLFW_FEATURE_UNIMPLEMENTED
. - Added
GLFW_MOUSE_PASSTHROUGH
. - Added
GLFW_ANGLE_PLATFORM_TYPE
. - Added
GLFW_CONTEXT_DEBUG
. - Added
GLFW_X11_XCB_VULKAN_SURFACE
. - Added
GLFW_PLATFORM
,GLFW_PLATFORM_UNAVAILABLE
. - Added
GLFW_ANY_PLATFORM
,GLFW_PLATFORM_WIN32
,GLFW_PLATFORM_COCOA
,GLFW_PLATFORM_WAYLAND
,GLFW_PLATFORM_X11
,GLFW_PLATFORM_NULL
. - Added
glfwInitAllocator
. - Added
glfwGetPlatform
. - Added
glfwPlatformSupported
. - Added
glfwInitVulkanLoader
. - Added standard cursors for diagonal and omnidirectional resize/move and operation-not-allowed.
- Added OSMesa native access functions.
- Added
- LibOVR: Updated to 1.64.0 (up from 1.39.0)
- libdivide: Updated to 5.0 (up from 2.0)
- Added support for 16-bit divisions.
- LLVM/Clang: Updated to 13.0.1 (up from 8.0)
- lmdb: Updated to 0.9.28 (up from 0.9.24)
- lz4: Updated to 1.9.3 (up from 1.9.2)
- NativeFileDialog: Updated to 1.2.0 (up from 1.1.6)
- Nuklear: Updated to 4.09.0 (up from 4.01.0)
- OpenAL Soft: Updated to 1.21.1 (up from 1.19.1)
- Added
AL_SOFT_bformat_ex
extension. - Added
AL_SOFT_buffer_samples
extension. - Added
AL_SOFT_buffer_sub_data
extension. - Added
AL_SOFT_direct_channels_remix
extension.
- Added
- OpenCL: Added support for OpenCL 3.0.
- OpenVR: Updated to 1.16.8 (up from 1.6.10)
- Opus: Added Opusfile & Libopusenc bindings (#634)
- par: Added par_octasphere bindings.
- rpmalloc: Updated to 1.4.3 (up from 1.4.0)
- Shaderc: Updated to 2021.3 (up from 2019.1)
- stb
- Updated
stb_dxt
to 1.12 (up from 1.08) - Updated
stb_easy_font
to 1.1 (up from 1.0) - Updated
stb_image
to 2.27 (up from 2.23) - Updated
stb_image_resize
to 0.97 (up from 0.96) - Updated
stb_image_write
to 1.16 (up from 1.13) - Updated
stb_perlin
to 0.5 (up from 0.4) - Updated
stb_rect_pack
to 1.01 (up from 1.00) - Updated
stb_truetype
to 1.26 (up from 1.22) - Updated
stb_vorbis
to 1.22 (up from 1.17)
- Updated
- tinyexr: Updated to 1.0.1 (up from 1.0.0 pre-release)
- tinyfiledialogs: Updated to 3.8.8 (up from 3.3.9)
- vma: Updated to 3.3.0-development (up from 2.2.0)
- Vulkan: Updated to 1.2.198 (up from 1.1.121)
- Includes Vulkan Video
- Includes MoltenVK 1.1.5 (up from 1.0.36)
- xxhash: Updated to 0.8.0 (up from 0.7.1)
- Yoga: Updated to 1.19.0 (up from 1.14.0)
- Zstd: Updated to 1.5.0 (up from 1.4.3)
Improvements
- macOS/Windows: Added support for ARM builds. (#601)
- Maven classifier for macOS:
natives-macos-arm64
- Maven classifier for Windows:
natives-windows-arm64
- Maven classifier for macOS:
- Linux: Shared libraries are now built with GCC 7.5 (up from GCC 4.8)
- Generator: Struct member javadoc moved to the corresponding getter method.
- There are links to the getter method in the class javadoc (
Layout
section) and in the javadoc of the corresponding setter and.Buffer
accessors. - Makes it easier to navigate to the documentation of a particular member.
- There are links to the getter method in the class javadoc (
- Generator: simplified stack allocation methods in
Struct
classes.- 4 new methods added, named
malloc
andcalloc
, without a "Stack" suffix. - 8 old methods with the "Stack" suffix are now deprecated, to be removed in LWJGL
3.4.0
.
- 4 new methods added, named
- Core: Replaced internal usages of dyncall with libffi.
- This resolves a range of long-standing issues, mainly with upcalls (callbacks).
- Single native callback handler used for all upcalls, regardless of signature. Arguments and return values handled Java-side (per callback type).
- Improved upcall performance (before: JNI downcall per argument, after: simple memory accesses)
- Support for structs returned by-value. (#283)
- Core: Implemented overflow protection in text encoding methods.
- Core: When LWJGL fails to resolve native libraries, it will now attempt to report native JAR files in the classpath with mismatching platform/architecture. (#587)
- Core: The
SharedLibraryLoader
now prefers to extract natives to the working directory, over the user's home directory. - Core: Added version information to module descriptors. (#685)
- The LWJGL version/build used will now be included in stacktraces of modular applications.
- docs: The javadoc of callback classes/interfaces now includes a link to the corresponding
invoke
method, for better IDE navigation. - macOS: Shared libraries are now built with Xcode 11.3 (up from 10.0)
- GLFW: Added overrides for internally loaded shared libraries.
- Useful when there's a mismatch with the library loaded by LWJGL.
GLFWNativeEGL.setEGLPath
&GLFWNativeEGL.setGLESPath
GLFWNativeGLX.setPath
GLFWNativeNSGL.setFramework
GLFWNativeWGL.setPath
GLFWVulkan.setPath
- GLFW: There is now a single Linux native that supports both X11 and Wayland.
- Use
glfwPlatformSupported(GLFW_PLATFORM_WAYLAND)
to test if Wayland is available. - Use
glfwInitHint(GLFW_PLATFORM, GLFW_PLATFORM_WAYLAND)
to enable the Wayland backend.
- Use
- GL: Added support for OSMesa contexts. (#595)
- GL/GLES/AL: Added
createCapabilities
overloads that accept anIntFunction<PointerBuffer>
. Enables explicit management of the off-heap memory used by the capabilities instances. - GL/GLES/AL: When capabilities creation fails, the current thread/process capabilities state is no longer reset to null.
- GL/GLES/AL/CL/EGL: Added
Configuration
options to forcibly disable specific extensions for debugging purposes. (#683) - OpenAL: Introduced
ALC::setCapabilities
. Rarely useful when opening multiple devices with different ALC capabilities. (#582) - Vulkan: Struct classes now include an additional
sType
setter that writes the appropriate struct type value. (#537) - Vulkan: Struct classes now include type-safe
pNext
setters, one for each struct type that is known to extend them.- These setters prepend the struct to the
pNext
chain, enabling cleaner code when chaining multiple structs. - Order does not matter, but do note that structs will be chained in the reverse order of the
pNext
calls. - Also be careful when the base struct is
malloc
ed, make sure to call.pNext(NULL)
first, otherwise the last struct in the chain will point to invalid memory.
- These setters prepend the struct to the
Fixes
- Generator: Native libraries are now initialized before constants. (#630)
- Core: Fixed unsafe field reads in
MemoryUtil
setup code. (#632) - Core: The
SharedLibraryLoader
now prepends a.
toSHARED_LIBRARY_EXTRACT_DIRECTORY
when the target directory is not temporary. - Core: The
SharedLibraryLoader
will now load libraries in the correctClassLoader
when testing for JDK-8195129. (#648) - Core: Changed the encoding of
dlopen
paths to UTF-8. (#691) - CUDA: Implemented missing
cuIpcOpenEventHandle
/cuIpcOpenMemHandle
using libFFI. - EGL: Fixed nullability of
eglInitialize
arguments. - GLFW: Fixed main thread check. Setting
GLFW_CHECK_THREAD0
tofalse
is now required for offscreen interop. (#538) - OpenCL: Added missing
errcode_ret
parameter toclLinkProgram
. (#560) - OpenGL: Restored
GL_TEXTURE
in the core profile. (#573) - OpenGL: Added buffer object offset overloads to
GetQueryObject*
functions. - stb: Removed redundant
stb_image_resize
overloads. (#605) - Vulkan: Fixed GLFW configuration for MoltenVK. (#502)
- Vulkan: Fixed
vkGetInstanceProcAddr
to work withnull
instance arguments. - Vulkan: Fixed unsigned arithmetic in
VK_VERSION_MAJOR
andVK_VERSION_MINOR
macros.
Breaking Changes
(B): binary incompatible change
(S): source incompatible change
- Linux: Shared libraries are now built on Ubuntu 18.04 (up from Ubuntu 16.04) (B)
- GLIBC versions older than 2.14 are no longer supported. Some, but not all, LWJGL natives may require up to GLIBC 2.27.
- Applications deployed on older systems must now build & bundle custom LWJGL natives. Contact LWJGL developers if you need assistance.
- Removed deprecated methods that were marked for removal in LWJGL 3.3. (S)
- Core: Users of the dyncall bindings must migrate to libffi. (S)
- CUDA: Merged versioned classes into a single class that contains the entire functionality. (S)
- The bindings still require CUDA 3.2 as the minimum version. There are runtime checks for functions introduced after 3.2.
- Shaderc: The shaderc_spvc library has been removed since Shaderc 2020.4. Users may migrate to the new SPIRV-Cross bindings. (S)
- Vulkan: All header boilerplate constants have been moved to
VK10
. (S)
LWJGL 3.2.3
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
- 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
LWJGL 3.2.2
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
LWJGL 3.2.1
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.
LWJGL 3.2.0
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