1

我目前正在使用 C++、OpenGL 和 GLFW 编写游戏。我想允许用户更改游戏用于抗锯齿的样本数量,因为使用旧系统的用户可能出于性能原因希望完全禁用抗锯齿。

问题是这GLFW_SAMPLES是一个窗口创建提示,这意味着它是在创建窗口时应用的:

// Use 4 samples for antialiasing
glfwWindowHint(GLFW_SAMPLES, 4);

// The hint above is applied to the window that's created below
GLFWwindow* myWindow = glfwCreateWindow(widthInPix, heightInPix, title.c_str(), glfwGetPrimaryMonitor(), nullptr);

// Disable antialiasing
// This hint is not applied to the previously created window
glfwWindowHint(GLFW_SAMPLES, 4);

GLFW 文档不包含有关如何更改现有窗口的样本数的任何信息。过去有人遇到过这个问题吗?

4

1 回答 1

4

不,您必须创建一个新窗口并销毁旧窗口。最好共享两个上下文,这样非容器对象就不会在洗牌中丢失。

或者,您可以创建多重采样纹理或渲染缓冲区,渲染到 FBO,然后将渲染数据 blit 到非多重采样窗口。这样,您就可以完全控制样本数量,并且可以在闲暇时轻松销毁和重新创建此类图像。

于 2020-01-13T00:21:32.350 回答