Я использую следующий код, чтобы передать массив чисел с плавающей точкой в Renderscript ядра:Как использовать половину точности в renderscript?
float[] bufName = new float[3];
bufName [0] = 255;
bufName [1] = 255;
bufName [2] = 0;
Allocation alloc1 = Allocation.createSized(mRs, Element.F32(mRs), 3);
alloc1.copy1DRangeFrom(0, 3, mtmd);
ScriptC_foo foo = new ScriptC_foo(mRs);
foo.set_gIn(alloc1);
И я определил gIn
в файле foo.rs
следующим образом:
rs_allocation gIn;
Я хотел бы работать с 16-битными числами с плавающей запятой. Я знаю, что я должен изменить создание выделения на это:
Allocation alloc1 = Allocation.createSized(mRs, Element.F16(mRs), 3);
Однако, я не могу найти решение для копирования массива имени-буфера к распределению. Любая помощь приветствуется.
Спасибо за ваш ответ. 'Float.valueOf (f) .shortValue()' преобразует числа в целые (короткие) числа. Я хочу сохранить дробную часть. – MTMD
Это был, по общему признанию, длинный выстрел. Вы можете использовать один из методов Float для преобразования в биты int, а затем масштабировать до коротких бит. –
Возможно, вы сможете копировать полупоплавки в выделение, используя собственный RenderScript api. –