Jump to content

LWJGL

From Wikipedia, the free encyclopedia

Lightweight Java Game Library (LWJGL)
Original author(s)Caspian Prince
Developer(s)Ioannis Tsakpinis
Initial release4 February 2007;17 years ago(2007-02-04)[1]
Stable release
3.3.3 / 16 September 2023;8 months ago(2023-09-16)
Repositorygithub.com/lwjgl
Written inJava,C,Kotlin[2][3]
Operating systemLinux,macOS,Windows,FreeBSD
PlatformJava platform
TypeFree computer library
LicenseBSD,[4]some bindings under different licenses[2]
Websitelwjgl.org

TheLightweight Java Game Library(LWJGL) is anopen-sourcesoftware librarythat providesbindingsto a variety ofClibraries forvideo game developerstoJava.It exposescross-platformlibraries commonly used in developing video games and multimedia titles, such asVulkan,OpenGL,OpenALandOpenCL.

The primary goal of the project is to provide a way for Java developers to get access to resources that are otherwise unavailable or poorly implemented on the existing Java platform. The main philosophy is to expose underlying technology as a thin wrapper, thus creating anAPIclose to the original. It is also the basis of many high-level Java game engines and libraries, such aslibGDXor thejMonkeyEngine.

History[edit]

Development of the library began in 2002 with the release ofJ2SE 1.4,making use of the newly-addednon-blocking I/O operationsandoff-heap memoryaccess. These additions to theJDKallowed for better access to native memory and libraries not a part of the JDK. The first official release of the library was on 4 February 2007.[1]

On 13 November 2014, version 3 was announced, which was released in the alpha version on 27 April 2015 and is a complete rewrite of LWJGL.[5][6][7]Many new bindings, includingGLFW,EGLandObjective-C,were added.[4][6]Support forOculus Riftdevelopment was also added with LibOVR bindings.[4][7]The new version was released on 4 June 2016, after more than 3 and a half years in development.[8]

Bindings[edit]

The library accesses nativeCcode through theJava Native Interface(JNI). Bindings to each of the native libraries exist as different modules so developers can make custom builds with only the things they need in a certain program.[4][7][9]

While utility classes are written in pureJava,most of the binding classes are automatically generated by a custom generator implemented inKotlin.[2][3]

Since version 3.1, LWJGL is fully split into 51 modules that can be downloaded and used separately. To make this process easier, the project provides an online build configurator, which allows users to download custom combinations of modules and automatically generatesMavenandGradleconfiguration files to ease their use with existing projects.[10][11][12]

Provided bindings[2][4]
Binding Category Description Notes
EGL KhronosAPIs Interface between Khronos rendering APIs and the underlying native platform window system.
OpenCL API for cross-platformparallel computing.
OpenGL 3D graphics specification implemented by mostGPUvendors. Most extensions are supported, but less popular ones will be added on request.
OpenGL ES OpenGL forembedded systemslike mobile phones, tablets, or consoles.
Vulkan Upcoming cross-platform 3D graphics API.
GLFW Display and Input Window management library needed for handling OpenGL and Vulkan contexts as well as user input.
JAWT AWTnative interface.
nfd Small cross-platform native file dialogs library.
tinyfd Small native dialog library.
OpenAL Audio Three-dimensional audio API. ALC and other extensions are supported. Specifically bundles the OpenAL Soft implementation.
Opus Open, royalty-freeaudio codec.
Assimp Graphics Portable open source library to import various3D modelformats.
bgfx Cross-platform rendering library supporting multiple graphics backends.
DriftFX Library to render OpenGL content into JavaFX nodes.
LibOVR API of theOculus RiftSDK.
meshoptimizer A mesh optimization library that makes meshes smaller and faster to render
NanoSVG SimpleSVGparser.
NanoVG 2D vector graphics rendering library using OpenGL.
Nuklear SimpleGUIlibrary.
par_shapes Generator forparametricand other simple shapes.
par_streamlines Triangulate wide lines and curves.
OpenVR An API runtime that allows access to VR hardware from multiple vendors without requiring applications have specific knowledge of the type of hardware they are targeting.
Shaderc A collection of libraries forshadercompilation
SPIRV-Cross A library for performing reflection onSPIR-Vand disassembling SPIR-V back to high level languages.
OpenEXR A small, single-header library to load and save OpenEXR (.exr) images.
Tootle (AMD) A 3D triangle mesh optimization library that improves on existing mesh preprocessing techniques.
Vulkan Memory Allocator An easy to integrate Vulkan memory allocation library.
Yoga An open-source, cross-platform layout library that implementsCSSFlexbox.
STB STB Lightweight single-file libraries for loading images, sounds and fonts.
Bullet Physics Other Real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine-learning, etc.
CUDA A parallel computing platform and programming model developed byNVIDIAfor general computing on GPUs.
dyncall Library for dynamically calling C functions in a portable way. Set to be removed.
jemalloc Low-level memory management.
libffi A portable, high level programming interface to various calling conventions. Replaces dyncall.
libdivide A library that replaces expensive integer divides with comparatively cheap multiplication and bitshifts.
LLVM A collection of modular and reusable compiler and toolchain technologies.
LMDB Fast database library usingmemory-mapped files.
LZ4 A losslessdata compressionalgorithm that is focused on speed.
Meow Hash Fast non-cryptographic hash.
ODBC A C-language interface that makes it possible for applications to access data from a variety of database management systems.
Remotery Realtime CPU/GPUprofiler.
rpmalloc Cross-platform thread caching memory allocator.
xxHash Fasthash algorithm.
Zstandard A fast lossless compression algorithm.

Notable uses[edit]

References[edit]

  1. ^abMatzon, Brian (4 February 2007)."LWJGL 1.0 Released".LWJGL Forum.Retrieved23 July2016.
  2. ^abcd"LWJGL/lwjgl3".github.com.Retrieved13 August2016.
  3. ^ab"lwjgl3/doc – Generator".github.com.11 August 2015.Retrieved30 August2015.
  4. ^abcde"Official website".Retrieved14 August2015.
  5. ^Tsakpinis, Ioannis (13 November 2014)."Welcome to LWJGL 3".blog.lwjgl.org.
  6. ^ab"LWJGL 3 Roadmap".github.com.Retrieved2 June2015.
  7. ^abcTsakpinis, Ioannis (27 April 2015)."LWJGL 3.0.0a released".blog.lwjgl.org.
  8. ^"LWJGL 3.0.0 Released!".blog.lwjgl.org.4 June 2016.Retrieved4 June2016.
  9. ^"Bindings FAQ".github.com.27 December 2014.Retrieved27 July2015.
  10. ^"LWJGL 3.1.0 Released!".blog.lwjgl.org.30 October 2016.Retrieved11 November2016.
  11. ^"Minecraft unblocked".Retrieved16 November2023.
  12. ^"Download – LWJGL".lwjgl.org.Retrieved11 November2016.
  13. ^"Minecraft Attributions | Minecraft".Minecraft.net.Retrieved9 July2020.
  14. ^"APZDTISA #3: This time with LIVE MULTIPLAYER!".Project Zomboid.17 February 2014.Retrieved25 January2022.

External links[edit]