diff --git a/src/declarativeimports/core/CMakeLists.txt b/src/declarativeimports/core/CMakeLists.txt index 689a4b6c5..c0b7ec631 100644 --- a/src/declarativeimports/core/CMakeLists.txt +++ b/src/declarativeimports/core/CMakeLists.txt @@ -24,6 +24,8 @@ set(corebindings_SRCS windowthumbnail.cpp ) +qt5_add_resources(corebindings_SRCS shaders.qrc) + add_library(corebindingsplugin SHARED ${corebindings_SRCS}) target_link_libraries(corebindingsplugin Qt5::Quick diff --git a/src/declarativeimports/core/fadingmaterial.frag b/src/declarativeimports/core/fadingmaterial.frag new file mode 100644 index 000000000..b23f8debb --- /dev/null +++ b/src/declarativeimports/core/fadingmaterial.frag @@ -0,0 +1,10 @@ +varying highp vec2 v_coord; +uniform sampler2D u_src; +uniform sampler2D u_target; +uniform highp float u_transitionProgress; +uniform lowp float qt_Opacity; +void main() { + lowp vec4 tex1 = texture2D(u_target, v_coord); + lowp vec4 tex2 = texture2D(u_src, v_coord); + gl_FragColor = mix(tex2, tex1, u_transitionProgress) * qt_Opacity; +} diff --git a/src/declarativeimports/core/fadingmaterial.vert b/src/declarativeimports/core/fadingmaterial.vert new file mode 100644 index 000000000..feb007bd5 --- /dev/null +++ b/src/declarativeimports/core/fadingmaterial.vert @@ -0,0 +1,8 @@ +uniform highp mat4 qt_Matrix; +attribute highp vec4 qt_Vertex; +attribute highp vec2 qt_MultiTexCoord0; +varying highp vec2 v_coord; +void main() { + v_coord = qt_MultiTexCoord0; + gl_Position = qt_Matrix * qt_Vertex; +} diff --git a/src/declarativeimports/core/fadingnode.cpp b/src/declarativeimports/core/fadingnode.cpp index 40f5287ce..3ec5a5fda 100644 --- a/src/declarativeimports/core/fadingnode.cpp +++ b/src/declarativeimports/core/fadingnode.cpp @@ -34,9 +34,7 @@ class FadingMaterialShader : public QSGSimpleMaterialShader { QSG_DECLARE_SIMPLE_SHADER(FadingMaterialShader, FadingMaterialState) public: - const char* fragmentShader() const Q_DECL_OVERRIDE; - const char* vertexShader() const Q_DECL_OVERRIDE; - + FadingMaterialShader(); using QSGSimpleMaterialShader::updateState; virtual void updateState(const FadingMaterialState* newState, const FadingMaterialState* oldState) override; QList attributes() const Q_DECL_OVERRIDE; @@ -47,38 +45,18 @@ private: int m_progressId = 0; }; + +FadingMaterialShader::FadingMaterialShader() +{ + setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/plasma-framework/shaders/fadingmaterial.frag")); + setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/plasma-framework/shaders/fadingmaterial.vert")); +} + QList FadingMaterialShader::attributes() const { return QList() << "qt_Vertex" << "qt_MultiTexCoord0"; } -const char* FadingMaterialShader::vertexShader() const -{ - return "uniform highp mat4 qt_Matrix;" - "attribute highp vec4 qt_Vertex;" - "attribute highp vec2 qt_MultiTexCoord0;" - "varying highp vec2 v_coord;" - "void main() {" - " v_coord = qt_MultiTexCoord0;" - " gl_Position = qt_Matrix * qt_Vertex;" - " }"; -} - -const char* FadingMaterialShader::fragmentShader() const -{ - return "varying highp vec2 v_coord;" - "uniform sampler2D u_src;" - "uniform sampler2D u_target;" - "uniform highp float u_transitionProgress;" - "uniform lowp float qt_Opacity;" - "void main() {" - "lowp vec4 tex1 = texture2D(u_target, v_coord);" - "lowp vec4 tex2 = texture2D(u_src, v_coord);" - "gl_FragColor = mix(tex2, tex1, u_transitionProgress) * qt_Opacity;" - "}"; -} - - void FadingMaterialShader::updateState(const FadingMaterialState* newState, const FadingMaterialState* oldState) { if (!oldState || oldState->source != newState->source) { diff --git a/src/declarativeimports/core/shaders.qrc b/src/declarativeimports/core/shaders.qrc new file mode 100644 index 000000000..92213a5ba --- /dev/null +++ b/src/declarativeimports/core/shaders.qrc @@ -0,0 +1,6 @@ + + + fadingmaterial.vert + fadingmaterial.frag + +