型付き RS 割り当てを次のように作成します。
mRS = RenderScript.create(mContext);
Element.Builder eb = new Element.Builder(mRS);
eb.add(Element.F32_3(mRS), "xyz");
eb.add(Element.F32_2(mRS), "uv");
Element eStride_XYZUV = eb.create();
mInAllocation = Allocation.createSized(mRS, eStride_XYZUV, animLand.getArray().length / 5);
mOutAllocation = Allocation.createSized(mRS, eStride_XYZUV, animLand.getArray().length / 5);
animLand.getArray()
の配列ですfloat
。データを入力割り当てにコピーできます。
mInAllocation.copyFromUnchecked(animLand.getArray());
ただし、この方法で割り当てからデータを取得しようとすると:
mOutAllocation.copyTo(animLand.getArray());
例外が発生します:
android.renderscript.RSIllegalArgumentException: 32 bit float source does not match allocation type null
Allocation
カスタムの配列を使用して出力からデータにアクセスするにはどうすればよいElement
ですか? 配列/ビットマップにコピーする方法はありますが、プリミティブElement
型のみです。
プリミティブF32
型を使用しても機能しますが、型付きデータを使用したい:
mInAllocation = Allocation.createSized(mRS, Element.F32(mRS), animLand.getArray().length);
mOutAllocation = Allocation.createSized(mRS, Element.F32(mRS), animLand.getArray().length);
...
mInAllocation.copyFromUnchecked(animLand.getArray());
...
mOutAllocation.copyTo(animLand.getArray());