Проблема перегрузки функций в Android Renderscript - PullRequest
0 голосов
/ 27 апреля 2011

Я писал некоторые вспомогательные функции в рендеринге 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 Я должен иметь возможность (а) перегружать имена встроенных функций и (б) писать перегруженные функции, которые принимают указатели, но ни одна из них не работает.

1 Ответ

1 голос
/ 19 октября 2011

Renderscript пытается создать оболочку Java для этой функции, чтобы ее можно было вызывать из Java.В Java нет указателя, поэтому функция не экспортируется.Решение здесь состоит в том, чтобы сделать функцию статической.

...