我实现了一个opengl-es应用程序,它运行在mali 400 gpu上。我从相机上抓取了1280x960RGB的缓冲区,并使用glTexImage2D在gpu上渲染。
然而,对于1280x960分辨率的帧,glTexImage2D调用大约需要25毫秒。它对pCameraBuffer做了额外的内存复制。
1)有什么方法可以提高glTexImage2D的性能吗? 2) FBO会有帮助吗?如何使用帧缓冲区对象进行渲染。我发现了一些FBO示例,但我发现这些示例在最后一个参数( glTexImage2d )中传递了NULL。那么我如何用FBO渲染pCameraBuffer呢?
下面是为每个摄像机帧运行的代码。
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCENE_WIDTH, SCENE_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, pCameraBuffer);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDeleteTextures(1, &textureID);发布于 2019-07-05 02:58:15
通常的方法是尝试将相机缓冲区直接导入到图形驱动程序中,而根本不需要任何内存分配或复制。是否支持这在很大程度上取决于平台集成和系统中驱动程序的功能。
对于Linux系统,也就是您所指定的系统,路由是通过EGL_EXT_image_dma_buf_import扩展实现的。您需要一个相机驱动程序来创建一个由dma_buf管理的内存支持的表面,以及一个旁通道来将dma_buf文件句柄放入运行图形操作的应用程序中。然后,您可以使用上面的扩展将其转换为EGLImage。
https://stackoverflow.com/questions/56845697
复制相似问题