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" 个参数。
我为 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" 个参数。