2

我使用以下代码将浮点数数组传输到渲染脚本内核:

 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);

gInfoo.rs文件中定义如下:

rs_allocation gIn;

我想使用 16 位浮点数。我知道我应该将分配创建更改为:

 Allocation alloc1 = Allocation.createSized(mRs, Element.F16(mRs), 3);

但是,我找不到将 bufName 数组复制到分配的解决方案。任何帮助表示赞赏。

4

1 回答 1

1

Java 没有定义半精度浮点数,因此您必须自己进行操作才能使其正常工作。如果您使用Float.valueOf(f).shortValue()f您希望表示为半精度的特定流程在哪里)。这应该正确地降低float到新的位大小。然后创建一个Allocation大小Element.F16。您应该能够将一组short值复制到 RenderScript 来完成这项工作。

于 2016-07-01T14:39:52.620 回答