0

配列が .rs ファイルに渡される Android で renderscript を作成したいと考えています。これらの値に対して何らかの計算が行われ、ユーザーに返されます。

renderscript についてはほとんど理解していないので、私が書いたものも完全に間違っている可能性があります。それを手伝ってください。

Android アクティビティ public class RenderTemp extends Activity {

    private RenderScript mRS;
    private ScriptC_snow mScript;
    int[] indices;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.render);
        indices = new int[2];
        indices[0] = 1;
        indices[1] = 2;
        createScript();
    }

    private void createScript() {
        mRS = RenderScript.create(this);
        Allocation mIN = Allocation.createSized(mRS, Element.I32(mRS), indices.length);
        mIN.copyFrom(indices);
        mScript = new ScriptC_snow(mRS);
        mScript.forEach_root(mIN);
        mIN.copyTo(indices);
    }
}

snow.rs

#pragma version(1)
#pragma rs java_package_name(#package name)


int32_t *mIN;

void __attribute__((kernel)) root(int32_t in)
{
    in = in + 2;
}
4

1 に答える 1

1

カーネル内で「in」を変更しても、何も更新されません。root() 関数の戻り値も int32_t になるように変更できます。次に、「return in + 2;」を実行します。最後に、入力と出力の両方の mIN を forEach に渡すことができます (つまり、「mScript.forEach_root(mIn, mIn);」)。これで問題は解決しますが、実際の作業では入力と出力の割り当てを分離することを強くお勧めします。このような入力/出力のエイリアシングは、より複雑なコードに対するコンパイラの最適化を妨げる可能性があるためです。

于 2016-12-14T02:43:08.353 に答える