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

android renderscript

618 просмотра

2 ответа

20 Репутация автора

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

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

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

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

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

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

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

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

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

Вернувшись в Java, я теперь хочу получить доступ к outBodies (из кода отладки я знаю, что моя функция рендеринга читает данные и копирует их нормально). Однако я не могу использовать стандартный метод copyTo для функции outBodys.getllocation (), поскольку она может принимать только значения float, int, bytes и bitmaps, а объект outBodies не обновляется из выделения самостоятельно. Обратите внимание, что NBody_t - это структура, которую я определил в файле рендеринга.

Автор: John Lampitt Adey Источник Размещён: 17.10.2013 04:39

Ответы (2)


1 плюс

2487 Репутация автора

Решение

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

Автор: Stephen Hines Размещён: 17.10.2013 07:43

0 плюса

135 Репутация автора

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

Автор: Martin Kosicky Размещён: 29.07.2016 07:24
Вопросы из категории :
32x32