On Fri, May 20, 2016 at 5:16 PM, Marc-André Lureau <marcandre.lureau@xxxxxxxxx> wrote: > For some unclear reason, when multiple display use gl in the same > process (with virt-manager for ex), the texture content can be > overwritten by another display on update. > > Although the gl contexts are differents when using multiple widgets, > even when sharing a texture ID, it shouldn't overwrite the other context > texture, there is something fishy. > > Set the image texture target before drawing to solve this for now. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > --- > src/spice-widget-egl.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/src/spice-widget-egl.c b/src/spice-widget-egl.c > index 210b834..5c24524 100644 > --- a/src/spice-widget-egl.c > +++ b/src/spice-widget-egl.c > @@ -548,8 +548,12 @@ void spice_egl_update_display(SpiceDisplay *display) > } > SPICE_DEBUG("update %f +%d+%d %dx%d +%f+%f %fx%f", s, x, y, w, h, > tx, ty, tw, th); > - > glBindTexture(GL_TEXTURE_2D, d->egl.tex_id); > + /* FIXME: this should be only necessary on scanout update */ actually, it's the same issue as with other multiple display bugs, we need to make context current in spice_egl_update_scanout(), otherwise it may manipulate a texture from a different context, depending on the last display to have changed it. However, there doesn't seem to be an easy way to do that with gtkglarea < 3.16, thus this patch is still valid. A further patch can move it back to update_scanout() for 3.16 and x11, but it will stil need this here for gtkglarea < 3.16. > + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); > + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); > + glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (GLeglImageOES)d->egl.image); > + > glDisable(GL_BLEND); > glGetIntegerv(GL_CURRENT_PROGRAM, &prog); > glUseProgram(d->egl.prog); > @@ -627,10 +631,6 @@ gboolean spice_egl_update_scanout(SpiceDisplay *display, > (EGLClientBuffer)NULL, > attrs); > > - glBindTexture(GL_TEXTURE_2D, d->egl.tex_id); > - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); > - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); > - glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (GLeglImageOES)d->egl.image); > d->egl.scanout = *scanout; > > return TRUE; > -- > 2.7.4 > -- Marc-André Lureau _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel