原文:https://github.com/SilverTiger/lwjgl3-tutorial/wiki/Introduction
译注:并没有逐字逐句翻译一切,只翻译了自己觉得有用的部分。另外此翻译仅供参考,请一切以原文为准。代码例子文件链接什么的都请去原链接查找。
你需要对LWJGL里任何一个callback都有强引用,由于垃圾回收机制,如果你没有强引用,VM可能会将它回收掉,导致一个ClosureError。所以保证对应每个callback都有一个类变量。
回头继续说error callback,用LWJGL提供的Callbacks类里的errorCallbackPrint方法创建一个GLFWErrorCallback。
另一种方法是new出来一个GLFWErrorCallback,然后覆盖它的调用函数。
简单起见,我们就创建一个error callback然后打印System.err.
private GLFWErrorCallback errorCallback = Callbacks.errorCallbackPrint(System.err);
glfwSetErrorCallback(errorCallback);
if (glfwInit() != GL_TRUE) {
throw new IllegalStateException("Unable to initialize GLFW");
}
现在GLFW初始化完毕,我们开始创建窗口。
long window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
if (window == NULL) {
glfwTerminate();
throw new RuntimeException("Failed to create the GLFW window");
}
private GLFWKeyCallback keyCallback = new GLFWKeyCallback() {
@Overridepublic void invoke(long window, int key, int scancode, int action, int mods) {
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
glfwSetWindowShouldClose(window, GL_TRUE);
}
}
};
glfwSetKeyCallback(window, keyCallback);
GLContext类的
createFromCurrent(),这样库才会发现context,使OpenGL绑定成功可用。
glfwMakeContextCurrent(window);
GLContext.createFromCurrent();
while (glfwWindowShouldClose(window) != GL_TRUE) {
/* Do something */
}
double time = glfwGetTime();
Opengl调用完,需要交换颜色缓冲区,因为GLFW使用的是双缓冲机制。调用
glfwSwapBuffers(window)做这件事。glfwSwapBuffers(window);
glfwPollEvents();
具体内容请参照Introduction.java文件。
当结束程序时,需要释放callback们,销毁窗口,并且中止GLFW,这样所有分配的资源才能释放掉。
首先要销毁窗口,然后释放注册到窗口上的事件callback们,比如键盘事件。
glfwDestroyWindow(window);
keyCallback.release();
glfwTerminate();
errorCallback.release();