如何将ShaderEffect的输出反馈到QML / QtQuick2中的相同ShaderEffect中

时间:2014-03-24 04:00:25

标签: fragment-shader qtquick2

问题

我想将ShaderEffect的输出提供给自身,有效地生成反馈循环。

我天真的尝试包括简单地链接ShaderEffectSource和ShaderEffect,如下所示:

    ShaderEffectSource {
        id:buf1;
        sourceItem:  effect;
    }

    ShaderEffect {
        id:effect;
        property variant src: buf1;
        //fragment shader then uses src as texture
    }

我的下一个天真的方法包括将第二个ShaderEffectSource引入混合中,如下所示:

    ShaderEffectSource {
        id:buf1;
        sourceItem:  effect;
    }

    ShaderEffectSource {
        id:buf2;
        sourceItem:  buf1;
    }

    ShaderEffect {
        id:effect;
        property variant src: buf2;
        //fragment shader then uses src as texture
    }

然而,这些方法都不起作用。它似乎一步到位,但最终从未反馈过。

我有一种感觉,这是可能的,但我对QML相当新,而且很可能是非常合乎逻辑且简单的解决方案。欢迎任何提示!

答案

首选简短工作副本片段的答案: - )

2 个答案:

答案 0 :(得分:1)

这很容易解决。从documentation我发现有一个recursive property可以使用递归着色器(duh)!例如代码:

ShaderEffectSource {
    id:buf1;
    recursive:true;
    sourceItem:  effect;
}

ShaderEffect {
    id:effect;
    property variant src: buf1;
    //fragment shader then uses src as texture
}

答案 1 :(得分:1)

有一些使用递归ShaderEffectSource对从here链接的UI进行反应扩散和流体动力学效果的示例。