From cf815557eef1d1d34e20d13df24baae5e2f138ac Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 4 Jun 2020 16:31:22 +0200 Subject: RHI: Remove gl code from video nodes Now QSGMaterialShader handles rhi textures too. Task-number: QTBUG-78678 Change-Id: I410185c80bd104741fd5b52deeb87eb97531410a Reviewed-by: Laszlo Agocs --- src/qtmultimediaquicktools/qsgvideonode_rgb.cpp | 200 +--------- .../qsgvideonode_texture.cpp | 139 +------ src/qtmultimediaquicktools/qsgvideonode_yuv.cpp | 424 ++------------------- src/qtmultimediaquicktools/qsgvideotexture.cpp | 3 + .../qtmultimediaquicktools.pro | 31 +- .../qtmultimediaquicktools.qrc | 42 +- src/qtmultimediaquicktools/shaders/bgra.frag | 16 + src/qtmultimediaquicktools/shaders/bgra.frag.qsb | Bin 0 -> 1566 bytes .../shaders/biplanaryuvvideo.frag | 14 - .../shaders/biplanaryuvvideo.vert | 13 - .../shaders/biplanaryuvvideo_core.frag | 16 - .../shaders/biplanaryuvvideo_core.vert | 14 - .../shaders/biplanaryuvvideo_swizzle.frag | 14 - .../shaders/biplanaryuvvideo_swizzle_core.frag | 16 - src/qtmultimediaquicktools/shaders/compile.bat | 50 +++ .../shaders/monoplanarvideo.vert | 9 - .../shaders/monoplanarvideo_core.vert | 10 - src/qtmultimediaquicktools/shaders/nv12.frag | 25 ++ src/qtmultimediaquicktools/shaders/nv12.frag.qsb | Bin 0 -> 2240 bytes src/qtmultimediaquicktools/shaders/nv21.frag | 25 ++ src/qtmultimediaquicktools/shaders/nv21.frag.qsb | Bin 0 -> 2238 bytes src/qtmultimediaquicktools/shaders/rgba.frag | 16 + src/qtmultimediaquicktools/shaders/rgba.frag.qsb | Bin 0 -> 1553 bytes src/qtmultimediaquicktools/shaders/rgba.vert | 18 + src/qtmultimediaquicktools/shaders/rgba.vert.qsb | Bin 0 -> 1831 bytes src/qtmultimediaquicktools/shaders/rgbvideo.frag | 8 - .../shaders/rgbvideo_core.frag | 10 - .../shaders/rgbvideo_padded.vert | 10 - .../shaders/rgbvideo_padded_core.vert | 11 - .../shaders/rgbvideo_swizzle.frag | 10 - .../shaders/rgbvideo_swizzle_core.frag | 12 - .../shaders/triplanaryuvvideo.frag | 18 - .../shaders/triplanaryuvvideo.vert | 16 - .../shaders/triplanaryuvvideo_core.frag | 19 - .../shaders/triplanaryuvvideo_core.vert | 17 - src/qtmultimediaquicktools/shaders/uyvy.frag | 23 ++ src/qtmultimediaquicktools/shaders/uyvy.frag.qsb | Bin 0 -> 2182 bytes src/qtmultimediaquicktools/shaders/uyvyvideo.frag | 13 - .../shaders/uyvyvideo_core.frag | 14 - src/qtmultimediaquicktools/shaders/yuv.vert | 26 ++ src/qtmultimediaquicktools/shaders/yuv.vert.qsb | Bin 0 -> 2410 bytes src/qtmultimediaquicktools/shaders/yuv_yv.frag | 28 ++ src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb | Bin 0 -> 2385 bytes src/qtmultimediaquicktools/shaders/yuyv.frag | 23 ++ src/qtmultimediaquicktools/shaders/yuyv.frag.qsb | Bin 0 -> 2192 bytes src/qtmultimediaquicktools/shaders/yuyvvideo.frag | 13 - .../shaders/yuyvvideo_core.frag | 14 - src/qtmultimediaquicktools/shaders_ng/bgra.frag | 16 - .../shaders_ng/bgra.frag.qsb | Bin 1566 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/compile.bat | 50 --- src/qtmultimediaquicktools/shaders_ng/nv12.frag | 25 -- .../shaders_ng/nv12.frag.qsb | Bin 2240 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/nv21.frag | 25 -- .../shaders_ng/nv21.frag.qsb | Bin 2238 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/rgba.frag | 16 - .../shaders_ng/rgba.frag.qsb | Bin 1553 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/rgba.vert | 18 - .../shaders_ng/rgba.vert.qsb | Bin 1831 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/uyvy.frag | 23 -- .../shaders_ng/uyvy.frag.qsb | Bin 2182 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/yuv.vert | 26 -- src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb | Bin 2410 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag | 28 -- .../shaders_ng/yuv_yv.frag.qsb | Bin 2385 -> 0 bytes src/qtmultimediaquicktools/shaders_ng/yuyv.frag | 23 -- .../shaders_ng/yuyv.frag.qsb | Bin 2192 -> 0 bytes 66 files changed, 329 insertions(+), 1301 deletions(-) create mode 100644 src/qtmultimediaquicktools/shaders/bgra.frag create mode 100644 src/qtmultimediaquicktools/shaders/bgra.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag delete mode 100644 src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert delete mode 100644 src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag delete mode 100644 src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert delete mode 100644 src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag delete mode 100644 src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag create mode 100755 src/qtmultimediaquicktools/shaders/compile.bat delete mode 100644 src/qtmultimediaquicktools/shaders/monoplanarvideo.vert delete mode 100644 src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert create mode 100644 src/qtmultimediaquicktools/shaders/nv12.frag create mode 100644 src/qtmultimediaquicktools/shaders/nv12.frag.qsb create mode 100644 src/qtmultimediaquicktools/shaders/nv21.frag create mode 100644 src/qtmultimediaquicktools/shaders/nv21.frag.qsb create mode 100644 src/qtmultimediaquicktools/shaders/rgba.frag create mode 100644 src/qtmultimediaquicktools/shaders/rgba.frag.qsb create mode 100644 src/qtmultimediaquicktools/shaders/rgba.vert create mode 100644 src/qtmultimediaquicktools/shaders/rgba.vert.qsb delete mode 100644 src/qtmultimediaquicktools/shaders/rgbvideo.frag delete mode 100644 src/qtmultimediaquicktools/shaders/rgbvideo_core.frag delete mode 100644 src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert delete mode 100644 src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert delete mode 100644 src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag delete mode 100644 src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag delete mode 100644 src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag delete mode 100644 src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert delete mode 100644 src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag delete mode 100644 src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert create mode 100644 src/qtmultimediaquicktools/shaders/uyvy.frag create mode 100644 src/qtmultimediaquicktools/shaders/uyvy.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders/uyvyvideo.frag delete mode 100644 src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag create mode 100644 src/qtmultimediaquicktools/shaders/yuv.vert create mode 100644 src/qtmultimediaquicktools/shaders/yuv.vert.qsb create mode 100644 src/qtmultimediaquicktools/shaders/yuv_yv.frag create mode 100644 src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb create mode 100644 src/qtmultimediaquicktools/shaders/yuyv.frag create mode 100644 src/qtmultimediaquicktools/shaders/yuyv.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders/yuyvvideo.frag delete mode 100644 src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/bgra.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb delete mode 100755 src/qtmultimediaquicktools/shaders_ng/compile.bat delete mode 100644 src/qtmultimediaquicktools/shaders_ng/nv12.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/nv21.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/rgba.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/rgba.vert delete mode 100644 src/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/uyvy.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/yuv.vert delete mode 100644 src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb delete mode 100644 src/qtmultimediaquicktools/shaders_ng/yuyv.frag delete mode 100644 src/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb diff --git a/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp b/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp index 5746a644a..c5c82de4a 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_rgb.cpp @@ -38,12 +38,8 @@ ****************************************************************************/ #include "qsgvideonode_rgb_p.h" #include "qsgvideotexture_p.h" -#include #include #include -#include -#include -#include QT_BEGIN_NAMESPACE @@ -71,71 +67,13 @@ QSGVideoNode *QSGVideoNodeFactory_RGB::createNode(const QVideoSurfaceFormat &for return 0; } - -class QSGVideoMaterialShader_RGB : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_RGB() - : QSGMaterialShader(), - m_id_matrix(-1), - m_id_width(-1), - m_id_rgbTexture(-1), - m_id_opacity(-1) - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo_padded.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_width = program()->uniformLocation("width"); - m_id_rgbTexture = program()->uniformLocation("rgbTexture"); - m_id_opacity = program()->uniformLocation("opacity"); - } - - int m_id_matrix; - int m_id_width; - int m_id_rgbTexture; - int m_id_opacity; -}; - -class QSGVideoMaterialShader_RGB_swizzle : public QSGVideoMaterialShader_RGB -{ -public: - QSGVideoMaterialShader_RGB_swizzle(bool hasAlpha) - : m_hasAlpha(hasAlpha) - { - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag")); - } - -protected: - void initialize() override { - QSGVideoMaterialShader_RGB::initialize(); - program()->setUniformValue(program()->uniformLocation("hasAlpha"), GLboolean(m_hasAlpha)); - } - - bool m_hasAlpha; -}; - -class QSGVideoMaterialRhiShader_RGB : public QSGMaterialRhiShader +class QSGVideoMaterialRhiShader_RGB : public QSGMaterialShader { public: QSGVideoMaterialRhiShader_RGB() { - setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb")); - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb")); + setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.vert.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.frag.qsb")); } bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, @@ -150,45 +88,29 @@ class QSGVideoMaterial_RGB : public QSGMaterial public: QSGVideoMaterial_RGB(const QVideoSurfaceFormat &format) : m_format(format), - m_textureId(0), - m_opacity(1.0), - m_width(1.0) + m_opacity(1.0) { setFlag(Blending, false); - setFlag(SupportsRhiShader, true); - } - - ~QSGVideoMaterial_RGB() - { - if (m_textureId) - QOpenGLContext::currentContext()->functions()->glDeleteTextures(1, &m_textureId); } QSGMaterialType *type() const override { - static QSGMaterialType normalType, swizzleType; - return needsSwizzling() ? &swizzleType : &normalType; + static QSGMaterialType normalType; + return &normalType; } QSGMaterialShader *createShader() const override { - if (flags().testFlag(RhiShaderWanted)) - return new QSGVideoMaterialRhiShader_RGB; - - const bool hasAlpha = m_format.pixelFormat() == QVideoFrame::Format_ARGB32; - return needsSwizzling() ? new QSGVideoMaterialShader_RGB_swizzle(hasAlpha) - : new QSGVideoMaterialShader_RGB; + return new QSGVideoMaterialRhiShader_RGB; } int compare(const QSGMaterial *other) const override { const QSGVideoMaterial_RGB *m = static_cast(other); - if (!m_textureId) - return 1; - - return m_textureId - m->m_textureId; + const qint64 diff = m_texture->comparisonKey() - m->m_texture->comparisonKey(); + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); } void updateBlending() { - setFlag(Blending, qFuzzyCompare(m_opacity, qreal(1.0)) ? false : true); + setFlag(Blending, !qFuzzyCompare(m_opacity, float(1.0))); } void setVideoFrame(const QVideoFrame &frame) { @@ -196,88 +118,17 @@ public: m_frame = frame; } - void bind() - { - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - - QMutexLocker lock(&m_frameMutex); - if (m_frame.isValid()) { - if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) { - QSize textureSize = m_frame.size(); - - int stride = m_frame.bytesPerLine(); - switch (m_frame.pixelFormat()) { - case QVideoFrame::Format_RGB565: - stride /= 2; - break; - default: - stride /= 4; - } - - m_width = qreal(m_frame.width()) / stride; - textureSize.setWidth(stride); - - if (m_textureSize != textureSize) { - if (!m_textureSize.isEmpty()) - functions->glDeleteTextures(1, &m_textureId); - functions->glGenTextures(1, &m_textureId); - m_textureSize = textureSize; - } - - GLint dataType = GL_UNSIGNED_BYTE; - GLint dataFormat = GL_RGBA; - - if (m_frame.pixelFormat() == QVideoFrame::Format_RGB565) { - dataType = GL_UNSIGNED_SHORT_5_6_5; - dataFormat = GL_RGB; - } - - GLint previousAlignment; - functions->glGetIntegerv(GL_UNPACK_ALIGNMENT, &previousAlignment); - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - functions->glActiveTexture(GL_TEXTURE0); - functions->glBindTexture(GL_TEXTURE_2D, m_textureId); - functions->glTexImage2D(GL_TEXTURE_2D, 0, dataFormat, - m_textureSize.width(), m_textureSize.height(), - 0, dataFormat, dataType, m_frame.bits()); - - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, previousAlignment); - - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - m_frame.unmap(); - } - m_frame = QVideoFrame(); - } else { - functions->glActiveTexture(GL_TEXTURE0); - functions->glBindTexture(GL_TEXTURE_2D, m_textureId); - } - } - QVideoFrame m_frame; QMutex m_frameMutex; QSize m_textureSize; QVideoSurfaceFormat m_format; - GLuint m_textureId; - qreal m_opacity; - GLfloat m_width; + float m_opacity; QScopedPointer m_texture; - -private: - bool needsSwizzling() const { - return m_format.pixelFormat() == QVideoFrame::Format_RGB32 - || m_format.pixelFormat() == QVideoFrame::Format_ARGB32; - } }; bool QSGVideoMaterialRhiShader_RGB::updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) { - Q_UNUSED(newMaterial); Q_UNUSED(oldMaterial); bool changed = false; @@ -289,8 +140,10 @@ bool QSGVideoMaterialRhiShader_RGB::updateUniformData(RenderState &state, QSGMat } if (state.isOpacityDirty()) { - const float opacity = state.opacity(); - memcpy(buf->data() + 64, &opacity, 4); + auto m = static_cast(newMaterial); + m->m_opacity = state.opacity(); + m->updateBlending(); + memcpy(buf->data() + 64, &m->m_opacity, 4); changed = true; } @@ -311,7 +164,6 @@ void QSGVideoMaterialRhiShader_RGB::updateSampledImage(RenderState &state, int b m->m_frameMutex.lock(); auto frame = m->m_frame; - m->m_frameMutex.unlock(); if (frame.pixelFormat() == QVideoFrame::Format_RGB565) // Format_RGB565 requires GL_UNSIGNED_SHORT_5_6_5 frame = frame.image().convertToFormat(QImage::Format_RGBA8888_Premultiplied); @@ -327,6 +179,7 @@ void QSGVideoMaterialRhiShader_RGB::updateSampledImage(RenderState &state, int b m->m_texture->setData(format, frame.size(), frame.bits(), frame.bytesPerLine() * frame.height()); frame.unmap(); } + m->m_frameMutex.unlock(); m->m_texture->commitTextureOperations(state.rhi(), state.resourceUpdateBatch()); *texture = m->m_texture.data(); @@ -350,25 +203,4 @@ void QSGVideoNode_RGB::setCurrentFrame(const QVideoFrame &frame, FrameFlags) markDirty(DirtyMaterial); } -void QSGVideoMaterialShader_RGB::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - QSGVideoMaterial_RGB *mat = static_cast(newMaterial); - program()->setUniformValue(m_id_rgbTexture, 0); - - mat->bind(); - - program()->setUniformValue(m_id_width, mat->m_width); - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - mat->updateBlending(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp index a5206eefb..de7b8efd9 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp @@ -38,12 +38,8 @@ ****************************************************************************/ #include "qsgvideonode_texture_p.h" #include "qsgvideotexture_p.h" -#include #include #include -#include -#include -#include #include QT_BEGIN_NAMESPACE @@ -75,65 +71,13 @@ QSGVideoNode *QSGVideoNodeFactory_Texture::createNode(const QVideoSurfaceFormat return 0; } - -class QSGVideoMaterialShader_Texture : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_Texture() - : QSGMaterialShader() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/monoplanarvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_Texture = program()->uniformLocation("rgbTexture"); - m_id_opacity = program()->uniformLocation("opacity"); - } - - int m_id_matrix; - int m_id_Texture; - int m_id_opacity; -}; - -class QSGVideoMaterialShader_Texture_swizzle : public QSGVideoMaterialShader_Texture -{ -public: - QSGVideoMaterialShader_Texture_swizzle(bool hasAlpha) - : m_hasAlpha(hasAlpha) - { - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag")); - } - -protected: - void initialize() override { - QSGVideoMaterialShader_Texture::initialize(); - program()->setUniformValue(program()->uniformLocation("hasAlpha"), GLboolean(m_hasAlpha)); - } - - int m_hasAlpha; -}; - -class QSGVideoMaterialRhiShader_Texture : public QSGMaterialRhiShader +class QSGVideoMaterialRhiShader_Texture : public QSGMaterialShader { public: QSGVideoMaterialRhiShader_Texture() { - setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb")); - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb")); + setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.vert.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/rgba.frag.qsb")); } bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, @@ -148,7 +92,7 @@ class QSGVideoMaterialRhiShader_Texture_swizzle : public QSGVideoMaterialRhiShad public: QSGVideoMaterialRhiShader_Texture_swizzle() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/bgra.frag.qsb")); } }; @@ -157,16 +101,13 @@ class QSGVideoMaterial_Texture : public QSGMaterial public: QSGVideoMaterial_Texture(const QVideoSurfaceFormat &format) : m_format(format), - m_textureId(0), m_opacity(1.0) { setFlag(Blending, false); - setFlag(SupportsRhiShader, true); } ~QSGVideoMaterial_Texture() { - m_frame = QVideoFrame(); } QSGMaterialType *type() const override { @@ -175,34 +116,19 @@ public: } QSGMaterialShader *createShader() const override { - if (flags().testFlag(RhiShaderWanted)) - return needsSwizzling() ? new QSGVideoMaterialRhiShader_Texture_swizzle - : new QSGVideoMaterialRhiShader_Texture; - - const bool hasAlpha = m_format.pixelFormat() == QVideoFrame::Format_ARGB32; - return needsSwizzling() ? new QSGVideoMaterialShader_Texture_swizzle(hasAlpha) - : new QSGVideoMaterialShader_Texture; + return needsSwizzling() ? new QSGVideoMaterialRhiShader_Texture_swizzle + : new QSGVideoMaterialRhiShader_Texture; } int compare(const QSGMaterial *other) const override { const QSGVideoMaterial_Texture *m = static_cast(other); - if (!m_textureId) - return 1; - - int diff = m_textureId - m->m_textureId; - if (diff) - return diff; - - diff = m_format.pixelFormat() - m->m_format.pixelFormat(); - if (diff) - return diff; - - return (m_opacity > m->m_opacity) ? 1 : -1; + const qint64 diff = m_texture->comparisonKey() - m->m_texture->comparisonKey(); + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); } void updateBlending() { - setFlag(Blending, qFuzzyCompare(m_opacity, qreal(1.0)) ? false : true); + setFlag(Blending, qFuzzyCompare(m_opacity, float(1.0)) ? false : true); } void setVideoFrame(const QVideoFrame &frame) { @@ -210,29 +136,11 @@ public: m_frame = frame; } - void bind() - { - QMutexLocker lock(&m_frameMutex); - if (m_frame.isValid()) { - m_textureId = m_frame.handle().toUInt(); - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - functions->glBindTexture(GL_TEXTURE_2D, m_textureId); - - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - } else { - m_textureId = 0; - } - } - QVideoFrame m_frame; QMutex m_frameMutex; - QSize m_textureSize; QVideoSurfaceFormat m_format; quint64 m_textureId; - qreal m_opacity; + float m_opacity; QScopedPointer m_texture; private: @@ -245,7 +153,6 @@ private: bool QSGVideoMaterialRhiShader_Texture::updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) { - Q_UNUSED(newMaterial); Q_UNUSED(oldMaterial); bool changed = false; @@ -257,8 +164,10 @@ bool QSGVideoMaterialRhiShader_Texture::updateUniformData(RenderState &state, QS } if (state.isOpacityDirty()) { - const float opacity = state.opacity(); - memcpy(buf->data() + 64, &opacity, 4); + auto m = static_cast(newMaterial); + m->m_opacity = state.opacity(); + m->updateBlending(); + memcpy(buf->data() + 64, &m->m_opacity, 4); changed = true; } @@ -306,24 +215,4 @@ void QSGVideoNode_Texture::setCurrentFrame(const QVideoFrame &frame, FrameFlags) markDirty(DirtyMaterial); } -void QSGVideoMaterialShader_Texture::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - QSGVideoMaterial_Texture *mat = static_cast(newMaterial); - program()->setUniformValue(m_id_Texture, 0); - - mat->bind(); - - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - mat->updateBlending(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp index 006704a23..5d5147cc2 100644 --- a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp @@ -39,33 +39,7 @@ #include "qsgvideonode_yuv_p.h" #include "qsgvideotexture_p.h" #include -#include #include -#include -#include -#include - -#ifndef GL_RED -#define GL_RED 0x1903 -#endif -#ifndef GL_GREEN -#define GL_GREEN 0x1904 -#endif -#ifndef GL_RG -#define GL_RG 0x8227 -#endif -#ifndef GL_TEXTURE_SWIZZLE_R -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#endif -#ifndef GL_TEXTURE_SWIZZLE_G -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#endif -#ifndef GL_TEXTURE_SWIZZLE_B -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#endif -#ifndef GL_TEXTURE_SWIZZLE_A -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#endif QT_BEGIN_NAMESPACE @@ -91,136 +65,12 @@ QSGVideoNode *QSGVideoNodeFactory_YUV::createNode(const QVideoSurfaceFormat &for return 0; } - -class QSGVideoMaterialShader_YUV_BiPlanar : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_YUV_BiPlanar() - : QSGMaterialShader() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_plane1Width = program()->uniformLocation("plane1Width"); - m_id_plane2Width = program()->uniformLocation("plane2Width"); - m_id_plane1Texture = program()->uniformLocation("plane1Texture"); - m_id_plane2Texture = program()->uniformLocation("plane2Texture"); - m_id_colorMatrix = program()->uniformLocation("colorMatrix"); - m_id_opacity = program()->uniformLocation("opacity"); - } - - int m_id_matrix; - int m_id_plane1Width; - int m_id_plane2Width; - int m_id_plane1Texture; - int m_id_plane2Texture; - int m_id_colorMatrix; - int m_id_opacity; -}; - -class QSGVideoMaterialShader_UYVY : public QSGMaterialShader -{ -public: - QSGVideoMaterialShader_UYVY() - : QSGMaterialShader() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/monoplanarvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/uyvyvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "qt_VertexPosition", - "qt_VertexTexCoord", - 0 - }; - return names; - } - -protected: - void initialize() override { - m_id_matrix = program()->uniformLocation("qt_Matrix"); - m_id_yTexture = program()->uniformLocation("yTexture"); - m_id_uvTexture = program()->uniformLocation("uvTexture"); - m_id_colorMatrix = program()->uniformLocation("colorMatrix"); - m_id_opacity = program()->uniformLocation("opacity"); - QSGMaterialShader::initialize(); - } - - int m_id_matrix; - int m_id_yTexture; - int m_id_uvTexture; - int m_id_colorMatrix; - int m_id_opacity; -}; - - -class QSGVideoMaterialShader_YUYV : public QSGVideoMaterialShader_UYVY -{ -public: - QSGVideoMaterialShader_YUYV() - : QSGVideoMaterialShader_UYVY() - { - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/yuyvvideo.frag")); - } -}; - -class QSGVideoMaterialShader_YUV_BiPlanar_swizzle : public QSGVideoMaterialShader_YUV_BiPlanar -{ -public: - QSGVideoMaterialShader_YUV_BiPlanar_swizzle() - : QSGVideoMaterialShader_YUV_BiPlanar() - { - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag")); - } -}; - -class QSGVideoMaterialShader_YUV_TriPlanar : public QSGVideoMaterialShader_YUV_BiPlanar -{ -public: - QSGVideoMaterialShader_YUV_TriPlanar() - : QSGVideoMaterialShader_YUV_BiPlanar() - { - setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert")); - setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag")); - } - - void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - -protected: - void initialize() override { - m_id_plane3Width = program()->uniformLocation("plane3Width"); - m_id_plane3Texture = program()->uniformLocation("plane3Texture"); - QSGVideoMaterialShader_YUV_BiPlanar::initialize(); - } - - int m_id_plane3Width; - int m_id_plane3Texture; -}; - -class QSGVideoMaterialRhiShader_YUV : public QSGMaterialRhiShader +class QSGVideoMaterialRhiShader_YUV : public QSGMaterialShader { public: QSGVideoMaterialRhiShader_YUV() { - setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb")); + setShaderFileName(VertexStage, QStringLiteral(":/qtmultimediaquicktools/shaders/yuv.vert.qsb")); } bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, @@ -232,7 +82,7 @@ public: virtual void mapFrame(QSGVideoMaterial_YUV *) = 0; protected: - GLfloat m_planeWidth[3] = {0, 0, 0}; + qreal m_planeWidth[3] = {0, 0, 0}; QMatrix4x4 m_colorMatrix; }; @@ -241,7 +91,7 @@ class QSGVideoMaterialRhiShader_UYVY : public QSGVideoMaterialRhiShader_YUV public: QSGVideoMaterialRhiShader_UYVY() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/uyvy.frag.qsb")); } void mapFrame(QSGVideoMaterial_YUV *m) override; @@ -252,7 +102,7 @@ class QSGVideoMaterialRhiShader_YUYV : public QSGVideoMaterialRhiShader_UYVY public: QSGVideoMaterialRhiShader_YUYV() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/yuyv.frag.qsb")); } }; @@ -261,7 +111,7 @@ class QSGVideoMaterialRhiShader_YUV_YV : public QSGVideoMaterialRhiShader_YUV public: QSGVideoMaterialRhiShader_YUV_YV() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb")); } void mapFrame(QSGVideoMaterial_YUV *m) override; @@ -272,7 +122,7 @@ class QSGVideoMaterialRhiShader_NV12 : public QSGVideoMaterialRhiShader_YUV public: QSGVideoMaterialRhiShader_NV12() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/nv12.frag.qsb")); } void mapFrame(QSGVideoMaterial_YUV *m) override; @@ -283,7 +133,7 @@ class QSGVideoMaterialRhiShader_NV21 : public QSGVideoMaterialRhiShader_NV12 public: QSGVideoMaterialRhiShader_NV21() { - setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb")); + setShaderFileName(FragmentStage, QStringLiteral(":/qtmultimediaquicktools/shaders/nv21.frag.qsb")); } }; @@ -291,7 +141,6 @@ class QSGVideoMaterial_YUV : public QSGMaterial { public: QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format); - ~QSGVideoMaterial_YUV(); QSGMaterialType *type() const override { static QSGMaterialType biPlanarType, biPlanarSwizzleType, triPlanarType, uyvyType, yuyvType; @@ -311,51 +160,34 @@ public: } QSGMaterialShader *createShader() const override { - if (flags().testFlag(RhiShaderWanted)) { - switch (m_format.pixelFormat()) { - case QVideoFrame::Format_NV12: - return new QSGVideoMaterialRhiShader_NV12; - case QVideoFrame::Format_NV21: - return new QSGVideoMaterialRhiShader_NV21; - case QVideoFrame::Format_UYVY: - return new QSGVideoMaterialRhiShader_UYVY; - case QVideoFrame::Format_YUYV: - return new QSGVideoMaterialRhiShader_YUYV; - default: // Currently: YUV420P, YUV422P and YV12 - return new QSGVideoMaterialRhiShader_YUV_YV; - } - } - switch (m_format.pixelFormat()) { case QVideoFrame::Format_NV12: - return new QSGVideoMaterialShader_YUV_BiPlanar; + return new QSGVideoMaterialRhiShader_NV12; case QVideoFrame::Format_NV21: - return new QSGVideoMaterialShader_YUV_BiPlanar_swizzle; + return new QSGVideoMaterialRhiShader_NV21; case QVideoFrame::Format_UYVY: - return new QSGVideoMaterialShader_UYVY; + return new QSGVideoMaterialRhiShader_UYVY; case QVideoFrame::Format_YUYV: - return new QSGVideoMaterialShader_YUYV; + return new QSGVideoMaterialRhiShader_YUYV; default: // Currently: YUV420P, YUV422P and YV12 - return new QSGVideoMaterialShader_YUV_TriPlanar; + return new QSGVideoMaterialRhiShader_YUV_YV; } } int compare(const QSGMaterial *other) const override { const QSGVideoMaterial_YUV *m = static_cast(other); - if (!m_textureIds[0]) - return 1; - - int d = m_textureIds[0] - m->m_textureIds[0]; - if (d) - return d; - else if ((d = m_textureIds[1] - m->m_textureIds[1]) != 0) - return d; - else - return m_textureIds[2] - m->m_textureIds[2]; + + qint64 diff = m_textures[0]->comparisonKey() - m->m_textures[0]->comparisonKey(); + if (!diff) + diff = m_textures[1]->comparisonKey() - m->m_textures[1]->comparisonKey(); + if (!diff) + diff = m_textures[2]->comparisonKey() - m->m_textures[2]->comparisonKey(); + + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); } void updateBlending() { - setFlag(Blending, qFuzzyCompare(m_opacity, qreal(1.0)) ? false : true); + setFlag(Blending, !qFuzzyCompare(m_opacity, float(1.0))); } void setCurrentFrame(const QVideoFrame &frame) { @@ -363,22 +195,12 @@ public: m_frame = frame; } - void bind(); - void bindTexture(int id, int w, int h, const uchar *bits, GLenum format); - QVideoSurfaceFormat m_format; - QSize m_textureSize; - int m_planeCount; - - GLuint m_textureIds[3]; - GLfloat m_planeWidth[3]; - - qreal m_opacity; + float m_planeWidth[3]; + float m_opacity; QMatrix4x4 m_colorMatrix; - QVideoFrame m_frame; QMutex m_frameMutex; - QScopedPointer m_textures[3]; }; @@ -403,8 +225,9 @@ bool QSGVideoMaterialRhiShader_YUV::updateUniformData(RenderState &state, QSGMat m_colorMatrix = m->m_colorMatrix; if (state.isOpacityDirty()) { - const float opacity = state.opacity(); - memcpy(buf->data() + 64 + 64, &opacity, 4); + m->m_opacity = state.opacity(); + m->updateBlending(); + memcpy(buf->data() + 64 + 64, &m->m_opacity, 4); changed = true; } @@ -413,7 +236,9 @@ bool QSGVideoMaterialRhiShader_YUV::updateUniformData(RenderState &state, QSGMat m->m_textures[1].reset(new QSGVideoTexture); } + m->m_frameMutex.lock(); mapFrame(m); + m->m_frameMutex.unlock(); if (m->m_planeWidth[0] != m_planeWidth[0] || m->m_planeWidth[1] != m_planeWidth[1] @@ -516,26 +341,6 @@ QSGVideoMaterial_YUV::QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format) : m_format(format), m_opacity(1.0) { - setFlag(SupportsRhiShader, true); - memset(m_textureIds, 0, sizeof(m_textureIds)); - - switch (format.pixelFormat()) { - case QVideoFrame::Format_NV12: - case QVideoFrame::Format_NV21: - m_planeCount = 2; - break; - case QVideoFrame::Format_YUV420P: - case QVideoFrame::Format_YV12: - case QVideoFrame::Format_YUV422P: - m_planeCount = 3; - break; - case QVideoFrame::Format_UYVY: - case QVideoFrame::Format_YUYV: - default: - m_planeCount = 2; - break; - } - switch (format.yCbCrColorSpace()) { case QVideoSurfaceFormat::YCbCr_JPEG: m_colorMatrix = QMatrix4x4( @@ -563,120 +368,6 @@ QSGVideoMaterial_YUV::QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format) : setFlag(Blending, false); } -QSGVideoMaterial_YUV::~QSGVideoMaterial_YUV() -{ - if (!m_textureSize.isEmpty()) { - if (QOpenGLContext *current = QOpenGLContext::currentContext()) - current->functions()->glDeleteTextures(m_planeCount, m_textureIds); - else - qWarning() << "QSGVideoMaterial_YUV: Cannot obtain GL context, unable to delete textures"; - } -} - -void QSGVideoMaterial_YUV::bind() -{ - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - QSurfaceFormat::OpenGLContextProfile profile = QOpenGLContext::currentContext()->format().profile(); - - QMutexLocker lock(&m_frameMutex); - if (m_frame.isValid()) { - if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) { - int fw = m_frame.width(); - int fh = m_frame.height(); - - // Frame has changed size, recreate textures... - if (m_textureSize != m_frame.size()) { - if (!m_textureSize.isEmpty()) - functions->glDeleteTextures(m_planeCount, m_textureIds); - functions->glGenTextures(m_planeCount, m_textureIds); - m_textureSize = m_frame.size(); - } - - GLint previousAlignment; - const GLenum texFormat1 = (profile == QSurfaceFormat::CoreProfile) ? GL_RED : GL_LUMINANCE; - const GLenum texFormat2 = (profile == QSurfaceFormat::CoreProfile) ? GL_RG : GL_LUMINANCE_ALPHA; - - functions->glGetIntegerv(GL_UNPACK_ALIGNMENT, &previousAlignment); - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - if (m_format.pixelFormat() == QVideoFrame::Format_UYVY - || m_format.pixelFormat() == QVideoFrame::Format_YUYV) { - int fw = m_frame.width(); - - m_planeWidth[0] = fw; - // In YUYV texture the UV plane appears with the 1/2 of image and Y width. - m_planeWidth[1] = fw / 2; - functions->glActiveTexture(GL_TEXTURE1); - // Either r,b (YUYV) or g,a (UYVY) values are used as source of UV. - // Additionally U and V are set per 2 pixels hence only 1/2 of image width is used. - // Interpreting this properly in shaders allows to not copy or not make conditionals inside shaders, - // only interpretation of data changes. - bindTexture(m_textureIds[1], m_planeWidth[1], m_frame.height(), m_frame.bits(), GL_RGBA); - functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit - // Either red (YUYV) or alpha (UYVY) values are used as source of Y - bindTexture(m_textureIds[0], m_planeWidth[0], m_frame.height(), m_frame.bits(), texFormat2); - } else if (m_format.pixelFormat() == QVideoFrame::Format_NV12 - || m_format.pixelFormat() == QVideoFrame::Format_NV21) { - const int y = 0; - const int uv = 1; - - m_planeWidth[0] = m_planeWidth[1] = qreal(fw) / m_frame.bytesPerLine(y); - - functions->glActiveTexture(GL_TEXTURE1); - bindTexture(m_textureIds[1], m_frame.bytesPerLine(uv) / 2, fh / 2, m_frame.bits(uv), texFormat2); - functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit - bindTexture(m_textureIds[0], m_frame.bytesPerLine(y), fh, m_frame.bits(y), texFormat1); - - } else { // YUV420P || YV12 || YUV422P - const int y = 0; - const int u = m_frame.pixelFormat() == QVideoFrame::Format_YV12 ? 2 : 1; - const int v = m_frame.pixelFormat() == QVideoFrame::Format_YV12 ? 1 : 2; - - m_planeWidth[0] = qreal(fw) / m_frame.bytesPerLine(y); - m_planeWidth[1] = m_planeWidth[2] = qreal(fw) / (2 * m_frame.bytesPerLine(u)); - - const int uvHeight = m_frame.pixelFormat() == QVideoFrame::Format_YUV422P ? fh : fh / 2; - - functions->glActiveTexture(GL_TEXTURE1); - bindTexture(m_textureIds[1], m_frame.bytesPerLine(u), uvHeight, m_frame.bits(u), texFormat1); - functions->glActiveTexture(GL_TEXTURE2); - bindTexture(m_textureIds[2], m_frame.bytesPerLine(v), uvHeight, m_frame.bits(v), texFormat1); - functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit - bindTexture(m_textureIds[0], m_frame.bytesPerLine(y), fh, m_frame.bits(y), texFormat1); - } - - functions->glPixelStorei(GL_UNPACK_ALIGNMENT, previousAlignment); - m_frame.unmap(); - } - - m_frame = QVideoFrame(); - } else { - // Go backwards to finish with GL_TEXTURE0 - for (int i = m_planeCount - 1; i >= 0; --i) { - functions->glActiveTexture(GL_TEXTURE0 + i); - functions->glBindTexture(GL_TEXTURE_2D, m_textureIds[i]); - } - } -} - -void QSGVideoMaterial_YUV::bindTexture(int id, int w, int h, const uchar *bits, GLenum format) -{ - QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions(); - functions->glBindTexture(GL_TEXTURE_2D, id); - functions->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, format, GL_UNSIGNED_BYTE, bits); - // replacement for GL_LUMINANCE_ALPHA in core profile - if (format == GL_RG) { - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_RED); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_GREEN); - } - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - functions->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); -} - QSGVideoNode_YUV::QSGVideoNode_YUV(const QVideoSurfaceFormat &format) : m_format(format) { @@ -695,61 +386,4 @@ void QSGVideoNode_YUV::setCurrentFrame(const QVideoFrame &frame, FrameFlags) markDirty(DirtyMaterial); } -void QSGVideoMaterialShader_YUV_BiPlanar::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - - QSGVideoMaterial_YUV *mat = static_cast(newMaterial); - program()->setUniformValue(m_id_plane1Texture, 0); - program()->setUniformValue(m_id_plane2Texture, 1); - - mat->bind(); - - program()->setUniformValue(m_id_colorMatrix, mat->m_colorMatrix); - program()->setUniformValue(m_id_plane1Width, mat->m_planeWidth[0]); - program()->setUniformValue(m_id_plane2Width, mat->m_planeWidth[1]); - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - -void QSGVideoMaterialShader_YUV_TriPlanar::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - QSGVideoMaterialShader_YUV_BiPlanar::updateState(state, newMaterial, oldMaterial); - - QSGVideoMaterial_YUV *mat = static_cast(newMaterial); - program()->setUniformValue(m_id_plane3Texture, 2); - program()->setUniformValue(m_id_plane3Width, mat->m_planeWidth[2]); -} - -void QSGVideoMaterialShader_UYVY::updateState(const RenderState &state, - QSGMaterial *newMaterial, - QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - - QSGVideoMaterial_YUV *mat = static_cast(newMaterial); - program()->setUniformValue(m_id_yTexture, 0); - program()->setUniformValue(m_id_uvTexture, 1); - - mat->bind(); - - program()->setUniformValue(m_id_colorMatrix, mat->m_colorMatrix); - - if (state.isOpacityDirty()) { - mat->m_opacity = state.opacity(); - program()->setUniformValue(m_id_opacity, GLfloat(mat->m_opacity)); - } - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); -} - QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qsgvideotexture.cpp b/src/qtmultimediaquicktools/qsgvideotexture.cpp index dd31695ef..22f9fdbee 100644 --- a/src/qtmultimediaquicktools/qsgvideotexture.cpp +++ b/src/qtmultimediaquicktools/qsgvideotexture.cpp @@ -166,6 +166,9 @@ void QSGVideoTexturePrivate::updateRhiTexture(QRhi *rhi, QRhiResourceUpdateBatch QRhiTextureUploadDescription desc({ entry }); resourceUpdates->uploadTexture(m_texture.data(), desc); } + if (q->hasMipmaps()) + resourceUpdates->generateMips(m_texture.data()); + } void QSGVideoTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates) diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro index fefb8dec5..a2451e6e2 100644 --- a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro +++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro @@ -20,31 +20,16 @@ SOURCES += \ qdeclarativevideooutput.cpp \ qdeclarativevideooutput_window.cpp -qtConfig(opengl) { - SOURCES += qdeclarativevideooutput_render.cpp \ - qsgvideonode_rgb.cpp \ - qsgvideonode_yuv.cpp \ - qsgvideonode_texture.cpp - HEADERS += qdeclarativevideooutput_render_p.h \ - qsgvideonode_rgb_p.h \ - qsgvideonode_yuv_p.h \ - qsgvideonode_texture_p.h -} +SOURCES += qdeclarativevideooutput_render.cpp \ + qsgvideonode_rgb.cpp \ + qsgvideonode_yuv.cpp \ + qsgvideonode_texture.cpp +HEADERS += qdeclarativevideooutput_render_p.h \ + qsgvideonode_rgb_p.h \ + qsgvideonode_yuv_p.h \ + qsgvideonode_texture_p.h RESOURCES += \ qtmultimediaquicktools.qrc -OTHER_FILES += \ - shaders/monoplanarvideo.vert \ - shaders/rgbvideo_padded.vert \ - shaders/rgbvideo.frag \ - shaders/rgbvideo_swizzle.frag \ - shaders/biplanaryuvvideo.vert \ - shaders/biplanaryuvvideo.frag \ - shaders/biplanaryuvvideo_swizzle.frag \ - shaders/triplanaryuvvideo.vert \ - shaders/triplanaryuvvideo.frag \ - shaders/uyvyvideo.frag \ - shaders/yuyvvideo.frag - load(qt_module) diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc b/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc index 1c0e29c04..ceac8cff4 100644 --- a/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc +++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.qrc @@ -1,37 +1,13 @@ - shaders/monoplanarvideo.vert - shaders/rgbvideo.frag - shaders/rgbvideo_swizzle.frag - shaders/rgbvideo_padded.vert - shaders/biplanaryuvvideo.frag - shaders/biplanaryuvvideo.vert - shaders/biplanaryuvvideo_swizzle.frag - shaders/triplanaryuvvideo.frag - shaders/triplanaryuvvideo.vert - shaders/uyvyvideo.frag - shaders/yuyvvideo.frag - - shaders/monoplanarvideo_core.vert - shaders/rgbvideo_core.frag - shaders/rgbvideo_swizzle_core.frag - shaders/rgbvideo_padded_core.vert - shaders/biplanaryuvvideo_core.frag - shaders/biplanaryuvvideo_core.vert - shaders/biplanaryuvvideo_swizzle_core.frag - shaders/triplanaryuvvideo_core.frag - shaders/triplanaryuvvideo_core.vert - shaders/uyvyvideo_core.frag - shaders/yuyvvideo_core.frag - - shaders_ng/rgba.vert.qsb - shaders_ng/rgba.frag.qsb - shaders_ng/bgra.frag.qsb - shaders_ng/yuv.vert.qsb - shaders_ng/yuv_yv.frag.qsb - shaders_ng/nv12.frag.qsb - shaders_ng/nv21.frag.qsb - shaders_ng/uyvy.frag.qsb - shaders_ng/yuyv.frag.qsb + shaders/rgba.vert.qsb + shaders/rgba.frag.qsb + shaders/bgra.frag.qsb + shaders/yuv.vert.qsb + shaders/yuv_yv.frag.qsb + shaders/nv12.frag.qsb + shaders/nv21.frag.qsb + shaders/uyvy.frag.qsb + shaders/yuyv.frag.qsb diff --git a/src/qtmultimediaquicktools/shaders/bgra.frag b/src/qtmultimediaquicktools/shaders/bgra.frag new file mode 100644 index 000000000..f04e3e721 --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/bgra.frag @@ -0,0 +1,16 @@ +#version 440 + +layout(location = 0) in vec2 qt_TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + float opacity; +} ubuf; + +layout(binding = 1) uniform sampler2D rgbTexture; + +void main() +{ + fragColor = texture(rgbTexture, qt_TexCoord).bgra * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/bgra.frag.qsb b/src/qtmultimediaquicktools/shaders/bgra.frag.qsb new file mode 100644 index 000000000..20c61e92f Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/bgra.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag deleted file mode 100644 index 2ede9108b..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.frag +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; - -void main() -{ - mediump float Y = texture2D(plane1Texture, plane1TexCoord).r; - mediump vec2 UV = texture2D(plane2Texture, plane2TexCoord).ra; - mediump vec4 color = vec4(Y, UV.x, UV.y, 1.); - gl_FragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert deleted file mode 100644 index d01b69078..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo.vert +++ /dev/null @@ -1,13 +0,0 @@ -uniform highp mat4 qt_Matrix; -uniform highp float plane1Width; -uniform highp float plane2Width; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag deleted file mode 100644 index 1261782f8..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 150 core -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 plane1TexCoord; -in vec2 plane2TexCoord; -out vec4 fragColor; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - vec2 UV = texture(plane2Texture, plane2TexCoord).ra; - vec4 color = vec4(Y, UV.x, UV.y, 1.); - fragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert deleted file mode 100644 index 1c162785e..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_core.vert +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -uniform float plane1Width; -uniform float plane2Width; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 plane1TexCoord; -out vec2 plane2TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag deleted file mode 100644 index 560a0d150..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle.frag +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; - -void main() -{ - mediump float Y = texture2D(plane1Texture, plane1TexCoord).r; - mediump vec2 UV = texture2D(plane2Texture, plane2TexCoord).ar; - mediump vec4 color = vec4(Y, UV.x, UV.y, 1.); - gl_FragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag b/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag deleted file mode 100644 index 48ef3fa2c..000000000 --- a/src/qtmultimediaquicktools/shaders/biplanaryuvvideo_swizzle_core.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 150 core -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 plane1TexCoord; -in vec2 plane2TexCoord; -out vec4 fragColor; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - vec2 UV = texture(plane2Texture, plane2TexCoord).ar; - vec4 color = vec4(Y, UV.x, UV.y, 1.); - fragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/compile.bat b/src/qtmultimediaquicktools/shaders/compile.bat new file mode 100755 index 000000000..682cc71b8 --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/compile.bat @@ -0,0 +1,50 @@ +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Copyright (C) 2019 The Qt Company Ltd. +:: Contact: https://www.qt.io/licensing/ +:: +:: This file is part of the QtQuick module of the Qt Toolkit. +:: +:: $QT_BEGIN_LICENSE:LGPL$ +:: Commercial License Usage +:: Licensees holding valid commercial Qt licenses may use this file in +:: accordance with the commercial license agreement provided with the +:: Software or, alternatively, in accordance with the terms contained in +:: a written agreement between you and The Qt Company. For licensing terms +:: and conditions see https://www.qt.io/terms-conditions. For further +:: information use the contact form at https://www.qt.io/contact-us. +:: +:: GNU Lesser General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU Lesser +:: General Public License version 3 as published by the Free Software +:: Foundation and appearing in the file LICENSE.LGPL3 included in the +:: packaging of this file. Please review the following information to +:: ensure the GNU Lesser General Public License version 3 requirements +:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +:: +:: GNU General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU +:: General Public License version 2.0 or (at your option) the GNU General +:: Public license version 3 or any later version approved by the KDE Free +:: Qt Foundation. The licenses are as published by the Free Software +:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +:: included in the packaging of this file. Please review the following +:: information to ensure the GNU General Public License requirements will +:: be met: https://www.gnu.org/licenses/gpl-2.0.html and +:: https://www.gnu.org/licenses/gpl-3.0.html. +:: +:: $QT_END_LICENSE$ +:: +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -o rgba.vert.qsb rgba.vert +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o rgba.frag.qsb rgba.frag +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o bgra.frag.qsb bgra.frag + +qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -o yuv.vert.qsb yuv.vert +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o yuv_yv.frag.qsb yuv_yv.frag + +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o nv12.frag.qsb nv12.frag +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o nv21.frag.qsb nv21.frag +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o uyvy.frag.qsb uyvy.frag +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o yuyv.frag.qsb yuyv.frag diff --git a/src/qtmultimediaquicktools/shaders/monoplanarvideo.vert b/src/qtmultimediaquicktools/shaders/monoplanarvideo.vert deleted file mode 100644 index 19915f2ff..000000000 --- a/src/qtmultimediaquicktools/shaders/monoplanarvideo.vert +++ /dev/null @@ -1,9 +0,0 @@ -uniform highp mat4 qt_Matrix; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord; - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert b/src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert deleted file mode 100644 index 23b9bfae2..000000000 --- a/src/qtmultimediaquicktools/shaders/monoplanarvideo_core.vert +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord; - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/nv12.frag b/src/qtmultimediaquicktools/shaders/nv12.frag new file mode 100644 index 000000000..9ef6bd648 --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/nv12.frag @@ -0,0 +1,25 @@ +#version 440 + +layout(location = 0) in vec2 plane1TexCoord; +layout(location = 1) in vec2 plane2TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + mat4 colorMatrix; + float opacity; + float plane1Width; + float plane2Width; + float plane3Width; +} ubuf; + +layout(binding = 1) uniform sampler2D plane1Texture; +layout(binding = 2) uniform sampler2D plane2Texture; + +void main() +{ + float Y = texture(plane1Texture, plane1TexCoord).r; + vec2 UV = texture(plane2Texture, plane2TexCoord).rg; + vec4 color = vec4(Y, UV.x, UV.y, 1.); + fragColor = ubuf.colorMatrix * color * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/nv12.frag.qsb b/src/qtmultimediaquicktools/shaders/nv12.frag.qsb new file mode 100644 index 000000000..f3402d460 Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/nv12.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/nv21.frag b/src/qtmultimediaquicktools/shaders/nv21.frag new file mode 100644 index 000000000..636294048 --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/nv21.frag @@ -0,0 +1,25 @@ +#version 440 + +layout(location = 0) in vec2 plane1TexCoord; +layout(location = 1) in vec2 plane2TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + mat4 colorMatrix; + float opacity; + float plane1Width; + float plane2Width; + float plane3Width; +} ubuf; + +layout(binding = 1) uniform sampler2D plane1Texture; +layout(binding = 2) uniform sampler2D plane2Texture; + +void main() +{ + float Y = texture(plane1Texture, plane1TexCoord).r; + vec2 UV = texture(plane2Texture, plane2TexCoord).gr; + vec4 color = vec4(Y, UV.x, UV.y, 1.); + fragColor = ubuf.colorMatrix * color * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/nv21.frag.qsb b/src/qtmultimediaquicktools/shaders/nv21.frag.qsb new file mode 100644 index 000000000..b90af8c53 Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/nv21.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/rgba.frag b/src/qtmultimediaquicktools/shaders/rgba.frag new file mode 100644 index 000000000..1623c2cc7 --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/rgba.frag @@ -0,0 +1,16 @@ +#version 440 + +layout(location = 0) in vec2 qt_TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + float opacity; +} ubuf; + +layout(binding = 1) uniform sampler2D rgbTexture; + +void main() +{ + fragColor = texture(rgbTexture, qt_TexCoord) * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/rgba.frag.qsb b/src/qtmultimediaquicktools/shaders/rgba.frag.qsb new file mode 100644 index 000000000..c1ecaa7bf Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/rgba.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/rgba.vert b/src/qtmultimediaquicktools/shaders/rgba.vert new file mode 100644 index 000000000..ebc53a65f --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/rgba.vert @@ -0,0 +1,18 @@ +#version 440 + +layout(location = 0) in vec4 qt_VertexPosition; +layout(location = 1) in vec2 qt_VertexTexCoord; + +layout(location = 0) out vec2 qt_TexCoord; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + float opacity; +} ubuf; + +out gl_PerVertex { vec4 gl_Position; }; + +void main() { + qt_TexCoord = qt_VertexTexCoord; + gl_Position = ubuf.matrix * qt_VertexPosition; +} diff --git a/src/qtmultimediaquicktools/shaders/rgba.vert.qsb b/src/qtmultimediaquicktools/shaders/rgba.vert.qsb new file mode 100644 index 000000000..f655df0db Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/rgba.vert.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo.frag b/src/qtmultimediaquicktools/shaders/rgbvideo.frag deleted file mode 100644 index 673eb4bf7..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo.frag +++ /dev/null @@ -1,8 +0,0 @@ -uniform sampler2D rgbTexture; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; - -void main() -{ - gl_FragColor = texture2D(rgbTexture, qt_TexCoord) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_core.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_core.frag deleted file mode 100644 index ac41c108d..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_core.frag +++ /dev/null @@ -1,10 +0,0 @@ -#version 150 core -uniform sampler2D rgbTexture; -uniform float opacity; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - fragColor = texture(rgbTexture, qt_TexCoord) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert b/src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert deleted file mode 100644 index 5c7c41d13..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_padded.vert +++ /dev/null @@ -1,10 +0,0 @@ -uniform highp mat4 qt_Matrix; -uniform highp float width; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord * vec2(width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert b/src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert deleted file mode 100644 index d4fa8ad76..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_padded_core.vert +++ /dev/null @@ -1,11 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -uniform float width; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 qt_TexCoord; - -void main() { - qt_TexCoord = qt_VertexTexCoord * vec2(width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag deleted file mode 100644 index 99caa19fb..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle.frag +++ /dev/null @@ -1,10 +0,0 @@ -uniform sampler2D rgbTexture; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; -uniform bool hasAlpha; - -void main() -{ - lowp vec4 v = texture2D(rgbTexture, qt_TexCoord); - gl_FragColor = vec4(v.bgr, hasAlpha ? v.a : 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag b/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag deleted file mode 100644 index e952124d1..000000000 --- a/src/qtmultimediaquicktools/shaders/rgbvideo_swizzle_core.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 150 core -uniform sampler2D rgbTexture; -uniform float opacity; -uniform bool hasAlpha; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - vec4 v = texture(rgbTexture, qt_TexCoord); - fragColor = vec4(v.bgr, hasAlpha ? v.a : 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag deleted file mode 100644 index dad8bb5a9..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.frag +++ /dev/null @@ -1,18 +0,0 @@ -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform sampler2D plane3Texture; -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; - -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; -varying highp vec2 plane3TexCoord; - -void main() -{ - mediump float Y = texture2D(plane1Texture, plane1TexCoord).r; - mediump float U = texture2D(plane2Texture, plane2TexCoord).r; - mediump float V = texture2D(plane3Texture, plane3TexCoord).r; - mediump vec4 color = vec4(Y, U, V, 1.); - gl_FragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert deleted file mode 100644 index d76b3f358..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo.vert +++ /dev/null @@ -1,16 +0,0 @@ -uniform highp mat4 qt_Matrix; -uniform highp float plane1Width; -uniform highp float plane2Width; -uniform highp float plane3Width; -attribute highp vec4 qt_VertexPosition; -attribute highp vec2 qt_VertexTexCoord; -varying highp vec2 plane1TexCoord; -varying highp vec2 plane2TexCoord; -varying highp vec2 plane3TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - plane3TexCoord = qt_VertexTexCoord * vec2(plane3Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag deleted file mode 100644 index ad81083f5..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.frag +++ /dev/null @@ -1,19 +0,0 @@ -#version 150 core -uniform sampler2D plane1Texture; -uniform sampler2D plane2Texture; -uniform sampler2D plane3Texture; -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 plane1TexCoord; -in vec2 plane2TexCoord; -in vec2 plane3TexCoord; -out vec4 fragColor; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - float U = texture(plane2Texture, plane2TexCoord).r; - float V = texture(plane3Texture, plane3TexCoord).r; - vec4 color = vec4(Y, U, V, 1.); - fragColor = colorMatrix * color * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert b/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert deleted file mode 100644 index ebf3604e1..000000000 --- a/src/qtmultimediaquicktools/shaders/triplanaryuvvideo_core.vert +++ /dev/null @@ -1,17 +0,0 @@ -#version 150 core -uniform mat4 qt_Matrix; -uniform float plane1Width; -uniform float plane2Width; -uniform float plane3Width; -in vec4 qt_VertexPosition; -in vec2 qt_VertexTexCoord; -out vec2 plane1TexCoord; -out vec2 plane2TexCoord; -out vec2 plane3TexCoord; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(plane2Width, 1); - plane3TexCoord = qt_VertexTexCoord * vec2(plane3Width, 1); - gl_Position = qt_Matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders/uyvy.frag b/src/qtmultimediaquicktools/shaders/uyvy.frag new file mode 100644 index 000000000..f1c7c1aec --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/uyvy.frag @@ -0,0 +1,23 @@ +#version 440 + +layout(location = 0) in vec2 plane1TexCoord; +layout(location = 1) in vec2 plane2TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + mat4 colorMatrix; + float opacity; + float plane1Width; + float plane2Width; + float plane3Width; +} ubuf; + +layout(binding = 1) uniform sampler2D plane1Texture; +layout(binding = 2) uniform sampler2D plane2Texture; + +void main() +{ + vec3 YUV = vec3(texture(plane1Texture, plane1TexCoord).g, texture(plane2Texture, plane2TexCoord).rb); + fragColor = ubuf.colorMatrix * vec4(YUV, 1.0) * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/uyvy.frag.qsb b/src/qtmultimediaquicktools/shaders/uyvy.frag.qsb new file mode 100644 index 000000000..902821fd3 Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/uyvy.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/uyvyvideo.frag b/src/qtmultimediaquicktools/shaders/uyvyvideo.frag deleted file mode 100644 index 244464e73..000000000 --- a/src/qtmultimediaquicktools/shaders/uyvyvideo.frag +++ /dev/null @@ -1,13 +0,0 @@ -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_LUMINANCE_ALPHA, in uyvy Y = a -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in uyvy U = r, V = b -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; - -void main() -{ - mediump vec3 YUV = vec3(texture2D(yTexture, qt_TexCoord).a, texture2D(uvTexture, qt_TexCoord).rb); - - gl_FragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag b/src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag deleted file mode 100644 index b151a7c7f..000000000 --- a/src/qtmultimediaquicktools/shaders/uyvyvideo_core.frag +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 core -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_RG, in uyvy Y = a -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in uyvy U = r, V = b -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - vec3 YUV = vec3(texture(yTexture, qt_TexCoord).a, texture2D(uvTexture, qt_TexCoord).rb); - fragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/yuv.vert b/src/qtmultimediaquicktools/shaders/yuv.vert new file mode 100644 index 000000000..6f103372f --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/yuv.vert @@ -0,0 +1,26 @@ +#version 440 + +layout(location = 0) in vec4 qt_VertexPosition; +layout(location = 1) in vec2 qt_VertexTexCoord; + +layout(location = 0) out vec2 plane1TexCoord; +layout(location = 1) out vec2 plane2TexCoord; +layout(location = 2) out vec2 plane3TexCoord; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + mat4 colorMatrix; + float opacity; + float plane1Width; + float plane2Width; + float plane3Width; +} ubuf; + +out gl_PerVertex { vec4 gl_Position; }; + +void main() { + plane1TexCoord = qt_VertexTexCoord * vec2(ubuf.plane1Width, 1); + plane2TexCoord = qt_VertexTexCoord * vec2(ubuf.plane2Width, 1); + plane3TexCoord = qt_VertexTexCoord * vec2(ubuf.plane3Width, 1); + gl_Position = ubuf.matrix * qt_VertexPosition; +} diff --git a/src/qtmultimediaquicktools/shaders/yuv.vert.qsb b/src/qtmultimediaquicktools/shaders/yuv.vert.qsb new file mode 100644 index 000000000..0cde24cf6 Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/yuv.vert.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/yuv_yv.frag b/src/qtmultimediaquicktools/shaders/yuv_yv.frag new file mode 100644 index 000000000..07ea52aab --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/yuv_yv.frag @@ -0,0 +1,28 @@ +#version 440 + +layout(location = 0) in vec2 plane1TexCoord; +layout(location = 1) in vec2 plane2TexCoord; +layout(location = 2) in vec2 plane3TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + mat4 colorMatrix; + float opacity; + float plane1Width; + float plane2Width; + float plane3Width; +} ubuf; + +layout(binding = 1) uniform sampler2D plane1Texture; +layout(binding = 2) uniform sampler2D plane2Texture; +layout(binding = 3) uniform sampler2D plane3Texture; + +void main() +{ + float Y = texture(plane1Texture, plane1TexCoord).r; + float U = texture(plane2Texture, plane2TexCoord).r; + float V = texture(plane3Texture, plane3TexCoord).r; + vec4 color = vec4(Y, U, V, 1.); + fragColor = ubuf.colorMatrix * color * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb b/src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb new file mode 100644 index 000000000..b6e3fe366 Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/yuv_yv.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/yuyv.frag b/src/qtmultimediaquicktools/shaders/yuyv.frag new file mode 100644 index 000000000..454fdc21e --- /dev/null +++ b/src/qtmultimediaquicktools/shaders/yuyv.frag @@ -0,0 +1,23 @@ +#version 440 + +layout(location = 0) in vec2 plane1TexCoord; +layout(location = 1) in vec2 plane2TexCoord; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 matrix; + mat4 colorMatrix; + float opacity; + float plane1Width; + float plane2Width; + float plane3Width; +} ubuf; + +layout(binding = 1) uniform sampler2D plane1Texture; +layout(binding = 2) uniform sampler2D plane2Texture; + +void main() +{ + vec3 YUV = vec3(texture(plane1Texture, plane1TexCoord).r, texture(plane2Texture, plane2TexCoord).ga); + fragColor = ubuf.colorMatrix * vec4(YUV, 1.0) * ubuf.opacity; +} diff --git a/src/qtmultimediaquicktools/shaders/yuyv.frag.qsb b/src/qtmultimediaquicktools/shaders/yuyv.frag.qsb new file mode 100644 index 000000000..543361af6 Binary files /dev/null and b/src/qtmultimediaquicktools/shaders/yuyv.frag.qsb differ diff --git a/src/qtmultimediaquicktools/shaders/yuyvvideo.frag b/src/qtmultimediaquicktools/shaders/yuyvvideo.frag deleted file mode 100644 index c2ad65b78..000000000 --- a/src/qtmultimediaquicktools/shaders/yuyvvideo.frag +++ /dev/null @@ -1,13 +0,0 @@ -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_LUMINANCE_ALPHA, in yuyv Y = r -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in yuyv U = g, V = a -uniform mediump mat4 colorMatrix; -uniform lowp float opacity; -varying highp vec2 qt_TexCoord; - -void main() -{ - mediump vec3 YUV = vec3(texture2D(yTexture, qt_TexCoord).r, texture2D(uvTexture, qt_TexCoord).ga); - - gl_FragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag b/src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag deleted file mode 100644 index a30d7818a..000000000 --- a/src/qtmultimediaquicktools/shaders/yuyvvideo_core.frag +++ /dev/null @@ -1,14 +0,0 @@ -#version 150 core -// Reference: qgsvideonode_yuv.cpp:387 to 398 -uniform sampler2D yTexture; // Y component passed as GL_RG, in yuyv Y = r -uniform sampler2D uvTexture; // UV component passed as RGBA macropixel, in uyvy U = g, V = a -uniform mat4 colorMatrix; -uniform float opacity; -in vec2 qt_TexCoord; -out vec4 fragColor; - -void main() -{ - vec3 YUV = vec3(texture(yTexture, qt_TexCoord).r, texture2D(uvTexture, qt_TexCoord).ga); - fragColor = colorMatrix * vec4(YUV, 1.0) * opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/bgra.frag b/src/qtmultimediaquicktools/shaders_ng/bgra.frag deleted file mode 100644 index f04e3e721..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/bgra.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 qt_TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - float opacity; -} ubuf; - -layout(binding = 1) uniform sampler2D rgbTexture; - -void main() -{ - fragColor = texture(rgbTexture, qt_TexCoord).bgra * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb deleted file mode 100644 index 20c61e92f..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/bgra.frag.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/compile.bat b/src/qtmultimediaquicktools/shaders_ng/compile.bat deleted file mode 100755 index 682cc71b8..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/compile.bat +++ /dev/null @@ -1,50 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2019 The Qt Company Ltd. -:: Contact: https://www.qt.io/licensing/ -:: -:: This file is part of the QtQuick module of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: Commercial License Usage -:: Licensees holding valid commercial Qt licenses may use this file in -:: accordance with the commercial license agreement provided with the -:: Software or, alternatively, in accordance with the terms contained in -:: a written agreement between you and The Qt Company. For licensing terms -:: and conditions see https://www.qt.io/terms-conditions. For further -:: information use the contact form at https://www.qt.io/contact-us. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 3 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL3 included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 3 requirements -:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -:: -:: GNU General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU -:: General Public License version 2.0 or (at your option) the GNU General -:: Public license version 3 or any later version approved by the KDE Free -:: Qt Foundation. The licenses are as published by the Free Software -:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -:: included in the packaging of this file. Please review the following -:: information to ensure the GNU General Public License requirements will -:: be met: https://www.gnu.org/licenses/gpl-2.0.html and -:: https://www.gnu.org/licenses/gpl-3.0.html. -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -o rgba.vert.qsb rgba.vert -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o rgba.frag.qsb rgba.frag -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o bgra.frag.qsb bgra.frag - -qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -o yuv.vert.qsb yuv.vert -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o yuv_yv.frag.qsb yuv_yv.frag - -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o nv12.frag.qsb nv12.frag -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o nv21.frag.qsb nv21.frag -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o uyvy.frag.qsb uyvy.frag -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o yuyv.frag.qsb yuyv.frag diff --git a/src/qtmultimediaquicktools/shaders_ng/nv12.frag b/src/qtmultimediaquicktools/shaders_ng/nv12.frag deleted file mode 100644 index 9ef6bd648..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/nv12.frag +++ /dev/null @@ -1,25 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 plane1TexCoord; -layout(location = 1) in vec2 plane2TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - mat4 colorMatrix; - float opacity; - float plane1Width; - float plane2Width; - float plane3Width; -} ubuf; - -layout(binding = 1) uniform sampler2D plane1Texture; -layout(binding = 2) uniform sampler2D plane2Texture; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - vec2 UV = texture(plane2Texture, plane2TexCoord).rg; - vec4 color = vec4(Y, UV.x, UV.y, 1.); - fragColor = ubuf.colorMatrix * color * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb deleted file mode 100644 index f3402d460..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/nv12.frag.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/nv21.frag b/src/qtmultimediaquicktools/shaders_ng/nv21.frag deleted file mode 100644 index 636294048..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/nv21.frag +++ /dev/null @@ -1,25 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 plane1TexCoord; -layout(location = 1) in vec2 plane2TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - mat4 colorMatrix; - float opacity; - float plane1Width; - float plane2Width; - float plane3Width; -} ubuf; - -layout(binding = 1) uniform sampler2D plane1Texture; -layout(binding = 2) uniform sampler2D plane2Texture; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - vec2 UV = texture(plane2Texture, plane2TexCoord).gr; - vec4 color = vec4(Y, UV.x, UV.y, 1.); - fragColor = ubuf.colorMatrix * color * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb deleted file mode 100644 index b90af8c53..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/nv21.frag.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.frag b/src/qtmultimediaquicktools/shaders_ng/rgba.frag deleted file mode 100644 index 1623c2cc7..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/rgba.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 qt_TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - float opacity; -} ubuf; - -layout(binding = 1) uniform sampler2D rgbTexture; - -void main() -{ - fragColor = texture(rgbTexture, qt_TexCoord) * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb deleted file mode 100644 index c1ecaa7bf..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/rgba.frag.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.vert b/src/qtmultimediaquicktools/shaders_ng/rgba.vert deleted file mode 100644 index ebc53a65f..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/rgba.vert +++ /dev/null @@ -1,18 +0,0 @@ -#version 440 - -layout(location = 0) in vec4 qt_VertexPosition; -layout(location = 1) in vec2 qt_VertexTexCoord; - -layout(location = 0) out vec2 qt_TexCoord; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - float opacity; -} ubuf; - -out gl_PerVertex { vec4 gl_Position; }; - -void main() { - qt_TexCoord = qt_VertexTexCoord; - gl_Position = ubuf.matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb b/src/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb deleted file mode 100644 index f655df0db..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/rgba.vert.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag b/src/qtmultimediaquicktools/shaders_ng/uyvy.frag deleted file mode 100644 index f1c7c1aec..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag +++ /dev/null @@ -1,23 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 plane1TexCoord; -layout(location = 1) in vec2 plane2TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - mat4 colorMatrix; - float opacity; - float plane1Width; - float plane2Width; - float plane3Width; -} ubuf; - -layout(binding = 1) uniform sampler2D plane1Texture; -layout(binding = 2) uniform sampler2D plane2Texture; - -void main() -{ - vec3 YUV = vec3(texture(plane1Texture, plane1TexCoord).g, texture(plane2Texture, plane2TexCoord).rb); - fragColor = ubuf.colorMatrix * vec4(YUV, 1.0) * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb deleted file mode 100644 index 902821fd3..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/uyvy.frag.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv.vert b/src/qtmultimediaquicktools/shaders_ng/yuv.vert deleted file mode 100644 index 6f103372f..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/yuv.vert +++ /dev/null @@ -1,26 +0,0 @@ -#version 440 - -layout(location = 0) in vec4 qt_VertexPosition; -layout(location = 1) in vec2 qt_VertexTexCoord; - -layout(location = 0) out vec2 plane1TexCoord; -layout(location = 1) out vec2 plane2TexCoord; -layout(location = 2) out vec2 plane3TexCoord; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - mat4 colorMatrix; - float opacity; - float plane1Width; - float plane2Width; - float plane3Width; -} ubuf; - -out gl_PerVertex { vec4 gl_Position; }; - -void main() { - plane1TexCoord = qt_VertexTexCoord * vec2(ubuf.plane1Width, 1); - plane2TexCoord = qt_VertexTexCoord * vec2(ubuf.plane2Width, 1); - plane3TexCoord = qt_VertexTexCoord * vec2(ubuf.plane3Width, 1); - gl_Position = ubuf.matrix * qt_VertexPosition; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb b/src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb deleted file mode 100644 index 0cde24cf6..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/yuv.vert.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag b/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag deleted file mode 100644 index 07ea52aab..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag +++ /dev/null @@ -1,28 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 plane1TexCoord; -layout(location = 1) in vec2 plane2TexCoord; -layout(location = 2) in vec2 plane3TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - mat4 colorMatrix; - float opacity; - float plane1Width; - float plane2Width; - float plane3Width; -} ubuf; - -layout(binding = 1) uniform sampler2D plane1Texture; -layout(binding = 2) uniform sampler2D plane2Texture; -layout(binding = 3) uniform sampler2D plane3Texture; - -void main() -{ - float Y = texture(plane1Texture, plane1TexCoord).r; - float U = texture(plane2Texture, plane2TexCoord).r; - float V = texture(plane3Texture, plane3TexCoord).r; - vec4 color = vec4(Y, U, V, 1.); - fragColor = ubuf.colorMatrix * color * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb deleted file mode 100644 index b6e3fe366..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/yuv_yv.frag.qsb and /dev/null differ diff --git a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag b/src/qtmultimediaquicktools/shaders_ng/yuyv.frag deleted file mode 100644 index 454fdc21e..000000000 --- a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag +++ /dev/null @@ -1,23 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 plane1TexCoord; -layout(location = 1) in vec2 plane2TexCoord; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 matrix; - mat4 colorMatrix; - float opacity; - float plane1Width; - float plane2Width; - float plane3Width; -} ubuf; - -layout(binding = 1) uniform sampler2D plane1Texture; -layout(binding = 2) uniform sampler2D plane2Texture; - -void main() -{ - vec3 YUV = vec3(texture(plane1Texture, plane1TexCoord).r, texture(plane2Texture, plane2TexCoord).ga); - fragColor = ubuf.colorMatrix * vec4(YUV, 1.0) * ubuf.opacity; -} diff --git a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb b/src/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb deleted file mode 100644 index 543361af6..000000000 Binary files a/src/qtmultimediaquicktools/shaders_ng/yuyv.frag.qsb and /dev/null differ -- cgit v1.2.3