On Mon, 04 May 2009 16:09:24 +0200
Peter Rosin <p...@lysator.liu.se> wrote:

> Den 2009-05-04 13:49 skrev Pierre Ossman:
>  > +The server changes the desktop size by sending a pseudo-rectangle with
>  > +the *DesktopSize* pseudo-encoding. The update containing the
>  > +pseudo-rectangle must not contain any rectangles that change the
>  > +framebuffer data.
> 
> I think "must not" is out of line in this paragraph, you even describe
> servers not doing it that way in the ending notes... The correct thing
> to say is "should not" IMHO.
> 

Perhaps. I could only find a single server that implements it this way
though, so I was hoping a strong wording would avoid any more. :)

>  > +Also note that some servers send framebuffer data changes before the
>  > +*DesktopSize* pseudo-rectangle. A client that wishes to be compatible
>  > +with these servers must either retain the framebuffer contents as the
>  > +dimensions change, or make sure that the next
>  > +*FrameBufferUpdateRequest* has *incremental* set to zero.
> 
> Are you really certain about how you should interpret the fb-changing
> rects leading up to the DesktopSize rect? There are bound to exist
> servers that in some cases push out some pending totally superfluous
> "dirty" rects before a final DesktopSize rect in an update. Heck, if you
> combine with LastRect, the server might not even be aware of the fact
> that it is about to send a DesktopSize rect at the end of the update
> when it starts to generate it.

I suppose there is some value to allow harmless noise before the
DesktopSize, but there is a risk that we'll see more people implement
it like RealVNC. See below...

> 
> In my reading of the spec, I have always thought that those initial
> rects where supposed to be applied before the change in desktop size,
> but maybe that's just me. I wouldn't bet on that though.
> 

That would make sense, wouldn't it. :)

Unfortunately that's not how RealVNC is implemented. It will send a
bunch of updates followed by the DesktopSize, when those updates
actually happened after the server resized the framebuffer.

This is incompatible with all clients derived from Tight (which is the
original implementation of this extension AFAICT) which throw away the
framebuffer upon seeing a DesktopSize.

> Buttom line is, the only sensible thing for a client to do in response
> to a DesktopSize rect is to always make a non-incremental FBU request
> in order to not rely on some server-specific quirk. It can't know if
> the server has retained the fb or not, so it has to make the non-incr
> FBU request to get to a known state.

Only UltraVNC sends a non-incr FUR. RealVNC, Tight and gtk-vnc all
continue to send incremental FUR (from what I can tell from my reading
of the code at least, feel free to object if this is wrong).

Unless we want a convoluted specification where the requirements on the
server and client do not match up in a symmetrical manner, we need to
select on one model and declare the other one a buggy exception. There
is the RealVNC model where the client keeps the framebuffer, or the
Tight model where the client throws it away. The latter is the simpler
and more common one.

Rgds
-- 
Pierre Ossman            OpenSource-based Thin Client Technology
System Developer         Telephone: +46-13-21 46 00
Cendio AB                Web: http://www.cendio.com

Attachment: signature.asc
Description: PGP signature

------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations 
Conference from O'Reilly Media. Velocity features a full day of 
expert-led, hands-on workshops and two days of sessions from industry 
leaders in dedicated Performance & Operations tracks. Use code vel09scf 
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
tigervnc-rfbproto mailing list
tigervnc-rfbproto@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-rfbproto

Reply via email to