我目前正在学习一个包含创建窗口的初始化代码的教程
private void init() {
// Setup an error callback. The default implementation
// will print the error message in System.err.
errorCallback = GLFWErrorCallback.createPrint(System.err);
glfwSetErrorCallback(errorCallback);
// Initialize GLFW. Most GLFW functions will not work before doing this.
if (!glfwInit()) {
throw new IllegalStateException("Unable to initialize GLFW");
}
// Configure our window
glfwDefaultWindowHints(); // optional, the current window hints are already the default
glfwWindowHint(GLFW_VISIBLE, GL_FALSE); // the window will stay hidden after creation
glfwWindowHint(GLFW_RESIZABLE, GL_TRUE); // the window will be resizable
int WIDTH = 300;
int HEIGHT = 300;
// Create the window
window = glfwCreateWindow(WIDTH, HEIGHT, "Hello World!", NULL, NULL);
if (window == NULL) {
throw new RuntimeException("Failed to create the GLFW window");
}
// Setup a key callback. It will be called every time a key is pressed, repeated or released.
glfwSetKeyCallback(window, keyCallback = new GLFWKeyCallback() {
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) {
glfwSetWindowShouldClose(window, true); // We will detect this in our rendering loop
}
}
});
// Get the resolution of the primary monitor
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
// Center our window
glfwSetWindowPos(
window,
(vidmode.width() - WIDTH) / 2,
(vidmode.height() - HEIGHT) / 2
);
// Make the OpenGL context current
glfwMakeContextCurrent(window);
// Enable v-sync
glfwSwapInterval(1);
// Make the window visible
glfwShowWindow(window);
}
注意glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
提示被禁用,然后在创建窗口后,设置关键回调,绑定opengl上下文,它再次启用glfwShowWindow(window);
文档没有建议做这样的事情,删除这两行似乎没有任何改变。 为什么首先禁用提示?
教程:https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/chapter1/chapter1.html
答案 0 :(得分:3)
它禁用可见性,因此它可以设置大小,更改位置和初始化上下文,而无需客户端见证它。来自GLFW docs中的Window Visablity部分:
最初可以隐藏窗口模式窗口 GLFW_VISIBLE窗口提示。隐藏的Windows完全是隐藏的 在显示之前对用户不可见。如果需要,这可能很有用 在显示之前进一步设置窗口,例如将其移动到 一个特定的位置。
你的程序通过调用
来遵循这个确切的例子glfwSetWindowPos(
window,
(vidmode.width() - WIDTH) / 2,
(vidmode.height() - HEIGHT) / 2
);