android - 使用 OpenCL 缓冲区在 OpenGL 2.0 ES 中绘制纹理

标签 android c++ opengl-es opencl egl

我正在我的 Android 智能手机上使用 ARM mali 72。
我想使用 OpenCL 的输出缓冲区像纹理一样将其渲染到 OpenGL 中。
我对单独的 openCL 和单独的 openGL 没有任何问题。
我不知道如何在同一个应用程序中使用两者。
目标是使用我的输出 OpenCL 并将其发送到 openGL。
一步一步的一些代码会非常好。
我可以在我的智能手机上使用 openCL 2.0 和 opengl ES 3.0。
************** 添加了 2020 年 9 月 30 日 ************
看起来我需要更多关于如何管理我的问题的信息。
所以我的配置是!我已经开发了 Java OpenGL ES 应用程序。我从 Camera.OnPreviousFrame 中检索相机帧,然后使用 JNI 将其发送到 OpenCL。
所以我想从 Java OpenGL ES 获取 EGL 显示通过 JNI 发送它,然后计算我的 openCL 内核将它发送回 java OpenGL ES。
我知道如何从 OpenCL 中检索数据,将其转换为位图并使用 SurfaceTexture 和 GL_TEXTURE_EXTERNAL_OES 将其显示到 openGL ES 中。
我的问题是如何从 java OpenGL ES 中检索 EGL 显示。如何将它发送到 C++,我可以设法使用 JNI 找出答案。但我不知道如何使用 EGL 和 OpenCL 实现 C++ 部分。
BenMark 的回答与处理有关,但我遗漏了一些部分。可以使用我的配置,使用 java openGL ES 还是我需要在 native 中执行所有 EGL、openGL、openCL 代码?
非常感谢您帮助我解决问题并尝试找到解决方案。 ;))

最佳答案

我没有编写代码示例但是 -
使用 EGL API 使 GLES 和 OpenCL API 之间的互操作性更容易。
此页面提供了一些提示:https://developer.arm.com/documentation/101574/0400/Using-OpenCL-extensions/Inter-operation-with-EGL/EGL-images
从该页面,除其他外:

  • 您需要 EGL_KHR_image_base 扩展来共享 EGL 图像。
  • 在 OpenCL 中,您需要 cl_khr_egl_image 使用 EGL 图像,然后您必须在 OpenCL 中使用 clFinish 或 clWaitForEvents 刷新,以确保该图像已准备好供 OpenGL ES 使用。
  • OpenCL 应用程序访问 EGL 图像的开始和结束必须通过排队 clEnqueueAcquireEGLObjectsKHR 和 clEnqueueReleaseEGLObjectsKHR 命令来发出信号。

  • 我希望这有助于你继续前进。

    关于android - 使用 OpenCL 缓冲区在 OpenGL 2.0 ES 中绘制纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63998438/

    相关文章:

    c++ - std::vector 使用 push_back 时的语义问题

    android - 三星 Galaxy J1 4G 上的 webRTC 应用程序崩溃

    opengl-es - 如何使用opengl将图像叠加到像素数组中?

    android - CNC 铣刀 Material 表示

    android - 我们如何计算当前位置与android中许多目的地之间的距离?

    android - 如何使用 MPAndroidChart 突出显示多个值?

    c++ - C++ 标准是否需要二进制机器?

    android - 错误您需要将 Theme.AppCompat 主题(或后代)与 Activity 一起使用

    android - 我可以在 VMWare 内的 Linux 上使用 HAXM 吗?

    c++ - 无法添加控制变量