Android Renderscript中的问题重载功能

时间:2011-04-27 00:13:42

标签: android android-3.0-honeycomb renderscript

我一直在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)编写带指针的重载函数,但似乎都没有工作。

1 个答案:

答案 0 :(得分:1)

Renderscript尝试为此函数创建一个Java包装器,以便可以从Java调用它。 Java中没有指针类型,因此该函数不可导出。这里的解决方案是使函数静态。