当前位置: 首页 > 知识库问答 >
问题:

绑定OpenGL上下文时使用假GLFW _ VISIBILE提示的目的

呼延俊风
2023-03-14

我目前正在遵循一个教程,其中有创建窗口的初始化代码

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);
}

注意< code > glfwWindowHint(GLFW _ VISIBLE,GL _ FALSE);提示被禁用,那么在创建窗口、设置按键回调、绑定opengl上下文之后,它又被启用< code > glfwShowWindow(window);

留档不建议这样做,删除两行似乎不会改变任何事情。为什么首先禁用提示?

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

共有1个答案

羿昊英
2023-03-14

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

窗口模式窗口最初可以使用GLFW_VISIBLE窗口提示创建隐藏。创建隐藏的窗口在显示之前对用户完全不可见。如果您需要在显示窗口之前进一步设置窗口,例如将其移动到特定位置,这可能会很有用。

你的程序遵循这个确切的例子

glfwSetWindowPos(
            window,
            (vidmode.width() - WIDTH) / 2,
            (vidmode.height() - HEIGHT) / 2
    );
 类似资料:
  • 我正试图在Android上创建一个360视频球体(就像纸板上的那个)。我在OpenGL ES1中绘制了一个球体,并用一张照片完成了这项工作。0,然后将纹理附加到它。之后,我可以使用传感器值来旋转球体。 然而,我不知道如何将图片更改为视频。我尝试过使用texSubImage2D()逐帧渲染,但速度非常慢。我的视频可能会达到4k左右的密度,因为我需要一个好的质量,即使只显示了一小部分。 我读过一些关于

  • 如果我使用SDL,我会有任何已知的限制吗?(我经常读到SDL有点僵硬)

  • 我发现需要绑定到的,设置如下: 在设计时。但是,我需要从具有不同数据上下文的子控件绑定到它: 由于 是为 设置的,因此我的 的数据设置为收款人集合中的各个对象。我的视图有一个属性,我需要从转换器中的引用该属性来确定项目的可见性。 我可以根据对象的属性设置可见性,如下所示: 但是我真正需要绑定到的是的的属性。有没有办法从子控件中获取该上下文?我使用的是WinRT,所以我没有绑定源的好处。 编辑 正如

  • 我目前正在考虑处理OpenGL上下文重新创建。 我使用GLFW库创建OpenGL上下文,GL3W用于扩展加载器。 我的问题很简单:在重建上下文时,我是否应该考虑再次调用gl3wInit()?

  • 基本上,我有一个带有DataTemplate选择器的ListView,它基于ListView项使用特定的DataTemplate。 现在,在DataTemplate中,我有一个带有命令的按钮,应该绑定到父视图(或ListView)本身的ViewModel上。 注意,我只想绑定按钮的Command属性,因为文本和其他属性需要绑定到按钮的当前绑定上下文。 DataTemplate的BindingCon

  • 问题内容: 我正在使用一个有趣的世界编辑器,并使用Java和JLWGL。到目前为止一切正常。现在,我尝试创建一个窗口,可以在其中添加要使用的地形或新模型。问题是,当我尝试从主界面创建地形并创建并显示该地形时,但是当我尝试通过按钮事件监听器调用该地形时,出现错误: 在当前线程中未找到OpenGL上下文。 我基本上知道为什么会得到错误。我用来获取输入并单击按钮的框架没有opengl上下文。 现在的问题