diff options
Diffstat (limited to 'src/core/compositor/stream_video_node.cpp')
-rw-r--r-- | src/core/compositor/stream_video_node.cpp | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/src/core/compositor/stream_video_node.cpp b/src/core/compositor/stream_video_node.cpp deleted file mode 100644 index fb9501f24..000000000 --- a/src/core/compositor/stream_video_node.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine 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$ -** -****************************************************************************/ - -#include "stream_video_node.h" - -#include <QtQuick/qsgtexture.h> - -namespace QtWebEngineCore { - -class StreamVideoMaterialShader : public QSGMaterialShader -{ -public: - StreamVideoMaterialShader(TextureTarget target) : m_target(target) { } - virtual void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override; - - char const *const *attributeNames() const override { - static const char *names[] = { - "a_position", - "a_texCoord", - 0 - }; - return names; - } - -protected: - const char *vertexShader() const override { - // Keep in sync with cc::VertexShaderVideoTransform - static const char *shader = - "attribute highp vec4 a_position;\n" - "attribute mediump vec2 a_texCoord;\n" - "uniform highp mat4 matrix;\n" - "uniform highp mat4 texMatrix;\n" - "varying mediump vec2 v_texCoord;\n" - "void main() {\n" - " gl_Position = matrix * a_position;\n" - " v_texCoord = vec4(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0)).xy;\n" - "}"; - return shader; - } - - const char *fragmentShader() const override { - // Keep in sync with cc::FragmentShaderRGBATexAlpha - static const char *shaderExternal = - "#extension GL_OES_EGL_image_external : require\n" - "varying mediump vec2 v_texCoord;\n" - "uniform samplerExternalOES s_texture;\n" - "uniform lowp float alpha;\n" - "void main() {\n" - " lowp vec4 texColor = texture2D(s_texture, v_texCoord);\n" - " gl_FragColor = texColor * alpha;\n" - "}"; - static const char *shader2DRect = - "#extension GL_ARB_texture_rectangle : require\n" - "varying mediump vec2 v_texCoord;\n" - "uniform sampler2DRect s_texture;\n" - "uniform lowp float alpha;\n" - "void main() {\n" - " lowp vec4 texColor = texture2DRect(s_texture, v_texCoord);\n" - " gl_FragColor = texColor * alpha;\n" - "}"; - if (m_target == ExternalTarget) - return shaderExternal; - else - return shader2DRect; - } - - virtual void initialize() override { - m_id_matrix = program()->uniformLocation("matrix"); - m_id_sTexture = program()->uniformLocation("s_texture"); - m_id_texMatrix = program()->uniformLocation("texMatrix"); - m_id_opacity = program()->uniformLocation("alpha"); - } - - int m_id_matrix; - int m_id_texMatrix; - int m_id_sTexture; - int m_id_opacity; - TextureTarget m_target; -}; - -void StreamVideoMaterialShader::updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) -{ - Q_UNUSED(oldMaterial); - - StreamVideoMaterial *mat = static_cast<StreamVideoMaterial *>(newMaterial); - program()->setUniformValue(m_id_sTexture, 0); - - mat->m_texture->bind(); - - if (state.isOpacityDirty()) - program()->setUniformValue(m_id_opacity, state.opacity()); - - if (state.isMatrixDirty()) - program()->setUniformValue(m_id_matrix, state.combinedMatrix()); - - program()->setUniformValue(m_id_texMatrix, mat->m_texMatrix); -} - -StreamVideoMaterial::StreamVideoMaterial(QSGTexture *texture, TextureTarget target) - : m_texture(texture) - , m_target(target) -{ -} - -QSGMaterialShader *StreamVideoMaterial::createShader() const -{ - return new StreamVideoMaterialShader(m_target); -} - -StreamVideoNode::StreamVideoNode(QSGTexture *texture, bool flip, TextureTarget target) - : m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4) - , m_flip(flip) -{ - setGeometry(&m_geometry); - setFlag(QSGNode::OwnsMaterial); - m_material = new StreamVideoMaterial(texture, target); - setMaterial(m_material); -} - -void StreamVideoNode::setRect(const QRectF &rect) -{ - if (m_flip) - QSGGeometry::updateTexturedRectGeometry(geometry(), rect, QRectF(0, 1, 1, -1)); - else - QSGGeometry::updateTexturedRectGeometry(geometry(), rect, QRectF(0, 0, 1, 1)); -} - -void StreamVideoNode::setTextureMatrix(const QMatrix4x4 &matrix) -{ - m_material->m_texMatrix = matrix; -} - -} // namespace |