Возврат структуры Renderscript из ядра Renderscript

Я хочу вернуть массив структур из моего ядра рендерскрипта. Моя проблема в том, что, хотя я могу создать массив структуры в java, используя сгенерированный код, и передать его моему корневому методу, получив выделение сгенерированного из него массива, я не могу вернуть массив обратно в java. В документации Renderscript говорится, что для копирования из выделения используется метод copyTo, который гарантирует, что скрипт рендеринга завершил работу с ним. Однако этот метод поддерживает только числа с плавающей запятой, целые числа, байты, растровые изображения. Даже после ожидания нескольких секунд перед доступом к массиву, чтобы убедиться, что рендерскрипт завершил работу, данные в выделенном выделении вообще не изменились, поэтому мне интересно, не ошибаюсь ли я.

Любая помощь приветствуется

Изменить для уточнения:

Я создаю массив своей структуры в java со следующим

    ScriptField_NBody bodys = ScriptField_NBody.create1D(mRS, size, Allocation.USAGE_SCRIPT);
    ScriptField_NBody outBodys = new ScriptField_NBody(mRS, 1);

Затем я вызываю свою функцию рендерскрипта после заполнения тел

    nBodyScript.forEach_root(bodys.getAllocation(), outBodys.getAllocation())

Мой рендерскрипт должен просто копировать тела в outBody.

 void root(const NBody_t *v_in, NBody_t *v_out, uint32_t x) {
*v_out = *v_in;
 }

Вернувшись в java, я теперь хочу получить доступ к outBodies (из кода отладки я знаю, что моя функция renderscript считывает данные и копирует их нормально). Однако я не могу использовать стандартную функцию copyTo для функции outBodys.getlllocation(), так как она может принимать только числа с плавающей запятой, целые числа, байты и растровые изображения, а также не обновляет объект outBodies из распределения самостоятельно. Обратите внимание, что NBody_t — это структура, которую я определил в файле сценария рендеринга.


person John Lampitt Adey    schedule 17.10.2013    source источник
comment
Добро пожаловать в СО. Вы можете включить некоторый код и немного лучше отформатировать свой вопрос, чтобы люди не запутались, читая ваш вопрос.   -  person mavrosxristoforos    schedule 17.10.2013


Ответы (2)


В настоящее время RenderScript не отражает метод копирования значений из определяемой пользователем структуры в Java. У нас действительно есть только методы, которые работают с примитивными Java и векторными типами. Распределение по-прежнему может использоваться другими ядрами или функциями на стороне сценария.

person Stephen Hines    schedule 17.10.2013
comment
Итак, я думаю, мне нужно будет преобразовать мою структуру в примитивные типы и отразить их обратно? Спасибо за помощь, документации немного не хватает. - person John Lampitt Adey; 17.10.2013
comment
Да, вы можете перейти к использованию примитивных типов уже сегодня (и перебирать один из них, получая доступ к другим с помощью rsGetElementAt_int() (или любых других типов, которые вы используете). Мы усердно работаем над улучшением документации и примеров. - person Stephen Hines; 18.10.2013

На самом деле вы должны использовать метод copy1DRangeToUnchecked класса Allocation. Вы можете скопировать его в свой собственный ByteBuffer и самостоятельно десериализовать.

person Martin Kosicky    schedule 29.07.2016