java - 绑定(bind) OpenGL 上下文时虚假 GLFW_VISIBILE 提示的目的

标签 java opengl lwjgl glfw

我目前正在学习具有创建窗口的初始化代码的教程

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); 提示被禁用,然后在创建窗口、设置键回调、绑定(bind) opengl 上下文后,它再次启用 glfwShowWindow(window);

文档没有建议做这样的事情,删除这两行似乎也没有改变任何东西。 为什么首先禁用提示

教程:https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/chapter1/chapter1.html

最佳答案

它禁用可见性,因此它可以设置大小、更改位置和初始化上下文,而无需客户端见证。来自 GLFW docs 中的窗口可见性部分:

Windowed mode windows can be created initially hidden with the GLFW_VISIBLE window hint. Windows created hidden are completely invisible to the user until shown. This can be useful if you need to set up your window further before showing it, for example moving it to a specific location.

你的程序通过调用

glfwSetWindowPos(
            window,
            (vidmode.width() - WIDTH) / 2,
            (vidmode.height() - HEIGHT) / 2
    );

关于java - 绑定(bind) OpenGL 上下文时虚假 GLFW_VISIBILE 提示的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898316/

相关文章:

opengl - 加载 GL_RGB 纹理后出现奇怪的颜色偏移

c++ - OpenGL 代码在一台计算机上运行缓慢(但在其他计算机上则不然)

java - 导入新包的类名冲突(java)

java - Spring 3 : map page. html 到 page.jsp

java - 我什么时候应该关闭从 Tapestry 中的 HibernateSessionManager 获取的 session ?

java.lang.IllegalStateException : You need to use a Theme. AppCompat 主题(或后代)与此 Activity

OpenGL 3D 纹理坐标

java - 添加aspectJ语言来定义连接点

java - 使用 LWJGL 设置光标

java - gluLookAt 第一人称视角