From: divverent Date: Wed, 5 Aug 2009 18:13:34 +0000 (+0000) Subject: agl: experimental code to enumerate video modes (untested, uncompiled) X-Git-Tag: xonotic-v0.1.0preview~1535 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=453ba03a61788522c17bd63c159511021c458e8b;p=xonotic%2Fdarkplaces.git agl: experimental code to enumerate video modes (untested, uncompiled) git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9094 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/vid_agl.c b/vid_agl.c index 97c36dbf..b08b10dd 100644 --- a/vid_agl.c +++ b/vid_agl.c @@ -629,7 +629,7 @@ int VID_InitMode(int fullscreen, int *width, int *height, int bpp, int refreshra // TOCHECK: not sure whether or not it's necessary to change the resolution // "by hand", or if aglSetFullscreen does the job anyway - refDisplayMode = CGDisplayBestModeForParametersAndRefreshRate(mainDisplay, bpp, *width, *height, refreshrate, NULL); + refDisplayMode = CGDisplayBestModeForParametersAndRefreshRateWithProperty(mainDisplay, bpp, *width, *height, refreshrate, kCGDisplayModeIsSafeForHardware, NULL); CGDisplaySwitchToMode(mainDisplay, refDisplayMode); DMGetGDeviceByDisplayID((DisplayIDType)mainDisplay, &gdhDisplay, false); @@ -1124,5 +1124,28 @@ void IN_Move (void) size_t VID_ListModes(vid_mode_t *modes, size_t maxcount) { - return 0; // FIXME implement this + CFArrayRef vidmodes = CGDisplayAvailableModes(mainDisplay); + CFDictionaryRef thismode; + unsigned int n = CFArrayGetCount(vidmodes); + unsigned int i; + size_t k; + + k = 0; + for(i = 0; i < n; ++i) + { + thismode = (CFDictionaryRef) CFArrayGetValueAtIndex(vidmodes, i); + if(!GetDictionaryBoolean(thismode, kCGDisplayModeIsSafeForHardware)) + continue; + + if(k >= maxcount) + break; + modes[k].width = GetDictionaryLong(thismode, kCGDisplayWidth); + modes[k].height = GetDictionaryLong(thismode, kCGDisplayHeight); + modes[k].bpp = GetDictionaryLong(thismode, kCGDisplayBitsPerPixel); + modes[k].refreshrate = GetDictionaryLong(thismode, kCGDisplayRefreshRate); + modes[k].pixelheight_num = 1; + modes[k].pixelheight_denom = 1; // OS X doesn't expose this either + ++k; + } + return k; }