c++ - SDL OpenGL 纹理丢失

标签 c++ opengl gcc rendering sdl

我有一个使用 SDL 和 OpenGL 的全功能引擎。我的 OpenGL/SDL 屏幕上有一个带纹理的框 - 但是当我尝试更改视频模式时(例如,使用 F11 切换全屏)纹理丢失(该框只是纯白色),如果我切换回窗口模式该框仍然是白色(纹理图像丢失)。这是否意味着我不能在应用程序中间更改我的视频模式(例如切换全屏),或者这是否意味着我每次这样做都必须重新加载我的 OGL 纹理?

一些额外的注意事项:我在 Windows 7 上使用 CodeBlocks 和 MinGW,我链接的库是:SOIL(一个用于在 OGL 中轻松加载纹理的库 - http://www.lonesock.net/soil.html)、OpenGL32、Glu32 和 SDL。

我有一些图像来演示我的问题(第一个是窗口模式,第二个是当我尝试通过调用 SDL_SetVideoMode(...) 更改为全屏时 - SDL_WM_ToggleFullScreen 没有'工作。

Windowed mode (this is how I want it to look):

Fullscreen mode (the texturing is lost!!!):

最佳答案

I have a textured box on my OpenGL/SDL screen - however when I try to change the video mode (e.g. toggle fullscreen with F11) the texturing is lost (the box is just plain white), if I toggle back to windowed mode the box is still white (with the textured image lost). Does this mean I cannot change my video mode in the middle of the application (e.g. toggle fullscreen) or does it mean I have to reload my OGL textures every time I do so?

这在很大程度上取决于所使用的框架如何实现视频模式更改。

一般来说,当删除一个 OpenGL 上下文时,它的所有关联数据都会丢失,除了如果有另一个 OpenGL 上下文已经建立了“共享”。这可用于在上下文重建之间保持所有上传的数据持久。但是,单纯的视频模式更改通常不需要上下文重建,通常也不需要窗口重建。

但是,您使用的框架 (SDL) 会在更改视频模式时完全清理窗口和上下文,从而使您失去加载的资源。 SDL 的不稳定开发版本具有更好的 OpenGL 支持,允许在不中断上下文的情况下更改视频模式。

关于c++ - SDL OpenGL 纹理丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006533/

相关文章:

c++ - 在构造函数中分配数组时出错

c++ - 为什么我的 4 线程实现不比单线程实现快?

c++ - 如何销毁一个数组

c++ - 如何使用控制台窗口中的输入顶点在 glut 中绘制多边形?

c++ - OpenGL:绘制多边形时,如果第一个顶点位于屏幕空间之外怎么办(三角扇)

c - gcov 警告 : merge mismatch for summaries

C程序在Netbeans中编译,但在cmd中用gcc无法编译

c++ - 禁用函数模板特化或使用constexpr变量重载

c++ - 使用另一个应用程序打开文件

c++ - 翻译过程中 MVP 行为异常