[SDL] detecting current screen resolution (again!)

Jon Colverson sdl at vcxz.co.uk
Tue Mar 22 10:20:37 PST 2005


Marco Tarini wrote:
> I'm almost ready to distribute my game, and other people's beta-playtests
> confirmed what I suspected: I NEED to know the current screen resolution.

<snip>completely agreeable rationale</snip>

> Now, I know, for having tryied about every possible way, that there is no way in
> SDL to detect the current screen resolution. This leaves two options:
> 
> (A) wait for the next SDL version to let me do it.
> 
> or 
> 
> (B) add some platform specific part in my code (a-la "#ifdef _WIN32...") and
> implement it for just a couple of cases - yes that would limit the portability
> of the code. 
> 
> ----------------------------------
> about (A): can anybody tell me if it is likely to happen? and if so, when? (I
> only recently strted using SDL and have no idea about new-version frequency);
> also can I do anything to help?
> 
> Let me also suggest the simplest way (from the point of view of the
> library-user, not the SDL-dev) to have that: make
> SDL_SetVideoMode(sx,sx,bpp,flags), when
> - flags includes SDL_FULLSCREEN and
> - (sx,sy,bpp)==(0,0,0) 
> set the fullscreen mode at the _current_ screen bpp, size x, and y. 
> 
> Also, VideoInfo would return screen res as well. BTW isn't it peculiar that it
> currently doesn't? I wonder if it is that nobody though that it would be useful,
> or if there is problem I can't see implementing it in some system.

I wrote a patch to add a function to get the current desktop resolution. 
Unfortunately, it's only implemented for X11 and Windows. There was a 
thread about it on this list which starts here:

http://www.devolution.com/pipermail/sdl/2005-January/thread.html#67010
and continues in February:
http://www.devolution.com/pipermail/sdl/2005-February/thread.html#67335

To summarise the thread:

It was widely agreed that this would be useful functionality. Some 
people didn't like my API (int SDL_GetDesktopMode(int *width, int 
*height)), and it doesn't allow for complete binary compatibility 
(programs that use the new function can't run with earlier SDL 1.2 
libs). Stephane Marchesin suggested adding the information to the 
SDL_VideoInfo structure. This can't be done without breaking binary 
compatibility, so will have to wait for SDL 1.3 (I don't know if there's 
a schedule for that yet). Simon Roby suggested the same API as you did 
above. I was not wild about it, because it makes it harder/more 
error-prone to specify a fallback default resolution, which is 
particularly important when the functionality isn't implemented for all 
the SDL platforms/video drivers.

Sam Lantinga (lead developer of SDL) chimed in that he likes the idea of 
using 0,0 in SDL_SetVideoMode to specify the desktop resolution, which 
can be done now, in SDL 1.2. He also likes the idea of adding the 
desktop resolution to SDL_VideoInfo at a later date.

So, it seems like it would be sensible for me to rewrite my patch to use 
the 0,0 API, make sure it's documented well to minimise problems, and 
accept a little ugliness in our application code which can be removed 
when SDL 1.3 is available. I'll get to work on it, since Ryan just made 
a call for patches, and that would seem like a good chance of getting my 
code commited and in the next release.

> As for (B) - and now I'm going off topic in this board I aplogize - anybody
> coded it already? 

If you're packaging your own build of SDL with your game, feel free to 
use my patch. If not, you could use the code from it for X11 and Windows 
in your game.

-- 
Jon





More information about the SDL mailing list