// Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include #include #include #include #include #include #include #include #include #include #include #include "sharebufferextension.h" #include #include #include #include class TestWindow : public QOpenGLWindow { Q_OBJECT public: TestWindow() { m_extension = new ShareBufferExtension; connect(m_extension, SIGNAL(bufferReceived(QtWaylandClient::QWaylandServerBuffer*)), this, SLOT(receiveBuffer(QtWaylandClient::QWaylandServerBuffer*))); } public slots: void receiveBuffer(QtWaylandClient::QWaylandServerBuffer *buffer) { m_buffers.append(buffer); update(); } protected: void initializeGL() override { m_blitter = new QOpenGLTextureBlitter; m_blitter->create(); } void paintGL() override { glClearColor(.5, .45, .42, 1.); glClear(GL_COLOR_BUFFER_BIT); int x = 0; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for (auto buffer: m_buffers) { m_blitter->bind(); QPointF pos(x,0); QSize s(buffer->size()); QRectF targetRect(pos, s); QOpenGLTexture *texture = buffer->toOpenGlTexture(); auto surfaceOrigin = QOpenGLTextureBlitter::OriginTopLeft; QMatrix4x4 targetTransform = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(), size())); m_blitter->blit(texture->textureId(), targetTransform, surfaceOrigin); m_blitter->release(); x += s.width() + 10; } } private: QOpenGLTextureBlitter *m_blitter = nullptr; ShareBufferExtension *m_extension = nullptr; QList m_buffers; }; int main (int argc, char **argv) { QGuiApplication app(argc, argv); TestWindow window; window.show(); return app.exec(); } #include "main.moc"