RenderScript ScriptGroups - 从第二个内核中的全局脚本获取输出

RenderScript ScriptGroups - getting Output from script global in second Kernel

我想将两个 Renderscript 脚本组合成一个 scriptGroup。第一个是 ScriptIntrinsicBlur。基于模糊的 U8 分配作为输入,第二个脚本计算两个东西:梯度和梯度方向。后者是第二个内核的正式out-Allocation。第一个是通过 rsSetElementAt_float() 填充的全局分配。现在,我发现第二个分配在执行 scriptGroup 后返回为空。

问题:我的假设是否正确,对于 scriptGroup 您不能使用脚本全局变量 - 或者至少不能通过 rsSetElementAt_(...) 更改它们?

更新:我意识到使用 U8 作为 ScriptIntrinsicBlur 的输出和专有内核的输入所带来的性能提升已经非常令人满意,即使是在两个脚本的简单顺序设置中也是如此。这主要是因为它避免了先将 ScriptIntrinsicBlur 的输出分配复制到 Java 数组中,然后再将其作为单独的输入分配传递给第二个内核。

之前,我使用 U8_4(即等效位图)作为 ScriptIntrinsicBlur 的输出,然后将其转换为一维灰度 int[] 数组,然后将其作为 in-Allocation 传递给专有内核...现在,在将分配输入 ScriptIntrinsicBlur 之前,我已经转换为灰度字节 [](即 U8),并将 U8 也用作第二个内核的输入。

这是我在使用 RS 时反复意识到的:尽可能简化数据流真的很值得,速度提升非常好。 (也许我会在稍后阶段检查Scriptgroup问题,至于现在我对结果很满意)。

像这样使用全局脚本应该没有问题。它不像输出分配那样有效,但是是可能的。您提到 out 分配是空的,您在全局脚本中看到了什么?