This is the mail archive of the cygwin-xfree@cygwin.com mailing list for the Cygwin XFree86 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: XWin Architecture


Hi,

Mostly curious - I fired off the email a bit quickly, I found some of the answers in the contributors guide later on, rtfm would've been a fair reply.

I've been following the Y-windows mailing list where they talked about about an X compatibility layer, I was just considering how this would be done. I doubt I'd have the time to implement it. Since I use cygwin/x a lot seemed like a good template.

After a bit of hunting I found the miext/rootless code, I've been struggling to understand the Objective C code using it though. I'd be curious to read Torrey's draft on how it works (obviously I wouldn't redistribute it).

jeremy

Harold L Hunt II wrote:
Jeremy,

Jeremy Wilkins wrote:

Hi,

I'm curious about how the cygwin XWin server works?


Curious, or interested in helping? If just curious, then please wait a few days or dig through the archives... I have described it in detail a few times. Perhaps the following answers will be all you need.

My understanding is it is similar to an X Server on linux but instead of rendering to the graphics card framebuffer, it is rendered to an offscreen surface and then bitblt'd to an on screen pixmap using direct draw, or GDI if dd is unavailable.


That is correct.

Does the MacOS X Xserver work in the same way?


Yes.

Does this use a lot of existing code, eg from either vnc or xvfb servers?


Yes, but not from vnc or xvfb. There is a generic layer written by Keith Packard called "fb" that draws to framebuffers using the cpu. This "fb" layer replaced the old "cfb" and "mfb" layers that did the same thing but were crufty and designed for the cpu being the constraint (think 1980's) rather than the buses to and from memory and other peripherals being the constraint (think today).

How does the rootless stuff work, does this just figure out where the top level windows are and only bitblt those but into separate surfaces/windows.


Well, that is sort of a dangerous question. There is the original "rootless" mode that Kensuke wrote a while back. That mode just keeps track of the top-level X11 windows and clips transfers to our single Win32 window to the region that is occupied by X11 windows, thus preventing the root window from being drawn. You will note that all of the X11 windows appear to float in the same plane when you use -rootless in the current versions of XWin.exe.

There is also multi-window, but that is a little more complex in that it has an internal window manager and it creates a Win32 window for each top-level X11 window and provides management of those windows. This one does bitblt to particular Win32 windows, whereas the aforementioned rootless mode only had a single Win32 window.

I've read somewhere that there is some generic rootless code in the xc tree, where abouts is this?


That is in xc/programs/Xserver/miext/rootless. Kensuke's latest work has centered around getting this to work. He has a new window manager written that is more complete than the current multi-window window manager. However, there are still significant bugs in this implementation and we are not even building releases from the source tree with that code in it yet.

Torrey Lyons just sent me a draft description of how miext/rootless works. Hopefully he will finish it soon so I can point you to it. It really is an interesting layer and it allows optimization of some simple cases that will have quite a large performance impact.

Harold




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]