从Renderscript内核返回Renderscript结构

时间:2013-10-17 04:39:22

标签: android renderscript

我想从renderscript内核返回一个struct数组。我的问题是虽然我可以使用生成的代码在java中创建结构数组,并通过获取由此生成的数组的分配将其传递给我的root方法,但是我无法将数组放回到java中。 Renderscript文档说使用copyTo方法复制出来的分配,以确保renderscript已经完成对它的操作。但是,此方法仅支持float,int,byte,bitmap。即使在访问数组之前等待几秒钟以确保renderscript已经完成外输出分配中的数据根本没有改变,所以我想知道我是否接近这个错误。

任何帮助都赞赏

编辑以澄清:

我使用以下

在java中创建我的struct数组
    ScriptField_NBody bodys = ScriptField_NBody.create1D(mRS, size, Allocation.USAGE_SCRIPT);
    ScriptField_NBody outBodys = new ScriptField_NBody(mRS, 1);

然后我在填充bodys之后调用我的renderscript函数

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

我的renderscript应该简单地将bodys复制到outBodys

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

回到java我现在想要访问outBodies,(从调试代码我知道我的renderscript函数读取数据并复制它)。但是我不能在outBodys.getllocation()函数上使用标准copyTo,因为这只能获取浮点数,int,字节和位图,outBodies对象也不能自己从分配中更新。请注意,NBody_t是我在renderscript文件中定义的结构。

2 个答案:

答案 0 :(得分:1)

RenderScript目前没有反映将值从用户定义的结构复制回Java的方法。我们确实只有在原始Java和矢量类型上运行的方法。其他内核或脚本端函数仍可使用分配。

答案 1 :(得分:0)

实际上,您应该使用Allocation类的copy1DRangeToUnchecked方法。您可以将其复制到您自己的ByteBuffer中并自行反序列化。