我想在我的应用程序的后台运行Android OpenGL-ES表面,为应用程序提供动态图形资源(位图等)。 OpenGl GLSurfaceView不是我的应用程序的可见屏幕;它仅用作渲染工厂来制造供主要活动使用的图形。
有人知道如何在不是活动视图的情况下运行Android GLSurfaceView吗?谷歌Android文档很清楚,当GLSurfaceView失去其作为主要视图的状态时,表面将被破坏以及所有资源。
有没有办法让GLSurfaceView及其相关的GLSurfaceView.Renderer在没有(并且从不是)应用程序的主视图时保持正常运行?
答案 0 :(得分:7)
对于您要做的事情,您应该完全跳过GLSurfaceView。由于您只想进行一些OpenGL屏幕外渲染,您可以使用EGL像素缓冲区并将其转换为位图。有关解决方案,请参阅this thread on anddev。我在一些应用程序中使用它非常成功。
该线程底部的实现有点错误,因为它做了一些非常简单的EGL选择。我建议你实施一个更强大的选择器,你可以在Robert Green的GLWallpaperService中找到它,如果你愿意的话。
我最终做的另一个改变是删除垂直像素镜像。我刚刚在onSurfaceCreate中翻转我的视口,而不是在写入位图时手动翻转渲染像素。
祝你好运!答案 1 :(得分:1)
我强烈建议你不要试图这样做。 Android设备上的许多当前驱动程序不支持跨进程的多个活动GL上下文;如果驱动程序确实支持这个功能,那么该功能还没有被大量使用,因为Android本身并没有这样做,因此可能会产生令人讨厌的错误。
多个GL上下文仅供从Android 3.0开始的平台使用。