gpt4 book ai didi

c++ - SDL Video Init 在 Mac OS X 10.8 上导致异常

转载 作者:可可西里 更新时间:2023-11-01 18:29:37 25 4
gpt4 key购买 nike

我刚刚将我的 C++ 游戏移植到 OS X,它第一次运行时,我在尝试调用 SDL_SetVideoMode 时遇到以下异常。

2012-09-28 15:01:05.437 SCRAsteroids[28595:707] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“错误 (1000) 在第 259 行创建 CGSWindow”* 首先抛出调用栈:( 0 CoreFoundation 0x00007fff8b53b716 __exceptionPreprocess + 198 1 libobjc.A.dylib 0x00007fff90e30470 objc_exception_throw + 43 2 CoreFoundation 0x00007fff8b53b4ec +[NSException raise:format:] + 204 3 AppKit 0x00007fff8a26a579 _NSCreateWindowWithOpaqueShape2 + 655 4 AppKit 0x00007fff8a268d70 -[NSWindow _commonAwake] + 2002 5 AppKit 0x00007fff8a2277e2 -[NSWindow _commonInitFrame:styleMask:backing:defer:] + 1763 6 AppKit 0x00007fff8a22692f -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 1568 7 AppKit 0x00007fff8a2262ff -[NSWindow initWithContentRect:styleMask:backing:defer:] + 45 8 libSDL-1.2.0.dylib 0x0000000107c228f6 -[SDL_QuartzWindow initWithContentRect:styleMask:backing:defer:] + 294 9 libSDL-1.2.0.dylib 0x0000000107c20505 QZ_SetVideoMode + 2837 10 libSDL-1.2.0.dylib 0x0000000107c17af5 SDL_SetVideoMode + 917 11 SCRAsteroids 0x0000000107be60fb _ZN11SDLGraphics4initEP6IWorldii + 291)libc++abi.dylib:终止调用抛出异常中止陷阱:6

我的初始化代码如下所示:

if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
return false;

const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
if (!videoInfo) {
fprintf(stderr, "Video query failed: %s\n",
SDL_GetError());
return false;
}


/* the flags to pass to SDL_SetVideoMode */
videoFlags = SDL_OPENGL; /* Enable OpenGL in SDL */
videoFlags |= SDL_GL_DOUBLEBUFFER; /* Enable double buffering */
videoFlags |= SDL_HWPALETTE; /* Store the palette in hardware */

/* This checks to see if surfaces can be stored in memory */
if (videoInfo->hw_available)
videoFlags |= SDL_HWSURFACE;
else
videoFlags |= SDL_SWSURFACE;

if (w == 0) {
widthViewport = videoInfo->current_w;
heightViewport = videoInfo->current_h;
cout << "Will use full screen resolution of ";
videoFlags |= SDL_FULLSCREEN;
} else {
cout << "Will use full user supplied resolution of ";
widthViewport = w;
heightViewport = h;
videoFlags |= SDL_RESIZABLE; /* Enable window resizing */
}

cout << widthViewport << "x" << heightViewport << "\n";
/* This checks if hardware blits can be done */
if (videoInfo->blit_hw)
videoFlags |= SDL_HWACCEL;

/* Sets up OpenGL double buffering */
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
/* get a SDL surface */
surface = SDL_SetVideoMode(widthViewport, heightViewport,
SCREEN_BPP, videoFlags);

它进入最后一个 SDL 调用并抛出上面的异常。我在全屏和可调整大小的窗口模式下都试过了,同样的事情。

我在命令行上构建我的应用程序,而不是使用 Xcode。

最佳答案

SDL_main 再次成为罪魁祸首。我的 C++ main 例程在一个不包含 SDL.h 的文件中,因此它没有被重新定义为 SDL_main。包含 SDL 的代码位于可重用的静态库中,看不到任何主例程。我手动将我的函数名称更改为 SDL_main,这意味着 SDL 提供了基本的主例程。我不喜欢这样做,但目前,在适用于 Mac 的 SDL 1.2.15 上,这是必要的。

在 Windows 上,相同的新代码会导致链接器冲突。这是一个新问题。

关于c++ - SDL Video Init 在 Mac OS X 10.8 上导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641755/

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