我正在使用SDL1.2在我的openGL框架中处理窗口管理。
有没有可能在程序运行时不调用SDL_Quit()就销毁一个窗口(表面)?
背景:我的框架实际上只是多媒体环境中的一个gfx组件(可能有许多这样的gfx组件)。我不能对其他组件做什么做任何假设(例如,它们是否使用SDL)。我担心调用SDL_Quit()会对其他组件产生副作用。
目前我正在做一些类似这样的事情:
SDL_Surface m_surface=0;
bool create_window() {
int videoFlags = SDL_OPENGL;
if(m_surface) {
pritnf("window already made\n");
return false;
}
if(SDL_Init(SDL_INIT_VIDEO) < 0 ) {
pritnf("unable to initialize SDLn");
return false;
}
m_surface = SDL_SetVideoMode(WIDTH, HEIGHT, BPP, videoFlags);
return(m_surface!=0);
}
bool destroy_window() {
if(m_surface) {
SDL_Quit();
}
m_surface=0;
}在应用程序的生命周期中,create_window()和destroy_window()都应该被多次调用。但是,多次调用SDL_Init()和SDL_Quit()感觉很奇怪。
顺便说一句,我现在正在使用linux,但我的目标是跨平台(至少linux,osx,w32)
发布于 2012-08-21 17:30:02
我认为这在SDL1.2中是不可能的,屏幕表面有一个特殊的状态,只有SDL_Quit()可以删除它。你可以尝试使用SDL_QuitSubSystem()关闭视频部分,然后使用SDL_InitSubSystem()恢复它,但我不确定它是否可以工作(我现在不能测试它)。
另一方面,使用带有SDL_CreateWindow()和SDL_DestroyWindow()的SDL2.0看起来很容易。
无论采用哪种方法,您都需要将初始化(SDL_Init())与窗口创建分开,并将清理(SDL_Quit())与窗口销毁分开。
https://stackoverflow.com/questions/12050234
复制相似问题