gpt4 book ai didi

c++ - 有没有办法在不破坏窗口/上下文的情况下切换全屏?

转载 作者:行者123 更新时间:2023-11-30 01:37:05 25 4
gpt4 key购买 nike

我目前有一个使用 OGL 4.5 和 GLFW 3 的游戏。

我正在尝试创建一个允许在全屏和窗口模式之间切换的功能。然而,为了实现这一点,我似乎必须销毁当前窗口,然后在同一指针中创建一个新窗口(我在 GLFW 文档中将其红色)。

虽然这有效并且我可以在两种模式之间进行交换,但一旦交换发生,它会导致引擎的一些关键部分停止绘制。

因此,我想知道是否有某种方法可以启用/禁用全屏而不破坏窗口并创建新窗口。

这是函数的代码:

void TMooseEngine::toggleFullscreen()
{
_fullscreen = !_fullscreen;

glfwDestroyWindow(window);
delete _shader;
delete _skybox;
//delete _particulas;




glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

if(_fullscreen){ //change to fullscreen
window = glfwCreateWindow(_width, _height, "Fate Warriors", glfwGetPrimaryMonitor(), NULL);
glfwMakeContextCurrent(window);
glViewport(0,0,_width,_height);
//culling
glEnable(GL_DEPTH_TEST);
glViewport(0,0,_width,_height);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);
_shader = new Shader();
_skybox = new Skybox();

initUI();
}

else{ //change to windowed
window = glfwCreateWindow(_width, _height, "Fate Warriors", NULL, NULL);
glfwMakeContextCurrent(window);
glViewport(0,0,_width,_height);
//culling
glEnable(GL_DEPTH_TEST);
glViewport(0,0,_width,_height);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);
_shader = new Shader();
_skybox = new Skybox();

initUI();
}
}

最佳答案

根据 GLFW 的文档,您可以使用函数 glfwSetWindowMonitor() 来切换现有窗口的全屏模式,而无需销毁并重新创建它。

以下命令将根据 _fullscreen 变量更改全屏状态:

glfwSetWindowMonitor(window, _fullscreen ? glfwGetPrimaryMonitor() : NULL, 0, 0, _width, _height, GLFW_DONT_CARE);

关于c++ - 有没有办法在不破坏窗口/上下文的情况下切换全屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50389790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com