片段着色器-如何将ShaderEffect的输出反馈到QML/QtQuick2中的同一个ShaderEffect



问题

我想将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还很陌生,很可能非常合乎逻辑和简单的解决方案还没有找到。欢迎任何提示!

回答

最好使用带有简短工作副本可粘贴片段的答案:-(

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

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

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

最新更新