Android renderscript函数自动设置为内核,如何避免?

Android renderscript function set as kernel autmoatically, how to avoid it?

我为 Android API16+

编译 renderscript 代码

我有脚本功能:

void setBuffers(uchar *y, uchar *u, uchar *v){
...
}

有了这个我想设置脚本的内部指针(分配)。 但是编译器将所有带有指针参数的函数都视为具有 RS_KERNEL 属性,并使其成为内核函数,Java 代码生成为 forEach_setBuffers,或者抱怨 y 必须为 int(对于内核为真)。

我假设添加此自动内核模式是为了简化,这样我们就不必在脚本中标记函数。好的。

但我需要使函数 可调用 以便 Java 代码包含 invoke_setBuffers。我该怎么做?

您不能拥有接受指针的可调用对象,因此这就是 "shortcut" 将其标记为内核的原因。如果你确实有一个接受指针的函数,但不需要反映在 Java 中,你可以将它标记为 "static" 以确保它不会被视为内核。要从 Java 中获取实际的分配数据,您应该让这个可调用的参数取而代之的是 "rs_allocation" 个参数。