Skip to content

Releases: LWJGL/lwjgl3

LWJGL 3.1.5

23 Jan 14:57
3.1.5
eb007cc
Compare
Choose a tag to compare

Changes since 3.1.4:

Bindings

  • Added AMD Tootle bindings.
    • Only the software rasterizer is supported.

Fixes

  • Fixed various javadoc links.
  • par: Parsing of floating point values in L-systems is now locale-insensitive.
  • stb: Fixed buffer checks to account for row stride, when specified.
  • Generator: Fixed auto-size transformations by non-constant expressions.

Breaking Changes

  • Removed array overloads from the LZ4 & ODBC bindings.
    • They were added by mistake in LWJGL 3.1.4.

LWJGL 3.1.4

19 Nov 23:57
3.1.4
72fab73
Compare
Choose a tag to compare

Changes since 3.1.3:

Bindings

  • Added LZ4 bindings.
  • Added NanoSVG to the existing NanoVG bindings.
  • Added ODBC bindings.
  • Added Remotery bindings.
  • Added Zstandard bindings.
  • bgfx: Updated to API version 55 (up from 48)
  • glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
    • Support for transparent window framebuffers (GLFW_TRANSPARENT_FRAMEBUFFER window hint)
    • Support for whole window opacity (glfwGetWindowOpacity and glfwSetWindowOpacity)
    • Support for content scale queries (glfwGetMonitorContentScale and glfwGetWindowContentScale)
    • Linux: Added support for the experimental Wayland backend. Enable with -Dorg.lwjgl.glfw.libname=glfw_wayland.
  • LibOVR: Updated to 1.20.0 (up from 1.18.0)
  • Nuklear: Updated to 2.00.4 (up from 2.00.2)
  • tinyfiledialogs: Updated to 3.2.4 (up from 3.0.5)
  • Vulkan: Updated to 1.0.65 (up from 1.0.61)
  • Yoga: Updated to 1.7.0 (up from 1.6.0)

Improvements

  • Replaced Automatic-Module-Name with explicit JPMS modules.
    • Enables applications using LWJGL to be bundled in custom run-time images with the jlink tool.
  • lmdb: Significantly improved incremental growth performance on Windows.
    • Granularity of mapped memory commits increased from 4KB (page size) to 2MB.
    • This is an unofficial patch of ITS#8324.

Fixes

  • EGL: Fixed nullability of eglMakeCurrent arguments.
  • OpenVR: Fixed mapping of Vulkan forward declarations.
  • Fixed native library resource discovery when running LWJGL as JPMS modules.
  • Fixed invalid size calculation in <StructType>.malloc(capacity) methods.
  • Fixed MemoryStack debugging when a try-with-resources block does not inline the call to AutoCloseable::close.
    • Supports Java 9 try-with-resources, which generates a synthetic $closeResource method.
    • Supports Kotlin's T.use, which uses the kotlin.AutoCloseable::closeFinally extension function.
  • Fixed build number lookup from the jar manifest.

LWJGL 3.1.3

22 Sep 00:53
Compare
Choose a tag to compare

Changes since 3.1.2:

Bindings

  • Added rpmalloc bindings.
    • Use -Dorg.lwjgl.system.allocator=rpmalloc to make it the default memory allocator.
  • Added new extensions to OpenCL, EGL, OpenGL and OpenGL ES.
  • Assimp: Updated to 4.0.1 (up from 3.3.1)
  • bgfx: Updated to API version 48 (up from 41)
  • EGL: Added support for latest extensions
  • glfw: Updated to pre-release 3.3.0 version (up from 3.3.0 pre-release):
    • Improvements to error code query (glfwGetError)
    • More library initialization hints (glfwInitHintString)
    • SDL_GameControllerDB support
      • Import gamepad mappings (glfwUpdateGamepadMappings)
      • Query to determine whether a joystick has a gamepad mapping (glfwJoystickIsGamepad)
      • Query the name of a controller provided by its gamepad mapping (glfwGetGamepadName)
      • Retrieve gamepad input state (glfwGetGamepadState, GLFW_GAMEPAD_*, GLFWgamepadstate)
      • Query the SDL compatible GUID of a joystick (glfwGetJoystickGUID)
    • Linux: Moved to evdev for joystick input
    • EGL: Fixed support for EGL_KHR_create_context_no_error
    • GLX: Added support for GLX_ARB_create_context_no_error
    • WGL: Added support for WGL_ARB_create_context_no_error and WGL_EXT_colorspace
  • jemalloc: Updated to 5.0.1 (up from 4.5.0)
  • LibOVR: Updated to 1.18.0 (up from 1.14.0)
  • lmdb: Updated to 0.9.21 (up from withdrawn 0.9.20)
  • NanoVG: Updated to latest version (performance updates and new nvgShapeAntiAlias function).
  • Nuklear: Updated to 2.00.2 (up from 1.37.0)
  • OpenAL: Added ALC_SOFT_output_limiter extension.
  • OpenAL Soft: Updated to 1.18.2 (up from 1.17.2)
  • OpenCL: Added support for OpenCL 2.2
  • OpenGL: Added support for OpenGL 4.6 and latest extensions
  • OpenGL ES: Added support for latest extensions
  • OpenVR: Update to 1.0.10 (up from 1.0.7)
  • stb
    • Updated stb_dxt to 1.07 (up from 1.06)
    • Updated stb_image to 2.16 (up from 2.15)
    • Updated stb_image_resize to 0.95 (up from 0.94)
    • Updated stb_image_write to 1.07 (up from 1.05)
    • Updated stb_truetype to 1.17 (up from 1.15)
    • Updated stb_vorbis to 1.11 (up from 1.10)
  • tinyfiledialogs: Updated to 3.0.5 (up from 2.8.3)
  • Vulkan: Updated to 1.0.61 (up from 1.0.49)
  • xxhash: Updated to 0.6.3 (up from 0.6.2)
  • Yoga: Updated to 1.6.0 (up from 1.5.0)

Improvements

  • Generator: Added @NativeType annotations to generated bindings. Documents the native type of:
    • Callback and struct classes.
    • Struct members.
    • Function parameters and return values.
  • The default memory allocator on Windows is now the system allocator instead of jemalloc.
    • jemalloc is not properly optimized for Windows and its performance is not competitive.
    • jemalloc is still a major performance win on Linux and macOS.
    • rpmalloc is faster on all platforms but requires per-thread setup, so must be enabled manually.
  • Buffers created via MemoryUtil may now have up to Integer.MAX_VALUE elements, regardless of element size.
    • For example this allows a LongBuffer allocation of up to 16GB.
  • Added typed overloads to MemoryUtil::memSet and MemoryUtil::memCopy.
  • StructBuffer subclasses are now Iterable and have stream() and parallelStream() methods.
  • OpenGL: Added LongBuffer overloads to buffer object functions.

Fixes

  • bgfx: Fixed signature of bgfx_create_frame_buffer_from_attachment.
  • OpenGL: Fixed signature of glPixelStoref.
  • OpenGL: ARB_direct_state_access interactions are now respected when checking if the extension is available.
  • stb_image: added ShortBuffer overload to stbi_image_free.
  • stb_truetype: Fixed signature of stbtt_PackFontRangesGatherRects and stbtt_PackFontRangesRenderIntoRects.

Breaking Changes

  • glfw: Signature of glfwGetError has changed.
  • jemalloc: Removed JEmacros and moved its functionality to JEmalloc.
  • jemalloc: ChunkHooks has been replaced by ExtentHooks.
  • OpenCL: Removed two confusing clCompileProgram overloads.

LWJGL 3.1.2

15 May 17:08
Compare
Choose a tag to compare

Changes since 3.1.1:

Bindings

  • Added OpenVR bindings.
  • Added Tiny OpenEXR bindings.
  • Added Yoga bindings.
  • bgfx: Updated to API version 41 (up from 34)
  • glfw: Updated to pre-release 3.3.0 version (up from 3.2.1). Includes many fixes and new features:
    • Last error code query (glfwGetError)
    • Requesting attention from the user (glfwRequestWindowAttention)
    • Platform dependent scancodes for keys (glfwGetKeyScancode)
    • Window maximization events (glfwSetWindowMaximizeCallback)
    • Window attribute modification (glfwSetWindowAttrib)
    • Joystick hats (glfwGetJoystickHats)
    • Library initialization hints (glfwInitHint)
    • Headless OSMesa backend
    • Cursor centering control (GLFW_CENTER_CURSOR)
    • macOS: Cocoa hints (GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_COCOA_FRAME_AUTOSAVE, GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_COCOA_CHDIR_RESOURCES, GLFW_COCOA_MENUBAR)
    • macOS: Vulkan support via MoltenVK
    • X11: Moved to XI2 XI_RawMotion for disabled cursor mode motion input
    • EGL: Added support for EGL_KHR_get_all_proc_addresses and EGL_KHR_context_flush_control
  • jemalloc: Updated to 4.5.0 (up from 4.4.0)
  • LibOVR: Update to 1.14.0 (up from 1.10.0)
  • lmdb: Updated to 0.9.20 (up from 0.9.18)
  • NanoVG: Added support for fallback fonts.
  • nuklear: Updated to 1.37.0 (up from 1.29.1, with the new versioning)
  • OpenAL: Added AL_SOFT_source_resampler extension.
  • stb
    • Updated stb_dxt to 1.0.6 (up from 1.0.4)
    • Updated stb_easy_font to 1.0 (up from 0.7)
    • Updated stb_image to 2.15 (up from 2.13)
    • Updated stb_image_resize to 0.94 (up from 0.91)
    • Updated stb_image_write to 1.05 (up from 1.02)
    • Updated stb_perlin to 0.3 (up from 0.2)
    • Updated stb_rect_pack to 0.11 (up from 0.10)
    • Updated stb_truetype to 1.15 (up from 1.12)
    • Updated stb_vorbis to 1.10 (up from 1.09)
  • tinyfiledialogs: Updated to 2.8.3 (up from 2.7.2)
  • Vulkan: Updated to 1.0.49 (up from 1.0.38)

Improvements

  • MemoryStack: Increased default stack size to 64kb (up from 32kb)
  • Shared library loading can now utilize a ClassLoader specified by the caller. (#277)
  • Significantly reduced DEBUG_MEMORY_ALLOCATOR and DEBUG_STACK overhead in Java 9 using the new StackWalker API.
  • Migrated windows builds to appveyor and updated to Visual Studio 2017 (up from 2015)
  • EGL: The core API now includes javadoc links to the Khronos references pages
  • OpenGL ES: The core API now includes javadoc links to the Khronos references pages

Fixes

  • Assimp: Struct member nullability fixes
  • Linux: Removed dependencies to newer GLIBC versions.
  • LibOVR: Fixed layout of the ovrInputState struct.
  • OpenAL: Removed buffer auto-sizing from alcCaptureSamples. The number of samples must now be specified explicitly, similar to alcRenderSamplesSOFT.
  • Vulkan: Function addresses are now retrieved only once, using the optimal method for each function type.
    • This avoids warnings on pedantic validation layers.
  • Fixed callback invocation bugs on 32-bit architectures.
  • Fixed various javadoc formatting issues (#308)

Breaking Changes

  • Mapped more integer parameters and return values to Java boolean, that were missed while working on #181.
    • Xlib's Bool
    • OpenCL's cl_bool
    • DynCall's DCbool
  • Moved JNI global reference functions from MemoryUtil to the generated org.lwjgl.system.jni.JNINativeInterface.
  • The Vulkan capabilities have been split into two classes: VKCapabilitiesInstance and VKCapabilitiesDevice.
    • Flags for core Vulkan versions exist in both classes.
    • Flags for instance extensions exist only in VKCapabilitiesInstance.
    • Flags for device extensions exist only in VKCapabilitiesDevice.
    • Functions that dispatch on VkInstance or VkPhysicalDevice exist only in VKCapabilitiesInstance.
    • Functions that dispatch on VkDevice and device-derived handles exist only in VKCapabilitiesDevice.
    • Bootstrapping functions can be retrieved with VK.getFunctionProvider().

LWJGL 3.1.1

27 Dec 19:04
Compare
Choose a tag to compare

Changes since 3.1.0:

Bindings

  • Added Assimp bindings.
  • bgfx: Updated to API version 34 (up from 28)
  • jemalloc: Updated to version 4.4.0 (up from 4.2.1)
  • LibOVR: Updated to version 1.10.0 (up from 1.9.0)
  • nuklear: Updated to version 1.191 (up from 1.17)
  • Vulkan: Updated to version 1.0.38 (up from 1.0.32)
  • stb: Updated stb_image to 2.13 (up from 2.12)
  • tinyfiledialogs: Updated to version 2.7.2 (up from 2.6.1)

Improvements

  • Refactored function pointer lookups in OpenAL, OpenGL and OpenGL ES.
    • Significant reduction in bytecode size (and corresponding JIT code).
    • No thread-local lookup in GL and GLES, even with incompatible contexts.
    • Removed obsolete thread-local and capabilities state Configuration options.
  • Linux: All natives are now built with GCC 6.2 (up from 4.8)
  • Loader: If jemalloc initialization fails and org.lwjgl.system.allocator has not been set, a simple warning is now shown instead of an exception.
  • Structs: Added bound checks to element accessors of array members.
  • Generator: Validation is now required for all data pointer parameters. If validation is not possible, such parameters must be marked as potentially unsafe.
  • The SHA-1 hash of shared libraries is now included in the corresponding natives JAR files.
  • The upstream git revision used to build shared libraries is now included in the corresponding natives JAR files.

Fixes

  • Fixed loader diagnostics when System.loadLibrary fails.
  • Fixed setters of struct members with optional AutoSize. (#255)
  • Fixed MemoryUtil.memRealloc to return null when the allocation fails.
  • Vulkan: Function pointer loading of disabled extensions is now skipped.
  • Generator: binding.DISABLE_CHECKS is now respected in structs.

Breaking Changes

  • macOS: LWJGL now requires macOS 10.9/Mavericks or later (up from 10.7/Lion)
  • A small number of method signatures have changed because of auto-size transformations that were missing in previous releases.
  • NanoVG: Text functions with an end pointer to the end of the string are now auto-size transformed. Buffers passed to them should not include a null-terminating byte.
  • Added LibC prefix to all class names in the libc bindings, to avoid conflicts with standard Java classes (Locale, String, etc.)
  • OpenGL and OpenGL ES now come with native libraries (lwjgl_opengl and lwjgl_opengles respectively).
  • Removed MemoryUtil.memSetupBuffer.

LWJGL 3.1.0

30 Oct 19:14
Compare
Choose a tag to compare

Changes since 3.0.0:

Bindings

  • Bindings have been split into modules and are available as separate artifacts. (#100)
    • The download configurator on the website can be used to customize LWJGL builds and Maven/Gradle projects.
  • Added LMDB bindings.
  • Added Nuklear bindings. (#101)
  • Added Tiny File Dialogs bindings.
  • Added bgfx bindings. (#240)
  • Added support for new EGL, OpenCL, OpenGL, OpenGL ES and Vulkan extensions.
  • Updated all bindings to latest versions.
  • Vulkan javadoc is now almost identical to the Vulkan man pages, with links to the online Vulkan specification.

Improvements

  • Generator: Removed buffer object binding checks. (#197)
  • Generator: Added support for mapping byte/short parameters to int.
  • Generator: Added support for va_list parameters.
  • Generator: Reduced bytecode size of generated methods.
  • Generator: The Vulkan bindings are now automatically generated.
  • Optimized strlen methods used internally by LWJGL.
  • Optimized misaligned memSet and memCopy.
  • Added support for stack allocations with custom alignment.
  • Removed allocation functionality from read-only, externally managed structs.
  • Improved library loading diagnostics and added Configuration.DEBUG_LOADER option.
  • Libraries extracted by the SharedLibraryLoader are now locked to avoid conflicts with other processes (e.g. antivirus software). (#225)
  • Simplified javadoc of unsafe versions.

Fixes

  • Callback instances are now tracked when the DEBUG_MEMORY_ALLOCATOR option is enabled.
  • Fixed realloc tracking in the debug allocator.
  • Shared libraries that ship with LWJGL are now always preferred over system libraries.
  • Fixed return type of functions that return pointer to boolean.
  • stb_image: Fixed result auto-sizing of stbi_load* functions.
  • Functions that deallocate memory no longer have Java array overloads.
  • Fixed memSet bugs.
  • Fixed Java array overload generation for functions with multiple auto-size-result parameters.
  • Fixed custom checks in Java array overloads.
  • Fixed lookup of Critical JNI natives on Windows x86.
  • Disabled Critical JNI natives for functions affected by JDK-8167409 on Linux & MacOS.

Breaking Changes

  • xxHash: Added support for stack allocation of streaming hash state. Opaque handles have been replaced by the XXH*State structs.
  • NanoVG: Dropped version suffixes from NanoVGGL classes.
  • Mapped more integer parameters and return values to Java booleans, that were missed while working on #181.
  • Dropped VKUtil class and moved the version macros to VK10.

LWJGL 3.0.0

03 Jun 18:41
Compare
Choose a tag to compare

Changes since 3.0.0b:

BINDINGS

  • Added support for Java array parameters and HotSpot Critical Natives. (#175)
  • Added Vulkanl bindings. (#50)
  • Added NanoVG bindings. (#99)
  • Added NativeFileDialog bindings.
  • Added par_shapes.h bindings.
  • Added dyncall bindings.
  • Added jawt bindings for AWT/Swing integration. (#125)
  • Added simple OS-specific window creation bindings, for custom window/context creation. (#105)
  • Added missing OpenCL and OpenAL extensions.
  • Fully documented OpenCL and OpenAL.
  • Moved WGL and GLX capabilities to the new WGLCapabilities and GLXCapabilities classes, respectively. Functionality in WGL, GLX and corresponding extensions that does not require a current context can now be used without creating a dummy context first. (#171)

IMPROVEMENTS

  • Added stack allocation APIs (the MemoryStack class and new allocation methods in struct classes and MemoryUtil).
  • Made the implementations of PointerBuffer and Struct/StructBuffer subclasses as lightweight as possible. This makes it easier for escape analysis to eliminate allocations.
  • Minor struct API improvements.
  • Added nullability information to struct members, to protect against buggy code crashing the JVM.
  • All bindings are updated to the latest versions of the corresponding libraries. Notably, GLFW now has glfwSetWindowIcon and glfwSetWindowMonitor, it now doesn't lack anything compared to LWJGL 2's Display.
  • Refactored callbacks for Java 8. (#182)
  • Added NativeResource interface and made freeable objects usable as resources in try-with-resources statements. (#186)
  • Faster thread-local lookups for the stack and current capabilities. New options in Configuration can be used to complete eliminate thread-local lookup in OpenGL, OpenGL ES and OpenAL, when it is known that only a single context will be used, or that all contexts will be compatible (same capabilities and same function pointers).
  • Added memSlice for all buffers types in MemoryUtil. (#179)
  • Refactored the Configuration class for type safety and added more options.
  • JDK 9 can now be used to build and run LWJGL.
  • Javadoc is now generated with JDK 9. The API is fully indexed and search functionality is available. Also made multiple Javadoc formatting improvements.
  • Improved debug diagnostics on startup and when loading the LWJGL shared library fails.
  • Optimized memSet and memCopy for small buffers.

FIXES

  • Stopped using UPX compression for binaries. This eliminates various integration issues and virus scanning false-positives.
  • The SharedLibraryLoader now works with any shared library, not only libraries LWJGL knows about. (#176)

BREAKING CHANGES

  • LWJGL now requires Java 8 to build and run. Certain custom interfaces have been replaced with java.util.function interfaces. (#177)
  • Dropped support for Linux x86. (#162)
  • Dropped libffi bindings.
  • Dropped ALDevice/ALContext wrappers from OpenAL and CLPlatform/CLDevice wrappers from OpenCL. (#152)
  • Dropped the getInstance() method from bindings loaded from shared libraries. Function pointers are now stored either in capabilities classes or in a nested Functions inner class.
  • Dropped infrequently used method overloads in bindings. Full javadoc is now generated on (almost) all overloads.
  • Dropped utility classes that were not useful.
  • Added AutoSize support to struct members. Instance setters for the corresponding count/size members were removed to avoid bugs and confusion.
  • Replaced MemoryUtil.memFree(StructBuffer) with StructBuffer.free().
  • Renamed __ALIGNMENT to ALIGNOF in struct classes.
  • Removed org.lwjgl.system.Retainable interface. Closure and FunctionProvider subclasses are now destroyed using .free() instead of .release().
  • Moved xxHash and SSE bindings to the org.lwjgl.util package.
  • Integer-boolean native types (0 or 1 are the only legal values) are now mapped to Java booleans. (#181)
  • Macros without parameters are now generated as static final values, not methods.

LWJGL 3.0.0b

21 Nov 12:32
Compare
Choose a tag to compare
LWJGL 3.0.0b Pre-release
Pre-release

This build includes the following changes:

  • The API is now considered stable. There were several API changes, especially to struct and callback classes.
  • Moved advanced functionality from the base package to the system package. Public API in the system package may change between releases.
  • Critical methods have been optimized for better performance and garbage elimination.
  • JNI methods are now deduplicated and struct layout is calculated in Java. This means much smaller shared libraries.
  • Introduced the Configuration class that can be used to programmatically configure LWJGL.
  • Introduced explicit memory management API, which is also used internally by LWJGL.
  • Introduced a debug allocator that can be enabled for the explicit memory management API. It reports memory leaks with full stack-traces to the leaked allocations.
  • All struct classes now have a corresponding StructBuffer implementation. Bindings now use Struct and StructBuffer parameters and return values, instead of ByteBuffer, which improves type safety.
  • Struct fields and accessors are now documented.
  • Many other fixes and minor features.

Changes to bindings:

  • Removed obsolete OS-specific bindings.
  • Added bindings to many OpenGL extensions that were missing in 3.0.0a.
  • Added bindings to jemalloc.
  • Added bindings to EGL.
  • Added bindings to OpenGL ES.
  • Added bindings to xxHash.
  • The bindings to LibOVR were updated to 0.8.0.0 and are now included in the official build.
  • Several other fixes and updates to existing bindings.

LWJGL 3.0.0a

21 Nov 12:30
Compare
Choose a tag to compare
LWJGL 3.0.0a Pre-release
Pre-release

The first official release. This build suffers from several bugs and the API is very different from subsequent releases.