0

私は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)ポインターを受け取るオーバーロードされた関数を作成できるはずですが、どちらも機能していないようです。

4

1 に答える 1

1

Renderscriptは、この関数のJavaラッパーを作成しようとするため、Javaから呼び出すことができます。Javaにはポインタ型がないため、関数はエクスポートできません。ここでの解決策は、関数を静的にすることです。

于 2011-10-19T15:23:11.760 に答える