【问题标题】:Using OpenGL for Image Processing - Setting up an OpenGL context使用 OpenGL 进行图像处理 - 设置 OpenGL 上下文
【发布时间】:2014-11-23 12:17:17
【问题描述】:

我想在不显示在屏幕上的原始图像上进行图像处理(我想根据图像数据进行一些计算,并根据这些计算在屏幕上显示一些结果。)我找到了一个有趣的答案 @987654321 @,显示在这里:

在 GPU 上进行实际处理:设置 OpenGL 上下文(OpenGL ES 2 教程),并在该上下文中创建一个 SurfaceTexture 对象。 然后将该对象传递给 setPreviewTexture,并开始预览。然后, 在您的 OpenGL 代码中,您可以调用 SurfaceTexture.updateTexImage,并且 与 SurfaceTexture 关联的纹理 ID 将更新为 来自相机的最新预览帧。您还可以回读 RGB 纹理数据到 CPU 以使用 glReadPixels 进行进一步处理, 如果需要。

我有一个关于如何实施它的问题。

我是否需要创建GLSurfaceViewRenderer,我实际上并不想使用 OpenGL 在屏幕上绘制任何东西,所以我不确定是否需要它们?从我在网上阅读的内容来看,为了设置 OpenGL 上下文,拥有这些似乎非常重要?任何人都可以在这方面给我任何指示?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    您不必必须使用GLSurfaceViewGLSurfaceView 是一个纯 Java 编写的便利类。它简化了想要在 Android 中使用 OpenGL 渲染的应用程序的设置部分,但它的所有功能也可以通过 Android 框架中的较低级别接口使用。

    对于纯粹的离屏渲染,您可以使用 EGL 接口来创建上下文、表面等。有点令人困惑的是,在 Android 框架的完全不同部分有两个版本:

    • javax.microedition.khronos.egl 包中的 EGL10EGL11,从 API 级别 1 开始可用。
    • EGL14android.opengl 包中,从 API 级别 17 开始可用。

    它们非常相似,但较新的EGL14 显然具有更多功能。如果您的目标至少是 API 级别 17,我会选择较新的版本。

    使用EGL14 类中的方法,您可以创建上下文、表面等。对于离屏渲染,一种选择是创建一个用于渲染的Pbuffer 表面。要完成设置,您通常会使用以下函数:

    eglInitialize
    eglChooseConfig
    eglCreatePbufferSurface
    eglCreateContext
    eglMakeCurrent
    

    Android 文档并未真正描述这些功能,但您可以在 Khronos 网站上找到实际文档:https://www.khronos.org/registry/egl/sdk/docs/man/

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多