On 05/29/2013 01:38 AM, Sinclair Yeh wrote:
On Sun, 26 May 2013 20:03:40 -0400 Kristian Høgsberg <[email protected]> wrote:+ /* Only allocate a texture if it doesn't match existing one */ + if (((wl_shm_buffer_get_stride(buffer) / 4) != gs->pitch) || + (buffer->height != gs->height)) {I would prefer a little fewer parentheses here - only the () required by if are necessary. Nitpicks aside, we need to also call glTexImage2D in case we're switching from a egl buffer to a shm buffer. If we don't the texture will remain backed by the EGLImage from the previous frame and the glTexSubImage2D in flush_damage will write into that buffer. The best way to check if we're coming from a EGLImage buffer is to see if gs->num_images is > 0, which I'd just add to the if statement.
Actually, the EGL images are not destroyed when the switch happens, neither is gs->num_images updated. So once the switch happens, if we check for gs->num_images we'll end up calling glTexImage2D() on every attach. I just sent a patch to fix this, but that makes the check a tad more complicated. One needs to save the value of gs->num_images before freeing the images to check later.
I am unfamiliar with this particular case, but I've added the check. What is the usage scenario for switching from DRM backed buffer to SHM?
An application could decide to switch to software rendering after using GL for releasing resources, for example.
Cheers, Ander
Also, here do I need to do any of the house cleaning done by the "if(!buffer)" condition above or are these going to be cleaned up by a different API? _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
