在我的 Android 4.3 应用程序中,我想将纹理从本地 png 加载到 TextureView。我不知道 OpenGL,我正在使用来自GLTextureActivity硬件加速测试的代码。我也在此处粘贴加载纹理部分:
private int loadTexture(int resource) {
int[] textures = new int[1];
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, textures, 0);
checkGlError();
int texture = textures[0];
glBindTexture(GL_TEXTURE_2D, texture);
checkGlError();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Bitmap bitmap = BitmapFactory.decodeResource(mResources, resource);
GLUtils.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmap, GL_UNSIGNED_BYTE, 0);
checkGlError();
bitmap.recycle();
return texture;
}
我在两个设备上运行代码:Nexus 7和 Galaxy Nexus 手机,我注意到两者之间的速度差异很大。对于Nexus 7,绘图部分大约需要 170 毫秒,而对于Galaxy Nexus则需要 459 毫秒。最耗时的操作是纹理的加载,尤其是texImage2D
调用。我已经读到有些设备的芯片运行速度很慢texImage2D
-texSubImage2D
功能但是有人怎么知道这些设备是哪些设备,我如何避免使用这些功能来达到相同的结果?
先感谢您。
// 编辑:glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
电话设备中的通话似乎也明显变慢。为什么会这样?我怎么能避免呢?