gpt4 book ai didi

java - 当 Android 中的 GLSurfaceview 中 opengl 上下文丢失时,如何清理 native 堆?

转载 作者:行者123 更新时间:2023-12-01 13:10:39 26 4
gpt4 key购买 nike

我正在为原生 3d 引擎制作一个包装器。我使用 GLSurfaceView 为我的引擎建立egl 上下文。

问题是,当 GLSurfaceView 失去其egl上下文(onPause等)时,我真的想释放引擎使用的内存。然而,似乎没有办法安全地做到这一点。

我尝试重写 GLSurfaceView 中的 onPause 函数,如下所示:

@Override
public void onPause(){
Engine.release();
super.onPause();
}

但是,这会导致内存问题。

04-06 21:33:40.415: E/libEGL(8249):在没有当前上下文的情况下调用 OpenGL ES API(每个线程记录一次)
04-06 21:33:40.425: A/libc(8249): 致命信号 11 (SIGSEGV) 位于 0x00000000 (code=1)

可能是由于内存已释放但渲染器线程仍在运行。

我认为最好的清理方法是在渲染器线程结束之前释放内存。但我不知道如何实现它。

有人可以帮助我吗?

最佳答案

GLSurfaceView 进行自己的 EGL 上下文管理。它承担创建它、销毁它以及确保调用 onDrawFrame() 时它在渲染器线程上处于当前状态的全部责任。

如果这不是您想要的,您应该使用普通的 SurfaceView,并自行发出各种 EGL 调用。

关于java - 当 Android 中的 GLSurfaceview 中 opengl 上下文丢失时,如何清理 native 堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22894885/

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