【问题标题】:Run Android OpenGL in Background as Rendering Resource for App?在后台运行 Android OpenGL 作为应用程序的渲染资源?
【发布时间】:2011-06-29 16:42:49
【问题描述】:

我想在我的应用程序的后台运行一个 Android OpenGL-ES 界面来为应用程序提供动态图形资源(位图等)。 OpenGL GLSurfaceView 不是我的应用程序的可见屏幕;它仅用作渲染工厂来制造供主要活动使用的图形。

有谁知道如何让 Android GLSurfaceView 在它不是活动视图时运行? Google Android 文档清楚地表明,当 GLSurfaceView 失去其作为主视图的状态时,表面及其所有资源都会被销毁。

当 GLSurfaceView 及其关联的 GLSurfaceView.Renderer 不是(并且永远不会是)应用程序的主视图时,有什么方法可以保持其正常运行?

【问题讨论】:

  • 我认为您可以使用 RenderBuffer 对象,将其附加到 FBO 并绘制到它。
  • 或(为我工作),将其视图大小设置为 1pixel&1pixel,使其可见(用户看不到它)并在 OnDraw 中将 FBO 绑定到主纹理并渲染它

标签: android opengl-es


【解决方案1】:

对于您想要做的事情,您应该完全跳过 GLSurfaceView。由于您只想进行一些 OpenGL 屏幕外渲染,您可以使用 EGL 像素缓冲区并将其转换为位图。有关解决方案,请参阅 this thread on anddev。我已经在我的一些应用中非常成功地使用了它。

该线程底部的实现有点错误,因为它做了一些非常简单的 EGL 选择。如果您愿意,我建议您实现一个更强大的选择器,您可以在 Robert Green 的GLWallpaperService 中找到它。

我最终做出的另一个改变是移除了垂直像素镜像。我刚刚在 onSurfaceCreate 中翻转了我的视口,而不是在写入位图时手动翻转渲染的像素。

祝你好运!

【讨论】:

    【解决方案2】:

    我强烈建议您不要尝试这样做。 Android 设备上的许多当前驱动程序不支持跨进程的多个活动 GL 上下文;如果驱动程序确实支持这一点,则该功能并没有得到太多使用,因为 Android 本身不这样做,因此可能会导致令人讨厌的错误。

    仅从 Android 3.0 开始的平台使用多个 GL 上下文。

    【讨论】:

    • 这是否意味着在 Android 3.0 之前,一个窗口中的 2 个 GLSurfaceViews 将无法工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多