我一直在 Android 3.0 的渲染脚本中编写一些辅助函数,当我尝试重载内置函数(甚至声明为可重载的函数)或尝试声明一个带指针的函数时遇到了问题。
文件:*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 导出失败。至少有一个参数的类型不受反射RSContext::processExport 支持:未能导出 func 'gClearColor'
根据clang 文档,我应该能够(a)重载内置函数名称和(b)编写带指针的重载函数,但似乎都不起作用。