将GLFW窗口设置为不可调整大小

Sim*_*mba 9 opengl glfw

我有一个GLFW3窗口,我试图从可调整大小更改为不可调整大小.

我尝试在创建窗口后更改Window Hint,但这没有做任何事情,因为提示仅影响要创建的窗口.

我试过的:

glfwWindowHint(GLFW_RESIZABLE, GL_FALSE)
Run Code Online (Sandbox Code Playgroud)

这可能吗?我认为这样做的一种方法是使用onResize函数,在设置不可调整大小后将窗口大小更改回当前大小.这似乎非常hacky.

Cir*_*四事件 10

您的方法适用于GLFW 3.1.1-1.在Ubuntu 15.10上测试,代码如下:

#include <GLFW/glfw3.h>

int main(void) {
    GLFWwindow* window;
    if (!glfwInit())
        return -1;
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    window = glfwCreateWindow(640, 480, __FILE__, NULL, NULL);
    if (!window) {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • Downvoters,谢谢你告诉我为什么这个答案是错误的,所以我可以学习和改进信息. (2认同)

der*_*ass 6

在创建窗口后,GLFW当前没有用于更改该状态的API.

当您想使用GLFW时,我看到两个选项:

  1. 你已经有的解决方法.
  2. 切换该状态时创建一个新窗口.
  3. 使用GLFW本机访问来获取真实窗口句柄并实现每个平台的功能(您关心).

所有变种对我来说似乎都不太吸引人.选项2特别糟糕,因为GL上下文与GLFW中的窗口关联的方式,应该可以使用额外的(不可见的)窗口和共享的GL上下文,但它会很难看.

备选方案3的优点是,一旦为所有相关平台实施,它应该完美无缺地运行.由于GLFW是开源的,这也启用了选项3b):直接在GLFW中实现它并扩展API.您甚至可以将其集成到官方GLFW版本中.