Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从OpenGL ES 2.0/3.0读取数据的最快方法_Android_Opengl Es_Opengl Es 2.0_Gpgpu_Glreadpixels - Fatal编程技术网

Android 从OpenGL ES 2.0/3.0读取数据的最快方法

Android 从OpenGL ES 2.0/3.0读取数据的最快方法,android,opengl-es,opengl-es-2.0,gpgpu,glreadpixels,Android,Opengl Es,Opengl Es 2.0,Gpgpu,Glreadpixels,从OpenGL上下文获取数据的最快方法是什么?目前,我正在渲染纹理,并使用glReadPixels()读回结果 在三星S3 Mini(I8190、Android 4.1.2、GPU Mali-400 MP、CPU Novator U8420 DualCore)上,640x480x4(resolutionxcolor)字节~1.3 MB的数据大约需要40毫秒。在LG G2(LG-D802、Android 4.2.2、GPU Adreno 330、CPU Snapdragon S4 Pro Quad

从OpenGL上下文获取数据的最快方法是什么?目前,我正在渲染纹理,并使用glReadPixels()读回结果

在三星S3 Mini(I8190、Android 4.1.2、GPU Mali-400 MP、CPU Novator U8420 DualCore)上,640x480x4(resolutionxcolor)字节~1.3 MB的数据大约需要40毫秒。在LG G2(LG-D802、Android 4.2.2、GPU Adreno 330、CPU Snapdragon S4 Pro QuadCore)上,相同的应用程序大约需要110毫秒

LG G2应该快得多,对NDK/C++排序应用程序进行基准测试表明,其性能是S3 Mini(CPU性能)的2倍以上。因此,如果内存带宽(memcpy/DMA)是限制,我假设glReadPixels()上至少有相同的数字。我猜,高通公司/肾上腺公司(LG)要么在低优先级线程中传输数据,要么在软件中执行某种颜色转换(X->RGBA)


是否有另一种更快的方法将数据从GPU(OpenGL ES+供应商扩展)传输到CPU?

glReadPixels是最快的方法。因为你不能直接访问gpu内存。只有开源驱动程序有它。

我刚在谷歌上搜索了OpenGL ES 3.0,其中包括“glMapBufferRange()”。我将对映射/取消映射缓冲区有更深入的了解。是的,对于gl es 3.0更好地使用GLMAPBUFFERRANGE我不是唯一的一个,这里有一个简短的讨论: