0

我想在 android 中创建一个渲染脚本,其中一个数组被传递给 .rs 文件。在这些值上进行一些计算并将其发送回用户。

我对渲染脚本的了解很少,所以我写的也可能完全错误。请帮帮我。

Android 活动 公共类 RenderTemp 扩展 Activity {

    private RenderScript mRS;
    private ScriptC_snow mScript;
    int[] indices;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.render);
        indices = new int[2];
        indices[0] = 1;
        indices[1] = 2;
        createScript();
    }

    private void createScript() {
        mRS = RenderScript.create(this);
        Allocation mIN = Allocation.createSized(mRS, Element.I32(mRS), indices.length);
        mIN.copyFrom(indices);
        mScript = new ScriptC_snow(mRS);
        mScript.forEach_root(mIN);
        mIN.copyTo(indices);
    }
}

雪.rs

#pragma version(1)
#pragma rs java_package_name(#package name)


int32_t *mIN;

void __attribute__((kernel)) root(int32_t in)
{
    in = in + 2;
}
4

1 回答 1

1

在内核中修改“in”不会导致任何更新。您可以更改它,使您的 root() 函数也具有 int32_t 的返回值。然后执行“return in + 2;”。最后,您可以将输入和输出的 mIN 传递给 forEach(例如“mScript.forEach_root(mIn, mIn);”)。尽管这对您有用,但我强烈建议您将输入和输出分配分开以进行任何实际工作,因为这样的输入/输出别名可以防止编译器优化更复杂的代码。

于 2016-12-14T02:43:08.353 回答