Właśnie przeportowałem moją grę w C++ na OS X i przy pierwszym uruchomieniu otrzymuję następujący wyjątek podczas próby wywołania SDL_SetVideoMode
.SDL Video Init powoduje wyjątek na Mac OS X 10.8
28.09.2012 15: 01: 05,437 SCRAsteroids [28595: 707] * Terminatory aplikacji ze względu nieprzechwyconego wyjątku 'NSInternalInconsistencyException' powodu: 'błędu (1000) tworząc CGSWindow na linii 259' * pierwszym rzucie połączenie stosu: ( 0 CoreFoundation 0x00007fff8b53b716 __exceptionPreprocess + 198 1 libobjc.A.dylib 0x00007fff90e30470 objc_exception_throw + 43 2 CoreFoundation 0x00007fff8b53b4ec + [NSException przebicie: Format:] + 204 3 zestawu klas AppKit 0x00007fff8a26a579 _NSCreateWindowWithOpaqueShape2 + 655 4 zestawu klas AppKit 0x00007fff8a268d70 - [ NSWindow _commonAwake] + 2002 5 zestawu klas AppKit 0x00007fff8a2277e2 - [NSWindow _commonInitFrame: styleMask: Podłoże: Opóźnij:] + 1763 6 zestaw klas AppKit 0x00007fff8a22692f - [NSWindow _initContent: styleMask: Podłoże: Opóźnij: contentView:] + 1568 7 zestaw klas AppKit 0x00007fff8a2262ff - [NSWindow initWithContentRect: styleMask: podkład : Opóźnij:] + 45 8 libSDL-1.2.0.dylib 0x0000000107c228f6 - [SDL_QuartzWindow initWithContentRect: styleMask: podłoże: Opóźnij:] + 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: kończy zwany wyrzucanie wyjątek Abort pułapkę 6
Moja Init wygląda następująco:
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);
Robi się do tej ostatniej rozmowy SDL i zgłasza wyjątek powyżej. Próbowałem go zarówno w trybie pełnoekranowym, jak i zmieniającym rozmiar okna, to samo.
Buduję swoją starą szkołę w aplikacji, w wierszu poleceń, w przeciwieństwie do Xcode.
Czy Twój główny plik zawierać SDL.h? Jeśli tak, nazwa twojej głównej() jest zmieniana! – ScrollerBlaster