我想在android中创建一个renderscript,其中一个数组被传递给.rs文件。在这些值上进行一些计算并将其发送回用户。
我对renderscript的理解很少,所以我写的也可能完全错误。请帮帮我。
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);
}
}
snow.rs
#pragma version(1)
#pragma rs java_package_name(#package name)
int32_t *mIN;
void __attribute__((kernel)) root(int32_t in)
{
in = in + 2;
}
答案 0 :(得分:1)
修改""在你的内核中不会导致任何更新。您可以更改它,以便root()函数的返回值也为int32_t。然后做"返回+ 2;"。最后,您可以将输入和输出的mIN传递给forEach(所以" mScript.forEach_root(mIn,mIn);")。即使这对您有用,我强烈建议您将输入和输出分配分开用于任何实际工作,因为像这样的别名输入/输出可能会阻止编译器优化更复杂的代码。