hi all,
I want to toss an idea about the depth switching on the fly.

The dynamic depth changing is one of the
few basic things that are impossible in xf86.
In fact DGA2 has such ability, but it's limited
for it's own use only. The new randr extension
in it's full variant can do it but as of now
it's not implemented and it seems quite unliky
to be implemented ever because from it's design
follows that it's implementation would be
extremely hard thing to do, and naturally noone
feels motivated enough to take up the task.

But such functionality is really important if we
want xf86 to be considered an viable gaming platform.
For example it would be a great benefit for the Wine
in it's efforts in emulating windows for games.
Some argue that the need of depth switching has
been somewhat outweighted by the fact that these
days the memory is cheap and noone cares if the
framebuffer takes twice as much memory. Of course
the memory usage itself does not matter, but what
really matters is the speed. For example quake3
does almost twice as many frames per second if
run in 16-bit mode than in 32-bit mode. And this
cannot be outweighted whatever the memory price is.
Even in nowdays many games prefer low-depth modes
(sometimes even 8-bit) because of the lower bandwidth
requirement, which is critical.

Now my idea. Since the main potential users of such
functionality are the games, and they are mainly
full-screen apps it would be relatively easy
but still very usefull if we have something in between
the DGA2 and randr - some kind of fullscreen (i.e. only
single window visible - no need for software depth emulation
for the rest of the windows, etc.) but using real x window so
that one can use the standard X11 apis available for the normal
windows (for example use GLX/OpenGL with it)
For example the api function could be something like:

Window X<extension-name>CreateFullscreenWindow(
        Display *dpy,
        X<extension-name>ModeDescriptor *vidmode,
        int depth,
        Visual *visual,
        unsigned long valuemask,
        XSetWindowAttributes *attribs
);

The function creates a special fullscreen window.
When such window get mapped (XMapWindow) it automatically
switches the video mode to vidmode and changes the
framebuffer depth to the window's depth (which may differ
from the root window's depth). Such windows always occupy
the entire screen and may not be obscured by other windows
(and probably have their override_redirect attribute always set).
When the window is unmapped it switches back the video mode
and the frame buffer depth to their normal states.

The video mode description could probably be something like
in the XF86VidMode extension.

Lucho


__________________________________
Do you Yahoo!?
Yahoo! Small Business $15K Web Design Giveaway 
http://promotions.yahoo.com/design_giveaway/
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to