<div dir="ltr">Thank you for the detailed gyaan. I will look into the "sub-surface" protocol as an alternative. What I do as of now is have the 2 threads on a 3 second timer where threadA renders triangle for 3 seconds then signals a mutex condition and wakes up threadB which renders gears for 3 seconds and so on and so on. I will also look into the option of reusing the wl_surface for multiple wl_egl_window. This seems closest to what i had in mind. I would also like to attach 3 second timer signal to the display FD and the custom queue i have setup for the 2 threads so that instead of having a dedicated timer logic I can blend the event handling into the Wayland model. I haven't been successful in doing this though. As an alternative I am looking into the option of writing a wl_timer protocol to provide the functionality. Any suggestions on how i can tie in the timer logic or any comments on having a dedicated wl_timer protocol? Thank you for all the help.<div><br></div><div>- VirtualPresence.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 28, 2014 at 12:33 AM, Pekka Paalanen <span dir="ltr"><<a href="mailto:ppaalanen@gmail.com" target="_blank">ppaalanen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, 27 Oct 2014 10:15:20 -0700<br>
Virtual Presence <<a href="mailto:virtualpresence.ucla@gmail.com">virtualpresence.ucla@gmail.com</a>> wrote:<br>
<br>
> I see. Thank you for the info. What i am trying to do is have multiple<br>
> contexts with its own EGLSurface but sharing the same "window" or<br>
> wl_surface on wayland, where one thread renders a gl_triangle and the other<br>
> rendering gears. This was a simple client to teach myself queues and IPC of<br>
> wayland, ofcourse it doesnt reflect "real world" clients. So with this<br>
> setup i was wondering if a resize on the wl_egl_window will seamlessly take<br>
> effect on both EGLSurfaces. Since there is no spec could it be possible<br>
> that different wayland EGL implementations will have different<br>
> interpretations on if/how to reuse the wl_egl_window OR are implementations<br>
> explicitly discouraged, may be to prevent themselves from blowing up in<br>
> weird ways, from reusing the same wl_egl_window concurrently? Also i am<br>
> assuming reuse of the wl_egl_window non-concurrently is permitted and wont<br>
> have issues?<br>
<br>
</span>I think that is all unknown territory. I'm not sure anyone has ever<br>
even considered that one might actually intentionally use the same<br>
wl_egl_window to create several EGLSurfaces. The output to screen is<br>
not sensible, because even if the implementation copes with multiple<br>
EGLSurfaces, the EGLSurfaces would still be fighting over whose buffer<br>
is actually shown on screen.<br>
<br>
Resize is not really an issue on its own, but just a part of the whole<br>
problem, whether an EGL implementation actually supports having<br>
multiple EGLSurfaces for a single wl_egl_window.<br>
<br>
In my opinion, it is reasonable to assume, that implementations do not<br>
support one wl_egl_window to multiple EGLSurface associations. But,<br>
wl_egl_window is a cheap wrapper anyway, so I would recommend thinking<br>
it as an extension of the EGLSurface object, offering an API for<br>
resizing, because the EGL implementation cannot get resizing<br>
notifications from anywhere else. So you should be able to create<br>
multiple wl_egl_windows from the same wl_surface. I cannot think of any<br>
obvious problems that would raise, and you can have your content<br>
fighting as you wish. Just keep the wl_egl_window together with the<br>
EGLSurface in terms of thread context etc.<br>
<br>
Re-using a wl_egl_window by first destroying the EGLSurface and then<br>
creating another EGLSurface should probably work, I think, though<br>
that's again something I doubt anyone has ever tried before.<br>
<br>
AFAIK, we are very much missing a specification defining all these<br>
details, and there are no EGL implementation conformance test suites to<br>
validate any implementation on the Wayland platform. Fixing this would<br>
be seriously beneficial, but we're not there yet.<br>
<br>
So, are you trying to show the triangle and gears randomly alternating,<br>
or what do you actually expect to see on the screen?<br>
<br>
If you want the triangle in one part of the window, and the gears on<br>
another part, you could do that with sub-surfaces. One possible surface<br>
hierarchy is that you have the window, and then you create a new<br>
wl_surface for triangle and gears each, and tie these wl_surfaces to<br>
the window's wl_surface by using wl_subcompositor interface.<br>
<br>
<br>
Thanks,<br>
pq<br>
<div class="HOEnZb"><div class="h5"><br>
> On Mon, Oct 27, 2014 at 12:36 AM, Pekka Paalanen <<a href="mailto:ppaalanen@gmail.com">ppaalanen@gmail.com</a>><br>
> wrote:<br>
><br>
> > On Sat, 25 Oct 2014 17:14:32 -0700<br>
> > Virtual Presence <<a href="mailto:virtualpresence.ucla@gmail.com">virtualpresence.ucla@gmail.com</a>> wrote:<br>
> ><br>
> > > Hi,<br>
> > ><br>
> > > I am writing a simple multi-threaded multi-context GLES2 Wayland client.<br>
> > As<br>
> > > required by Wayland and MESA EGL bindings i do create a wl_egl_window to<br>
> > > pass on to EGL window surface creation. I was wondering if there is any<br>
> > > spec or rule that disallows reuse of the same wl_egl_window for multiple<br>
> > > EGLWindowSurface. I was wondering if i could use the same underlying<br>
> > > wl_egl_window resize bindings to cause multiple resizes. If i cannot do<br>
> > the<br>
> > > same i would like to know of a spec/rule/guide (say like an EGL spec)<br>
> > that<br>
> > > lists all the creation, management, deletion and usage of this object.<br>
> ><br>
> > Hi,<br>
> ><br>
> > I cannot understand what you could possibly achieve by creating several<br>
> > EGLSurfaces for the same window. What do you want to do?<br>
> ><br>
> > Are you perhaps attempting to render different parts of a single window<br>
> > in different GL contexts and so using different EGLSurfaces with some<br>
> > clipping magic? Maybe relying that GLX (not EGL IIRC!) required the<br>
> > color buffers to be shared between clients/contexts?<br>
> ><br>
> > Or do you simply want a dummy EGLSurface for each context, and then use<br>
> > FBOs to do the work, without ever calling eglSwapBuffers except for the<br>
> > one context that actually draws in the window? Because there are no<br>
> > Pixmaps in EGL Wayland?<br>
> ><br>
> > I can't quote a spec off-hand, but I know the EGL Wayland platform does<br>
> > not support "partial" rendering. Every time you call eglSwapBuffers,<br>
> > the whole buffer content must be valid, as the display server is free<br>
> > to take the whole buffer as the new window contents. That's actually a<br>
> > Wayland specification: every buffer must be completely drawn, as the<br>
> > display server is allowed to use all of it, even if the associated<br>
> > damage is only a part of it.<br>
> ><br>
> > So, I don't think it is explicitly forbidden anywhere to create several<br>
> > EGLSurfaces for the same wl_egl_window, but it just doesn't make sense.<br>
> > The different (E)GL contexts using the different EGLSurfaces would be<br>
> > fighting over whose buffer ends up on screen. As such, I expect that<br>
> > case to be untested, and so likely hit bugs.<br>
> ><br>
> > FWIW, you'd be looking for an EGL Wayland platform specification, and<br>
> > one has not been written AFAIK, as has not been written for many of the<br>
> > other platforms either.<br>
> ><br>
> ><br>
> > Thanks,<br>
> > pq<br>
> ><br>
<br>
</div></div></blockquote></div><br></div>