Skip to content

Releases: LWJGL/lwjgl3

LWJGL 3.3.5

15 Dec 22:23
3.3.5
ce7f7c1
Compare
Choose a tag to compare

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 for Long.divideUnsigned/Long.remainderUnsigned and Math.unsignedMultiplyHigh.
  • 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).
  • 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)
  • 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.
  • 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 change Configuration.OPENGL_LIBRARY_NAME.
  • 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() and WinBase.getLastError() methods have been removed.
    • System calls in org.lwjgl.system.linux.*, org.lwjgl.system.windows.* and org.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.
  • 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 under META-INF/versions/11 instead of META-INF/versions/9.

LWJGL 3.3.4

17 Jul 22:54
3.3.4
813400f
Compare
Choose a tag to compare

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.
  • glfw: Added experimental support for IME. (#946)
    • Added GLFW_SOFT_FULLSCREEN, GLFW_IME, GLFW_MANAGE_PREEDIT_CANDIDATE and GLFW_X11_ONTHESPOT.
    • Added glfwGetPreeditCursorRectangle, glfwSetPreeditCursorRectangle, glfwResetPreeditText, glfwGetPreeditCandidate.
    • Added glfwSetPreeditCallback, glfwSetIMEStatusCallback, glfwSetPreeditCandidateCallback.
  • 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)
  • 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
  • Linux: Added support for the PowerPC 64 LE architecture. (#495)
    • Maven classifier: linux-ppc64le
  • Linux: Added support for the RISC-V 64 architecture. (#890)
    • Maven classifier: linux-riscv64
  • 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 the vmaAllocateMemory(Pages) functions. (#937)

Fixes

  • Core: Fixed callback wrapper memory leak with the CHM closure registry. (#927)
  • Core: The SharedLibraryLoader will now always test if System::load works before choosing the extract path. (#987)
  • bgfx: Fixed bgfx_is_frame_buffer_valid to accept BGFXAttachment.Buffer. (#993)
  • JAWT: Fixed JAWT_MACOSX_USE_CALAYER value.
  • LLVM: Fixed LLVMGetBufferStart to return ByteBuffer instead of String. (#934)
  • LLVM: Fixed LookupIntrinsicID to return unsigned instead of void. (#950)
  • Nuklear: Fixed auto-sizing of nk_stroke_polyline, nk_stroke_polygon, nk_fill_polygon buffers. (#978)
  • tinyfd: The aDefaultPath parameter of tinyfd_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 replaced stb_image_resize.h with a new API.

LWJGL 3.3.3

16 Sep 15:57
3.3.3
f0ec143
Compare
Choose a tag to compare

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)
  • 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.
  • 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 before libGL.so.1 on Linux, matching GLFW.
    • Use Configuration.OPENGL_LIBRARY_NAME and GLFWNativeGLX::setPath to override this behavior.

LWJGL 3.3.2

01 Apr 16:24
3.3.2
4f9767c
Compare
Choose a tag to compare

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)
    • KHR_draco_mesh_compression is now supported via the bundled Draco library. (#773)
  • 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 and GLFW_WAYLAND_DISABLE_LIBDECOR.
    • Added GLFW_CURSOR_CAPTURED.
    • Added GLFW_WAYLAND_APP_ID.
    • Added GLFW_POSITION_X, GLFW_POSITION_Y and GLFW_ANY_POSITION.
  • 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)
  • 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)
  • 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 a ByteBuffer view of a struct value.
  • Core: More SharedLibraryLoader improvements. (#790)
    • The default Configuration.SHARED_LIBRARY_EXTRACT_DIRECTORY is now lwjgl_<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.
  • Core: The string returned by Version::getVersion() now follows the Java version format (M.m.r+B or M.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 the META-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.
  • 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 at vis/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/).

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 of opus_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 of nvgCreateFontMem* functions are now mapped to Java boolean. (S)
  • NativeFileDialog: Now uses the btzy/nativefiledialog-extended API. (S)
  • Nuklear: Renamed NkConvertConfig::null_texture to tex_null to match the change in the native API. (S)
(B): binary incompatible change
(S): source incompatible change

LWJGL 3.3.1

21 Feb 18:52
3.3.1
ad60275
Compare
Choose a tag to compare

Changes since 3.3.0:

Bindings

  • Added liburing bindings.
    • Can be found in the LWJGL core module (package org.lwjgl.system.linux.liburing).
  • 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.
  • 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");.

Fixes

  • Core: Fixed extra NUL in string returned from SharedLibrary::getPath() on Linux & macOS. (#713)
  • Core: Fixed integer overflow when casting pointers on 32-bit architectures. (#720)
  • Core: Fixed rare NPE with Configuration.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

15 Nov 18:01
3.3.0
6da65e3
Compare
Choose a tag to compare

Changes since 3.2.3:

Bindings

  • Added libffi bindings.
    • Bundled with the LWJGL core, under the org.lwjgl.system package.
  • 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.
  • 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.
  • 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)
  • 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
  • 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.
  • Generator: simplified stack allocation methods in Struct classes.
    • 4 new methods added, named malloc and calloc, without a "Stack" suffix.
    • 8 old methods with the "Stack" suffix are now deprecated, to be removed in LWJGL 3.4.0.
  • 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.
  • GL: Added support for OSMesa contexts. (#595)
  • GL/GLES/AL: Added createCapabilities overloads that accept an IntFunction<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 malloced, make sure to call .pNext(NULL) first, otherwise the last struct in the chain will point to invalid memory.

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 . to SHARED_LIBRARY_EXTRACT_DIRECTORY when the target directory is not temporary.
  • Core: The SharedLibraryLoader will now load libraries in the correct ClassLoader 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 to false is now required for offscreen interop. (#538)
  • OpenCL: Added missing errcode_ret parameter to clLinkProgram. (#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 with null instance arguments.
  • Vulkan: Fixed unsigned arithmetic in VK_VERSION_MAJOR and VK_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

01 Sep 15:37
3.2.3
e41032b
Compare
Choose a tag to compare

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.
  • 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)
  • 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
  • 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.
  • 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)
  • Refactored the layout of native JAR files.
    • Shared libraries have been moved from the root to a <platform>/<arch>/<module>/ subfolder.
      • <platform>: one of linux, macos, windows.
      • <arch>: one of x64, x86, arm64, arm32.
      • <module>: the corresponding Java module name as a package hierarchy.
      • Example: glfw.so in lwjgl-glfw-natives-linux.jar is under the linux/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.
  • Core: Added enum Platform.Architecture and Platform.getArchitecture() API.
  • Core: Added relative & absolute apply(Consumer<T>) methods to StructBuffer<T>.
  • Core: Added Consumer<T> setters to structs with nested arrays of structs.
  • Core: Added memByteBuffer overloads that return ByteBuffer views of other buffer types.
  • Core: Added CLongBuffer, a class similar to PointerBuffer but for C long 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).
  • Core: Fixed buffer attachment offset detection on JDK 12+. (#491)
  • Core: Fixed ByteBuffer attachments in memSlice & 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 in 3.2.2.
  • 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 and glGetnUniformuiv.

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 to memFree(CustomBuffer). (B)
  • LZ4: The autoFlush and favorDecSpeed members of LZ4F_preferences_t are now mapped to Java boolean. (S)
  • Vulkan: The descriptorCount member of VkWriteDescriptorSet must now be set explicitly. (S)
    • The semantics of descriptorCount may change via extensions, which invalidates auto-sizing.

LWJGL 3.2.2

05 May 23:06
3.2.2
330c019
Compare
Choose a tag to compare

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.
  • 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)
  • 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 returns ByteBuffer instead of String, so that LLVMDisposeErrorMessage can be used.
  • nuklear: The nk_text_edit, nk_text_undo_state and nk_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 to NV_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 of glfwUpdateGamepadMappings. (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.

LWJGL 3.2.1

08 Dec 19:48
3.2.1
11b7f41
Compare
Choose a tag to compare

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)
  • 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.
  • 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.
  • perf(core): Added memDuplicate and refactored memSlice with implementations that use Unsafe to construct buffer instances, similar to mem-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 under nightly/windows/x64/bgfx-tools/.
  • vma: VmaVulkanFunctions.set(VkInstance, VkDevice) will now use Vulkan 1.1 functions instead of KHR_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 of VRCompositor_WaitGetPoses is now nullable. (#418)
  • OpenVR: Fixed returned type of VRRenderModels_GetComponentStateForDevicePath.
  • OpenVR: Renamed VRInput_UncompressSkeletalActionData to VRInput_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 in VmaVulkanFunctions 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 returns VmaVulkanFunctions. (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

30 Jul 16:47
3.2.0
901aca7
Compare
Choose a tag to compare

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.
  • 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)
  • 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 the GL21 class, GL21 extends GL20 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.
  • 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.
  • 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 an OOME. This is consistent with ByteBuffer.allocateDirect and avoids the undefined behavior of native allocators.
    • The returned buffer has a capacity of zero, regardless of the actual allocation size.
  • Core MemoryUtil.memRealloc is not @Nullable anymore, will either succeed or throw an OOME, like memAlloc/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.

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 a NPE.
  • 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's data parameter.

Breaking Changes

  • Core: MemoryUtil.MemoryAllocationReport now also returns the address of the memory allocation.
  • NanoVG: Parameters windowWidth/windowHeight of the nvgBeginFrame function changed to float.

Known Issues

  • vma: The native library is not initialized automatically.
    • Workaround: call Class.forName("org.lwjgl.util.vma.LibVma") before using the VMA bindings.
  • vma: KHR_get_memory_requirements2 function addresses in VmaVulkanFunctions are not optional.
    • Workaround: Enable the KHR_get_memory_requirements2 extension, or set the equivalent function addresses from Vulkan 1.1.