android.support.v8.renderscript.RSRuntimeException:加载ScriptC脚本失败

时间:2015-06-27 18:21:29

标签: android renderscript

我已经开始使用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)

     

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

     

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

     

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

     

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

有人知道为什么会发生这种情况?

失败的代码示例(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;
}

3 个答案:

答案 0 :(得分:1)

这很有趣,但我找到了一个问题的核心......我的.rs文件在库模块中。这导致了一个问题,因为ScriptC中的internalCreate(rs,resources,resourceID)返回0(无法找到原始的.bc文件)。

答案 1 :(得分:0)

如果您希望将RS功能自动选为脚本内核,请将其重命名为root。或者,将其更改为:

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

由于您未指定显式输出分配,因此可能还会遇到问题。使用第二种形式,将void返回值替换为uchar4,并确保在java代码中设置输出分配。

答案 2 :(得分:0)

我认为这里的问题可能是剥离代码的问题。您是否可以尝试禁用proguard和/或更新它以删除与RS支持库(或您的自定义代码)相关的任何内容?