gpt4 book ai didi

java - 创建 ScriptC 时 RenderScript 崩溃

转载 作者:行者123 更新时间:2023-12-01 06:11:00 24 4
gpt4 key购买 nike

使用 RenderScript 创建 ScriptC 对象时存在一些神秘的问题。这是我的代码:

public class RenderScriptActivity {

private RenderScript mRS;
private ScriptC_kernel mScript = null;

private Allocation m1Allocation, m2Allocation,
m3Allocation, m4Allocation;

private Bitmap mBitmap;

private ImageView mView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_renderscript);
mView = (ImageView) findViewById(R.id.image_view);
}

@Override
protected void onResume() {
super.onResume();
initRenderScript();
}

@Override
protected void onPause() {
super.onPause();
releaseRenderScript();
}

private void initRenderScript() {
mRS = RenderScript.create(this);

int size = 320*240;
m1Allocation = Allocation.createSized(mRS, Element.I16(mRS), size);
m2Allocation = Allocation.createSized(mRS, Element.I16_4(mRS), size);
m3Allocation = Allocation.createSized(mRS, Element.I16_4(mRS), size);
mBitmap = Bitmap.createBitmap(1280, 720, Bitmap.Config.ARGB_8888);
m4Allocation = Allocation.createFromBitmap(mRS, mBitmap);

mScript = new ScriptC_kernel(mRS, getResources(), R.raw.kernel);
}

private void releaseRenderScript() {

m1Allocation.destroy();
m2Allocation.destroy();
m3Allocation.destroy();
m4Allocation.destroy();
// mScript.destroy();

mRS.finish();
}

}

还有我的内核(是的,它是空的):

#pragma version(1)
#pragma rs java_package_name(com.example.android.myrenderscript)

问题是,第三次调用 initRenderScript() 函数(即恢复应用程序、暂停、恢复、再次暂停和恢复)时,我的应用程序崩溃了(SIGSEV )有错误:

backtrace:
#00 pc 00027034 /system/lib/libRS.so (android::renderscript::rsrClearObject(android::renderscript::Context const*, android::renderscript::ObjectBase**)+3)
#01 pc 00012c3b /system/lib/libRSDriver.so
#02 pc 00000668 <unknown>

此外,如果我使用 mScript.destory() 方法(上面已注释),我的应用程序会在第一次调用 initRenderScript() 后立即崩溃。最重要的是,如果我只是注释行,创建 ScriptC_kernel 对象,一切都会正常工作。这就是为什么我认为创建 ScriptC 对象存在问题。

有没有人知道为什么会出现这个问题?

这里奇怪的是,只有当我从命令行构建应用程序时才会出现这个问题(使用 ant debug 命令,Ubuntu 14.04)。当我使用 Android Studio 或 Eclipse 构建它时,一切正常。

我还应该提到,实际上不是应用程序本身崩溃(它包含少量 Activity ),而是一个线程崩溃,我认为是 RenderScript 的线程。崩溃后,之前的 Activity 再次进入前台。

我非常感谢任何帮助,提前致谢

最佳答案

你真的没有用 RS 做任何其他事情吗?您的 ant 命令是否有可能未将资源正确打包到您的 .apk 中?也许值得检查每个构建下生成的实际 .apk 文件并比较资源等,以确保它们是等效的。

最后一个问题:您的文件名为 kernel.rs 吗?

mScript = new ScriptC_kernel(mRS, getResources(), R.raw.kernel);

为了安全起见,确实应该重写为:

mScript = new ScriptC_kernel(mRS);

它们是等效的(假设您使用的是 kernel.rs),而第二个则不太容易出错(如果您将这一行复制粘贴到不同的脚本)。如果您加载错误,我可以看到此错误发生脚本,但即便如此也不太可能。

关于java - 创建 ScriptC 时 RenderScript 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com