Opengl es 为什么android上的纹理上传速度这么慢?

Opengl es 为什么android上的纹理上传速度这么慢?,opengl-es,android-ndk,skia,Opengl Es,Android Ndk,Skia,我有一段代码,其中我正在将一个长度约为20个字符的字符串绘制成大小为1000x100像素的位图。然后将其加载到纹理中并在屏幕上绘制 我发现仅仅将SkBitmap数据(SkBitmap.getPixels()返回的缓冲区)上传到纹理中大约需要29-30毫秒 这方面的代码上传到另一篇文章中 我画了30帧,取了平均时间差。大约需要30毫秒 我创建了另一个完全不使用OpenGL的程序,只使用Skia渲染文本并直接在帧缓冲区上显示。这需要1毫秒才能完成 这没有道理。我在安卓4.0.3的安卓box(带GP

我有一段代码,其中我正在将一个长度约为20个字符的字符串绘制成大小为1000x100像素的位图。然后将其加载到纹理中并在屏幕上绘制

我发现仅仅将SkBitmap数据(SkBitmap.getPixels()返回的缓冲区)上传到纹理中大约需要29-30毫秒

这方面的代码上传到另一篇文章中

我画了30帧,取了平均时间差。大约需要30毫秒

我创建了另一个完全不使用OpenGL的程序,只使用Skia渲染文本并直接在帧缓冲区上显示。这需要1毫秒才能完成

这没有道理。我在安卓4.0.3的安卓box(带GPU)上运行这段代码。ARM和GPU共享同一个RAM


如何使这更快

什么设备/芯片组?有些设备可能会很慢,不过1024x1024x4的30毫秒看起来确实有点长。有可能是驱动程序在上传时滑动纹理,以便稍后更快地渲染。如果使用512x512纹理,时间会下降到7.5ms吗?它是支持ARM v7 NEON的TI处理器,SGX530是GPU。SK位图的大小不像1024x1024那么大。它是1024x100。我从一个更大的位图开始,并将其缩小到上面的大小以使其更快。30毫秒的时间还是太长了。希望是1024x128,所以在两个维度上都是2的幂。您是否尝试过将
glTexImage2D()
调用与开始/停止时间调用一起包装,以验证它是30毫秒延迟的唯一来源?initTexture()的代码要处理的大小不是2的幂。我得到的时间是glTexImage2D和glTexSubImage2D()调用的时间。FWIW,我向Grafika()添加了一个简单的512x512 RGBA glTexImage2D()基准测试。我看到N5和N10上有1.6ms运行Android 4.4.x。
measureStart = systemTime();
if (!initTexture(&texFrame, bitmap))
{
    LOGD("framerate: Unable to create/upload texture based off bitmap");
    return;
}
timeDiff += (int(ns2us(systemTime()-measureStart)));