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