2013-10-17 85 views
2

我正在從我的renderscript內核返回結構數組。我的問題是,儘管我可以使用生成的代碼在java中創建一個結構數組,並通過獲取從此生成的數組的分配將其傳遞給我的根方法,但我無法將數組重新獲取到java中。 Renderscript文檔說使用copyTo方法複製分配以確保renderscript已經完成對它的操作。然而這個方法只支持float,int,byte,bitmap。即使在訪問數組之前等待幾秒鐘以確保renderscript已經完成,out分配中的數據根本不會改變,所以我不知道我是否正在接近這個錯誤。從Renderscript內核返回Renderscript結構

任何幫助都讚賞

澄清

編輯:

我在Java中有以下

ScriptField_NBody bodys = ScriptField_NBody.create1D(mRS, size, Allocation.USAGE_SCRIPT); 
    ScriptField_NBody outBodys = new ScriptField_NBody(mRS, 1); 

創建我的結構的陣列,然後我把我的renderScript功能填充人體的

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

我的renderscript應該s意味着複製人體的到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,因爲它只能使用浮點數,整型,字節和位圖以及outBody對象從分配中自行更新。請注意,NBody_t是我在renderscript文件中定義的結構。

+0

歡迎來到SO。您可能希望包含一些代碼並更好地設置您的問題的格式,以便人們在閱讀您的問題時不會感到困惑。 – mavrosxristoforos

回答

1

RenderScript目前並未反映將用戶定義的結構的值複製回Java的方法。我們的確只有在原始Java和矢量類型上運行的方法。分配仍然可以由其他內核或腳本端功能使用。

+1

所以我想我會需要將我的結構轉換爲原始類型,並反映這些回來?感謝您的幫助,文檔有點欠缺。 –

+1

是的,您今天可以轉換爲使用原始類型(並且遍歷其中之一,使用rsGetElementAt_int()或其他您正在使用的其他類型訪問其他類型)我們正在努力改進文檔和樣本。 –

0

其實你應該使用Allocation類的copy1DRangeToUnchecked方法。您可以將它複製到您自己的ByteBuffer中並自行反序列化它。