public OpenGLDisplay(int width, int height, String title) {
		glfwSetErrorCallback(errorCallback = errorCallbackPrint(System.err));

		if (glfwInit() != GL_TRUE) {
			throw new IllegalStateException("Unable to initialize GLFW");
		}

		glfwDefaultWindowHints();
		glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
		glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);

		window = glfwCreateWindow(width, height, title, NULL, NULL);
		if (window == NULL) {
			throw new RuntimeException("Failed to create the GLFW window");
		}

		ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
		glfwSetWindowPos(window, (GLFWvidmode.width(vidmode) - width) / 2,
				(GLFWvidmode.height(vidmode) - height) / 2);

		glfwMakeContextCurrent(window);
		glfwSwapInterval(Debug.isIgnoringFrameCap() ? 0 : 1);

		glfwShowWindow(window);
		GLContext.createFromCurrent();

		device = new OpenGLRenderDevice(width, height);
		this.target = new RenderTarget(device, width, height, 0, 0);
		frameBuffer = new RenderContext(device, target);
		input = new OpenGLInput(window);
		audioDevice = new OpenALAudioDevice();
	}