<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><br><br><div>> Date: Wed, 25 Nov 2015 16:18:52 +0000<br>> Subject: Re: Process for implementing a double buffer on Wayland<br>> From: daniel@fooishbar.org<br>> To: mikeyj001@hotmail.com<br>> CC: wayland-devel@lists.freedesktop.org<br>> <br>> Hi Mike,<br>> <br>> On 25 November 2015 at 16:06, Mike Johnson <mikeyj001@hotmail.com> wrote:<br>> > I've created 2 buffers of the same size (800x600 pixels).  So I want the<br>> > input buffer to get filled off-screen, while the output buffer will show the<br>> > content on-screen.<br>> ><br>> > First of all what sort of content could be used to illustrate this<br>> > technique, and secondly, what mechanisms are available to:<br>> ><br>> > a) Notify that the input buffer is full<br>> > b) Copy the content to the output buffer so that it shows on-screen<br>> <br>> It's quite simple. wl_surface_attach(surf, buf) +<br>> wl_surface_commit(surf) will display 'buf' for that surface. At that<br>> point, the compositor owns that buffer, so you should stop drawing on<br>> it. When the compositor has finished with a buffer, it will send you a<br>> wl_buffer.release event. You can sync your paint clock to the<br>> compositor's repaint loop with wl_surface_frame.<br>> <br>> So, the normal workflow is:<br>>   - create surface S, buffer A, buffer B<br>>   - draw first frame into buffer A<br>>   - call wl_surface_frame(S) + wl_surface_attach(S, A) +<br>> wl_surface_commit(S) + wl_display_flush()<br>>   - go to sleep<br>>   - receive completion for wl_surface_frame callback<br>>   - draw second frame into buffer B<br>>   - call wl_surface_frame(S) + wl_surface_attach(S, B) +<br>> wl_surface_commit(S) + wl_display_flush()<br>>   - compositor now owns both buffers, so don't touch any<br>>   - receive wl_buffer.release event for buffer A - now unused<br>>   - receive completion for wl_surface_frame callback<br>>   - draw third frame into buffer A<br>>   - ...<br>> <br>> Hope that helps. You can see the weston-simple-shm client for a pretty<br>> straightforward example.<br>> <br>> Cheers,<br>> Daniel<br><br>Hi Daniel,<br><br>Many thanks for the detailed and quick response.  You've shown me a couple of functions I hadn't thought of using.<br><br>I'll give it a go.<br><br>Kind regards<br>Mike<br></div>                                          </div></body>
</html>