Frequently Asked Questions
This page is a collection questions that occur from time to time. If you have a specific problem, please post a question to the forum.
- 1 General
- 1.1 Can I use LWJGL in commercial projects?
- 1.2 I have a problem with LWJGL, how do I get help?
- 1.3 How can I load images and sounds with LWJGL?
- 1.4 Why does LWJGL use a static API as opposed to an Object Oriented one?
- 1.5 Does LWJGL support GLU the OpenGL Utility Library? and where do I find it?
- 1.6 LWJGL's methods all start with the class name (e.g. GL11, GL13, etc), can I use it without adding those to every OpenGL method?
- 1.7 Does LWJGL support OpenGL ES?
- 1.8 Whats up with all those ByteBuffers? Why not just use arrays?
- 1.9 Does LWJGL have a Maven Repository?
- 1.10 What are all the Jars include in the LWJGL download bundle?
- 2 Building LWJGL
- 3 Distributing LWJGL Applications
Can I use LWJGL in commercial projects?
LWJGL is distributed under a BSD license which allows you to do whatever you want, as long as you include the LWJGL license, and any components you use (OpenAL, Jinput, Slick-Util, etc).
I have a problem with LWJGL, how do I get help?
How can I load images and sounds with LWJGL?
Well there are a number of libraries out there to allow you do this and you could always write your own image and sound loaders. However currently the recommended way to load various texture and sound formats in LWJGL is to use the Slick-Util library (note different from Slick2D).
Its pretty easy to use, just download the package and have a look at the examples included in the source code on how to use it.
Why does LWJGL use a static API as opposed to an Object Oriented one?
Libraries like OpenGL, OpenCL and OpenAL are written in C and hence static in nature. As LWJGL is designed to be as simple and as close to the metal as possible its API is almost entirely static to allows it to match as closely as possible to them.
Does LWJGL support GLU the OpenGL Utility Library? and where do I find it?
Yes LWJGL does support GLU, its found in the following location:
You will also need to add lwjgl_util.jar to the classpath.
LWJGL's methods all start with the class name (e.g. GL11, GL13, etc), can I use it without adding those to every OpenGL method?
LWJGL's api is intentionally designed like that in order to allow you to easily target specific versions of OpenGL. However if you do want to code without the class name before the method, you can simply just use java's static import feature.
import static org.lwjgl.opengl.GL11.*;
adding the above will allow you to use all the methods in the GL11 class without adding the "GL11." part before the method name. You can safely statically import all of the LWJGL opengl classes that you need as there are not conflicting method names.
Does LWJGL support OpenGL ES?
Yes, OpenGL ES is now part of LWJGL, however it is not built with the distributed binaries. You need to compile it yourself using the supplied ANT Build files.
Whats up with all those ByteBuffers? Why not just use arrays?
Basically because it's the fastest way to transport data to the OpenGL layer from Java.
Does LWJGL have a Maven Repository?
LWJGL is in Maven Central starting with version 2.8.0, see LWJGL use in Maven.
What are all the Jars include in the LWJGL download bundle?
The LWJGL download package contains a number of jars, they are used for the following:
- lwjgl.jar - This contains the core of LWJGL and should be the only jar needed for a simple LWJGL application.
- lwjgl_util.jar - The jar contains utility classes that optionally maybe needed, these include the OpenGL GLU, various Vector and Matrix classes, MappedObjects, etc.
- lwjgl_debug.jar - This is the same as lwjgl.jar but will provide additional debug information. Do not load at the same time as lwjgl.jar as it contains identical classes.
- lwjgl_test.jar - This includes basic examples and demos for LWJGL (e.g. A Space Invaders Game).
- lwjgl_util_applet.jar - This jar contains the AppletLoader a utility used to deploy LWJGL in the browser.
- lzma.jar - This is an optional jar used with the AppletLoader (above jar) and is only needed if you are using lzma compressed jars.
- jinput.jar - This is the JInput jar and is needed if you intend to use game controllers with LWJGL (joysticks, joypads, multiple mice, etc). Not needed if you only intend to use a Keyboard and/or Mouse.
- asm.jar - This is an optional jar which contains the ASM library and only needed if you are using the MappedObjects found in the lwjgl-util.jar.
- asm-util.jar - This jar contains utilities for the ASM library and should only be needed when using the above asm.jar.
- AppleJavaExtensions.jar - This jar contains stubs for the mac and is only needed when compiling lwjgl on a non mac platform.
Fetching the latest code from Subversion and running the ANT build.xml should build the lwjgl project jar files in libs/ and the natives in the subdirectories windows, linux, macosx or solaris.
Distributing LWJGL Applications
What options do I have to distribute my LWJGL Application?
Can I use LWJGL with GCJ?
Yes. GCJ 4.0 and greater support LWJGL applications and are able to compile executables. Do note at the time of writing this the GCJ garbage collector is very weak and likely to cause performance problems. It is possible however to write java code in such a way that produces very little or no garbage at all in which case GCJ is pretty good.