簡體   English   中英

android.support.v8.renderscript.RSRuntimeException:加載ScriptC腳本失敗

[英]android.support.v8.renderscript.RSRuntimeException: Loading of ScriptC script failed

我開始使用renderscript,想知道為什么它在支持模式的api 16上不起作用。 例如在代碼中的項目https://github.com/harism/android_reimage中:

scriptInvert = new ScriptC_invert(rs);

我抓到異常:

引起原因:android.support.v8.renderscript.RSRuntimeException:ScriptC腳本加載失敗。 在android.support.v8.renderscript.ScriptC。(ScriptC.java:69)

在io.github.harism.lib.reimage.ScriptC_invert。(ScriptC_invert.java:42)

在io.github.harism.lib.reimage.ScriptC_invert。(ScriptC_invert.java:34)

在io.github.harism.lib.reimage.ReImage。(ReImage.java:56)

在io.github.harism.lib.reimage.ReImage.from(ReImage.java:45)

有人知道為什么會發生這種情況嗎?

失敗的.rs代碼示例( https://github.com/harism/android_reimage/blob/master/reimage/src/main/rs/invert.rs ):

#pragma version(1)
#pragma rs java_package_name(io.github.harism.lib.reimage)
#pragma rs_fp_relaxed

void invert(uchar4 *inout, uint32_t x, uint32_t y) {
    inout->r = 0xFF - inout->r;
    inout->g = 0xFF - inout->g;
    inout->b = 0xFF - inout->b;
}

這很有趣,但是我發現了一個問題的核心……我的.rs文件位於庫模塊中。 這引起了一個問題,因為ScriptC中的internalCreate(rs,resources,resourceID)返回0(無法找到原始的.bc文件)。

如果希望自動將RS函數作為腳本的內核,請將其重命名為root 或者,將其更改為:

void __attribute__((kernel)) invert(uchar4 *inout, uint32_t x, uint32_t y)

由於未指定顯式的輸出分配,因此您可能還會遇到問題。 使用第二種形式,用uchar4替換void返回值,並確保在Java代碼中設置輸出分配。

我認為這里的問題可能是保護者剝離了代碼。 您可以嘗試禁用proguard和/或對其進行更新以不刪除與RS支持庫(或您的自定義代碼)相關的任何內容嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM