gpt4 book ai didi

c++ - 使用 openGL 在 SDL2 中全屏显示一个窗口

转载 作者:太空狗 更新时间:2023-10-29 23:16:28 24 4
gpt4 key购买 nike

我的程序在编译着色器、加载纹理等时从加载窗口开始。然后我希望能够启动全屏应用程序并使用这些资源。我的理解是前后openGL上下文一定是一样的。我为此尝试了两种方法:首先,我尝试制作第二个全屏窗口,并在此窗口上使用 SDL_GL_makecurrent 命令来“传输”上下文(找不到我在哪里阅读有关此方法的信息),其次尝试全屏显示加载窗口。这两种方法都会导致加载屏幕移动到屏幕的左上角。但是,opengl 命令不再能在全屏模式下正常运行,包括清除缓冲区,这意味着该窗口包含我的桌面/后台应用程序的内容。

有没有正确的方法来做到这一点?或者这是 sdl/opengl 驱动程序中的一个奇怪错误?

全屏原始窗口的代码:

//opengl commands work fine up to here
//now to fullscreen

SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_SetWindowSize(window, 1366, 768); //tried this on either side of line above and without either line

glViewport(0, 0, 1366, 768); //update viewport

glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);

//window should be whited, other draw commands tried and all fail or distort

SDL_GL_SwapWindow(window);

创建一个新窗口并使用之前的上下文:

//Fine up to here

window2 = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1366, 768, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_SHOWN);

SDL_GL_MakeCurrent(window2, glContext); //created with SDL_GL_CreateContext(oldwindow);

//draw commands dont work

PS:运行ubuntu

更新: 在第二个代码中,在新窗口中重用上下文,它在失败时返回错误消息“无效窗口”,这是大多数情况,但并非总是如此。当它失败时,屏幕最终会完全损坏(黑色带有奇怪的白色方 block 和图案),结束程序不会清除屏幕(尽管屏幕截图非常好?),但可以通过 ctrl< 恢复/kbd>+f1 到终端然后 ctrl+f7 返回

最佳答案

我真的不知道这是不是一个错误。我在使用 sdl2 和 opengl 时遇到了同样的问题。

  • 创建一个常规窗口
  • 附加到 opengl 上下文。
  • 全屏
  • 轰隆隆。黑屏和崩溃的窗口。

我只在 ubuntu 中注意到这个问题。

经过一些测试,我找到了一种快速修复它的方法:

Uint32 flags = 0; 
flags |= SDL_WINDOW_RESIZABLE;
//bla bla bla your tags
flags |= SDL_WINDOW_OPENGL;
m_window = SDL_CreateWindow( "hello gl", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_screen.x, m_screen.y,flags);
m_glContext = SDL_GL_CreateContext(m_window);
//Set right the way the screen to fullscrene false
SDL_SetWindowFullscreen(m_window, SDL_FALSE);

现在全屏似乎没问题了。

关于c++ - 使用 openGL 在 SDL2 中全屏显示一个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840156/

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