LWJGL - The Lightweight Java Game Library Version 3.3 Released
Written by Nikos Vaggalis   
Friday, 26 November 2021

After more than two years, the long-awaited release of this open source library is finally here, and with a lot to offer.

Per the the project's official definition , LWJGL is:

a Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL/Vulkan) , audio (OpenAL) and parallel computing (OpenCL) applications.

The part to note in this definition is that LWJGL provides access to native APIs through Java. That it is a wrapper over the APIs doesn't mean that you should not be familiar with the semantics of the underlying API. Hence to get the most out of LWJGL a good understanding of the native APIs is essential too.

At this point it is important to disambiguate between a library and a framework. LWJGL is a library and as such is low level; it is not a gamedev framework like libgdx (which itself uses LWJGL under the covers!) or a gamedev engine like GoDot which provide higher level of abstractions. For this reason, it is not recommended for novice programmers to start out writing games with it.

And, of course, it is debatable whether Java is a good language for gamedev over the classic value of C++. Some advantages of using Java are its support of multiple operating systems and, of course, the easy learning curve in comparison to C++. Minuses could be garbage collection, performance and a smaller dev community. In any case, it depends on the use case; as they say, choose the best tool for the job at hand.

The number of supported bindings is impressive: EGL, OpenCL, OpenGL ,OpenGL ES and Vulkan (the new generation graphics and compute API) are supported.

Then there's bindings for Display and Input, Audio, Graphics, public domain libraries for C/C++ as well as CUDA.  An exhaustive list can be found on the project's Github repo, while the demo directory contains code samples in many APIs.

Version 3.2.3 was released back in September 2019, so this 3.3.0 release comes after two years plus. It comes with more bindings, updated components to newer versions, bug fixes, various improvements and in some instances breaking backwards compatibility. Some of those changes in not a particular order are:

  • Added libffi bindings
  • Added meshoptimizer bindings
  • Added SPIRV-Cross bindings
  • CUDA: Updated to 11. 5. 0 (up from 10. 1. 0)
  • glfw: Updated to latest 3. 3. 4 (up from 3. 3. 1)
  • OpenCL: Added support for OpenCL 3. 0
  • OpenVR: Updated to 1. 16. 8 (up from 1. 6. 10)
  • macOS/Windows: Added support for ARM builds
  • Core: Replaced internal usages of dyncall with libffi
  • 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
  • Core: Fixed unsafe field reads in MemoryUtil setup code
  • GLFW: Fixed main thread check. Setting GLFW_CHECK_THREAD0 to false is now required for offscreen interop
  • Vulkan: Fixed vkGetInstanceProcAddr to work with null instance arguments
  • Linux: Shared libraries are now built on Ubuntu 18. 04 (up from Ubuntu 16. 04)
    GLIBC versions older than 2. 14 are no longer supported. 
  • Removed deprecated methods that were marked for removal in LWJGL 3. 3.
  • Shaderc: The shaderc_spvc library has been removed since Shaderc 2020. 4. Users may migrate to the new SPIRV-Cross bindings. (S)

Full list of changes on the project's release notes.

Also make sure to check this legacy list of games made with LWJGL.


More Information

LWJGL main


3.3.0 Release Notes

Related Articles

Cooperative AI Beats Humans at Quake CTF

How To Create A Viral Mobile Game 


To be informed about new articles on I Programmer, sign up for our weekly newsletter, subscribe to the RSS feed and follow us on Twitter, Facebook or Linkedin.


Hash Code - Cannabis Use Among Programmers

A survey of cannabis use by programmers reveals that over a third had tried programming while using cannabis and almost one in five do so at least once a month, motivated by perceived enhancement [ ... ]

Ruby 3.1 Adds In-Process JIT Compiler

Ruby 3.1 has been released with improvements including an experimental in-process just in time compiler and a new debugger.

More News





or email your comment to: comments@i-programmer.info

Last Updated ( Friday, 26 November 2021 )