私はAndroid3.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でサポートされていないパラメータが少なくとも1つあります:func'gClearColor'のエクスポートに失敗しました
clangのドキュメントに基づいて、(a)組み込み関数名をオーバーロードし、(b)ポインターを受け取るオーバーロードされた関数を作成できるはずですが、どちらも機能していないようです。