我需要在带有 PowerVR SGX 硬件的 ARM 设备上实现离屏渲染到纹理。
一切都完成了(使用了像素缓冲区和 OpenGL ES 2.0 API)。唯一未解决的问题是 glReadPixels
功能非常缓慢。
我不是 OpenGL ES 方面的专家,所以我问社区:是否可以将纹理直接渲染到用户空间内存中?或者可能有一些方法可以获得纹理内存区域的硬件地址?其他一些技术(EGL 扩展)?
我不需要一个通用的解决方案,只需要一个适用于 PowerVR 硬件的解决方案。
更新:有关“慢功能”的更多信息glReadPixels
。将 512x512 RGB 纹理数据复制到 CPU 的内存:
glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_BYTE, &arr)
需要 210 毫秒,glReadPixels(0, 0, WIDTH, HEIGHT, GL_BGRA, GL_UNSIGNED_BYTE, &arr)
需要 24 毫秒(GL_BGRA
不是 glReadPixels 的标准,它是 PoverVR 扩展),memcpy(&arr, &arr2, WIDTH * HEIGHT * 4)
需要 5 毫秒
在纹理更大的情况下,差异也更大。