LWJGL 3.0.0
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
andGLXCapabilities
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 andMemoryUtil
). - Made the implementations of
PointerBuffer
andStruct/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
andglfwSetWindowMonitor
, 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 inMemoryUtil
. (#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
andmemCopy
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 andCLPlatform/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)
withStructBuffer.free()
. - Renamed
__ALIGNMENT
toALIGNOF
in struct classes. - Removed
org.lwjgl.system.Retainable
interface.Closure
andFunctionProvider
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.