diff options
Diffstat (limited to 'src/platformsupport')
-rw-r--r-- | src/platformsupport/eglconvenience/qeglcompositor.cpp | 11 | ||||
-rw-r--r-- | src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp | 7 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/platformsupport/eglconvenience/qeglcompositor.cpp b/src/platformsupport/eglconvenience/qeglcompositor.cpp index 028f92f3cf..0deb8d3c39 100644 --- a/src/platformsupport/eglconvenience/qeglcompositor.cpp +++ b/src/platformsupport/eglconvenience/qeglcompositor.cpp @@ -142,7 +142,6 @@ void QEGLCompositor::render(QEGLPlatformWindow *window) for (int i = 0; i < textures->count(); ++i) { uint textureId = textures->textureId(i); - glBindTexture(GL_TEXTURE_2D, textureId); QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(textures->geometry(i), targetWindowRect); const float opacity = window->window()->opacity(); @@ -160,13 +159,21 @@ void QEGLCompositor::render(QEGLPlatformWindow *window) const bool translucent = window->window()->requestedFormat().alphaBufferSize() > 0; blend.set(translucent); m_blitter->blit(textureId, target, QOpenGLTextureBlitter::OriginTopLeft); - } else { + } else if (!textures->stacksOnTop(i)) { // Texture from an FBO belonging to a QOpenGLWidget blend.set(false); m_blitter->blit(textureId, target, QOpenGLTextureBlitter::OriginBottomLeft); } } + for (int i = 0; i < textures->count(); ++i) { + if (textures->stacksOnTop(i)) { + QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(textures->geometry(i), targetWindowRect); + blend.set(true); + m_blitter->blit(textures->textureId(i), target, QOpenGLTextureBlitter::OriginBottomLeft); + } + } + m_blitter->setOpacity(1.0f); } diff --git a/src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp b/src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp index 3cb31e36ec..7b627f85ae 100644 --- a/src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp +++ b/src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp @@ -181,11 +181,8 @@ void QEGLPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &r screen->compositingContext()->makeCurrent(dstWin->window()); m_textures->clear(); - for (int i = 0; i < textures->count(); ++i) { - uint textureId = textures->textureId(i); - QRect geom = textures->geometry(i); - m_textures->appendTexture(textureId, geom); - } + for (int i = 0; i < textures->count(); ++i) + m_textures->appendTexture(textures->textureId(i), textures->geometry(i), textures->stacksOnTop(i)); updateTexture(); m_textures->appendTexture(m_bsTexture, window->geometry()); |