Hello, I have a problem regarding a GL texture that seems to never be actually released.
Here are the details of the problem: I am creating an image in an EGL buffer, that I would like to draw on a Qt widget using OpenGL textures to avoid buffer duplication. So first I create a QPixmap, and I bind it to GL_TEXTURE_2D. Then I create an EGLImageKHR using eglCreateImageKHR, associated to my EGL buffer, and I associate that EGLImageKHR to GL_TEXTURE_2D using glEGLImageTargetTexture2DOES. The next call is what is seems to cause the problem: I draw the QPixmap on the widget using QPainter::drawPixmap. This painter here is a simple QPainter, associated to the QGL2PaintEngineEx engine. It will delegate the work to QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, const QRectF & src). In a simplified way, the code would look like this: ------------- snip ---------- QGLContext* gc = (QGLContext*) QGLContext::currentContext(); QPixmap *pixmap = new QPixmap(buffer->width, buffer->height); unsigned int textureId = gc->bindTexture(*pixmap, GL_TEXTURE_2D, GL_BGRA, QGLContext::PremultipliedAlphaBindOption); EGLClientBuffer clientBuffer = (EGLClientBuffer) buffer; EGLint attrs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE, }; EGLDisplay currentDisplay = eglGetCurrentDisplay(); EGLImageKHR image = eglCreateImageKHR(currentDisplay, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attrs); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (GLeglImageOES) image); painter->drawPixmap(m_visibleBounds.x(), m_visibleBounds.y(), *pixmap, 0, 0, m_visibleBounds.width(), m_visibleBounds.height()); eglDestroyImageKHR(currentDisplay, image); gc->deleteTexture(textureId); delete pixmap; ------------- snip ---------- This code draws actually the buffer in the Qt widget alright, but then it seems that I can't reuse my EGL buffer, as there is still some binding between GL_TEXTURE_2D and the buffer. Note that if I call gc->deleteTexture(textureId) before calling drawPixmap, I don't get the problem (but of course the buffer is not drawn on the widget). When investigating a bit further, I found out that the Qt GL engine uses some texture caching. Could it be the cause of my problem ? Or would you suggest another way, maybe cleaner, to draw the EGL buffer on a Qt widget ? Thanks in advance. Chris
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest