LWJGL 3.0.0 released

Visit the download page to get it. You can also get it from Maven Central or this direct link.

Release notes (since 3.0.0b):

BINDINGS

  • Added support for Java array parameters and HotSpot Critical Natives. (#175)
  • Added Vulkan 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.

Congrats on the release and thanks for the years of hard work behind making this happen. GitHub history says the initial commit was December 2012.

Legendary!

Dropping the Linux 32bit support surprised me. I guess i don’t have any left since i didn’t notice and have used a nightly once or twice. So meh. If my users complain i guess i may have to be the “contributor”.

[quote]- 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.
[/quote]
Technically, it’s still not possible to switch a window to borderless/undecorated or make the window resizable once its been created. Making a window borderless was doable by modifying system variables while the program was running in LWJGL 2, although it was unreliable. There’s an issue up for it, which is scheduled to be fixed in 3.3: https://github.com/glfw/glfw/issues/537 I think they’re putting together the 3.2 build right now (their website is down), so it should be ready soon™.

[quote]- Added stack allocation APIs (the MemoryStack class and new allocation methods in struct classes and MemoryUtil).
[/quote]
Shout-out to KaiHH’s excellent Autostack Java agent which automatically injects stackPush() and stackPop() into functions that use the stack so you don’t need to do it yourself, making stack allocation completely automatic (and the Vulkan binding actually usable).

Huh…
Huh
Oh…
Neat

OpenGL is very core to Linux users everywhere. Is x64 being updated still? I am not much into Linux so… I dunno about x32 and x64 coexist.

Yes quite a few people still run pure 32 x86. But they don’t need to. A 32 x86 hasn’t been sold made in how long? So it is very legacy support. And lets face it these people don’t really use things like games or opengl or anything. I can understand dropping support for things that cost time, and lack users. Legacy support is overrated.

I like the idea of “This build dies with this version” legacy.

It is incredible to see how far LWJGL 3.0 has gone. Amazing work Spasi and all who have contributed. I’m glad to finally see it being released!