2016-07-01 9 views
1

私はの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); 

そして、次のように私はfoo.rsファイルでgInを定義しています

rs_allocation gIn; 

私は働きたいです16ビットの浮動小数点数を使用します。私はこれに割り当て作成を変更する必要があることを知っている:

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

しかし、私は割り当てにbufnameを配列をコピーするための解決策を見つけることができません。どんな助けもありがとうございます。

答えて

1

Javaは半精度浮動小数点数を定義していないため、これを動作させるには独自の操作を行う必要があります。 Float.valueOf(f).shortValue()を使用している場合(ここで、fは、特定のフローです)、半精度として表現してください。これにより、floatが新しいビットサイズに正しくキャストされます。次にをElement.F16のサイズで作成します。 short値の配列をRenderScriptにコピーして作業する必要があります。

+0

ご回答いただきありがとうございます。 'Float.valueOf(f).shortValue()'は整数を(短い)数値に変換します。私は小数部分を保ちたい。 – MTMD

+0

それは確かにロングショットでした。 'Float'メソッドの1つを使ってintビットに変換し、次に短いビットに縮小することができます。 –

+0

ネイティブRenderScript APIを使用して、ハーフ・フロートを割り当てにコピーすることができます。 –

関連する問題