我一直在Android 3.0的renderscript中编写一些辅助函数,当我尝试重载内置函数(甚至一个声明为可重载的函数)时遇到了问题,或者尝试声明一个带有指针的函数
文件:* graphics_helper.rsh *
typedef struct color4_s {
float red;
float blue;
float green;
float alpha;
} color;
extern void __attribute__((overloadable))
rsgClearColor(color c);
文件:* graphics_helper.rs *
inline void __attribute__((overloadable)) rsgClearColor(color c) {
rsgClearColor(c.red,c.green,c.blue,c.alpha);
}
当尝试如上编译时,我收到错误
错误:函数名前缀无效, “rs”保留:'rsgClearColor'
为了使函数编译,我必须更改它的名称(例如gClearColor
)。此外,如果我尝试将一个带有指向结构的指针的函数原型化,那么Android工具似乎会抱怨。因此,例如(使用与上面相同的结构),
extern void __attribute__((overloadable))
gClearColor(color* c);
产生错误
无法导出该功能 _Z11gClearColorP8color4_s。至少有一个参数的类型不是 得到了支持 reflectionRSContext :: processExport: 无法导出func'gClearColor'
基于clang documentation我应该能够(a)重载内置函数名称和(b)编写带指针的重载函数,但似乎都没有工作。
答案 0 :(得分:1)
Renderscript尝试为此函数创建一个Java包装器,以便可以从Java调用它。 Java中没有指针类型,因此该函数不可导出。这里的解决方案是使函数静态。