0

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

4

1 回答 1

1

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

于 2011-10-19T15:23:11.760 回答