如何将Float2数组从Java传递给Renderscript

时间:2014-03-07 16:59:16

标签: android renderscript

我正在尝试使用带有以下代码的Android Studio使用copyfrom方法将一个Float2变量数组传递给Renderscript。 IDE接受了整数的第一个示例,但是接下来的两个浮点数或浮点数都不是。 IDE将返回以下错误:

Cannot resolve method 'copyFrom(java.lang.Float[])'

Cannot resolve method 'copyFrom(java.lang.Float2[])'

对于正确的方法或语法的任何建议表示赞赏。

    mRS = RenderScript.create(this);

    int[] inputData1 = new int[10];
    Float[] inputData2 = new Float[10];
    Float2[] inputData3 = new Float2[10];      

    inputData1[0] = 1;

    inputData2[0] = 1.0f;

    inputData3[0].x = 1.0f;
    inputData3[0].y = 1.0f;


    Allocation mInAlloc1 = Allocation.createSized(mRS, Element.I32(mRS), 10, Allocation.USAGE_SCRIPT);
    mInAlloc1.copyFrom(inputData1);

    Allocation mInAlloc2 = Allocation.createSized(mRS, Element.F32(mRS), 10, Allocation.USAGE_SCRIPT);
    mInAlloc2.copyFrom(inputData2);

    Allocation mInAlloc3 = Allocation.createSized(mRS, Element.F32_2(mRS), 10, Allocation.USAGE_SCRIPT);
    mInAlloc3.copyFrom(inputData3);

编辑:

我在Eclipse中尝试过相同的代码并得到一个稍微不同的错误:

The method copyFrom(BaseObj[]) in the type Allocation is not applicable for the arguments (Float[])

建议我将类型更改为BaseObj [],但是这样做IDE然后会抱怨我应该更改(返回)到Float,这似乎有点递归?

1 个答案:

答案 0 :(得分:0)

在Java代码中没有本机表示的RenderScript类型稍微困难一些。处理矢量类型的最佳方法是“copyFromUnchecked”。因此,如果你有10x,float2的分配,你将创建一个20元素的java浮点数组。寻址将是[element * 2 + component]

复制例程的“未选中”变体执行较少的类型检查以允许这些副本。它比使用Float2数组的对象数组效率高得多。

我意识到重新阅读你的代码,问题是Float vs float。 RenderScript复制命令旨在处理基本数组,而不是对象数组。