> So, when VNC is started using -cc 3, when Apollo is started, the
> performance goes to pot. The VNC viewer cursor gets WELL ahead of the X
> cursor.
>
> When I quit from Apollo, the performance gets better.
>
I suspect I know what the problem is.
Going from 8-bit PseudoColor server to a TrueColor viewer is hard to do
efficiently, because every time the colormap is changed, potentially the whole
screen is affected. Xvnc "copes" with this by simply sending a complete update
to the viewer. This works OK for most applications which simply allocate a few
colours once off, but not for an application like this Apollo which actually
changes the colormap constantly while it is running.
There are a few things I can suggest (other than finding a version of Apollo
which doesn't need a PseudoColor server), but they all involve modifying VNC:
* If you're lucky, then this Apollo program won't really be changing pixel
values which are on the screen, in which case Xvnc sending a full update is
unnecessary. You can try hacking this bit of Xvnc out by removing lines 399
to 403 of Xvnc/programs/Xserver/hw/vnc/translate.c:
REGION_UNINIT(pScreen,&cl->modifiedRegion);
box.x1 = box.y1 = 0;
box.x2 = rfbScreen.width;
box.y2 = rfbScreen.height;
REGION_INIT(pScreen,&cl->modifiedRegion,&box,0);
and recompiling. Even if it doesn't work fully, the worst that should happen
is some wrong colours on the viewer. It should certainly stop the real
performance problem.
* Run the viewer using its own colormap. This can be done with the X VNC
viewer on a PseudoColor display with the -owncmap option, but I don't think
it can be done with the Windows viewer as is. It might be possible to modify
the Windows viewer to tell the VNC server that it uses a colormap and then do
the translation itself (in fact I suspect the Windows API might even do the
translation for you). Not being a Windows programmer I don't know how hard
this would be.
* Ideally Xvnc could be made "smarter" about working out how much of the screen
is affected by a colormap change, but that's really quite hard (you'd need a
kind of "reverse index" of the framebuffer, telling you for each pixel value
whether that pixel value occurs in particular areas of the screen).
Hope this helps,
Cheers
Tristan
---------------------------------------------------------------------------
Tristan Richardson [EMAIL PROTECTED] www.uk.research.att.com/~tjr
---------------------------------------------------------------------------
AT&T Laboratories Cambridge, 24a Trumpington Street, Cambridge, CB2 1QA, UK
Tel: +44 1223 343000 Fax: +44 1223 313542 www.uk.research.att.com
---------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, send a message with the line: unsubscribe vnc-list
to [EMAIL PROTECTED]
See also: http://www.uk.research.att.com/vnc/intouch.html
---------------------------------------------------------------------