gpt4 book ai didi

android - 将纹理快速加载到 OpenGL 2.0

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:24 25 4
gpt4 key购买 nike

我正在为 Android 构建一个简单的动态壁纸。我正在使用以下代码将所需的纹理上传到 OpenGL ES 2.0。我已将所有图像加载到一个大小为 2048x2048 的文件中。下面的代码需要大约 900 到 1200 毫秒来加载纹理。这是正常时间还是我做错了什么让它变慢?

每次在我的渲染器中调用 onSurfaceCreated 时,我也尝试清除 Opengl 中的纹理列表。这是正确的做法,还是有一种方法可以简单地检查以前加载的纹理是否已经在内存中,如果是这样,避免清除和重新加载?请让我知道您对此的评论。谢谢。

同样在屏幕方向改变时调用 OnSurfaceCreated。所以纹理上传再次发生。这不是一个好主意。解决方法是什么?

public int addTexture(Bitmap texture) {

int bitmapFormat = texture.getConfig() == Config.ARGB_8888 ? GLES20.GL_RGBA : GLES20.GL_RGB;

int[] textures = new int[1];
GLES20.glGenTextures(1, textures, 0);
int textureId = textures[0];
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmapFormat, texture, 0);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
return textureId;
}

最佳答案

提高性能的几种方法。

  1. 不要在每次调用 onSurfaceChanged 时都加载纹理。将您的 textureId 初始化为 -1(在渲染器的构造函数/surfaceCreated 中)并在 onSurfaceChanged 的开头检查您是否有不同的 ID。当您调用 glGenTextures 时,您将得到一个正数。
  2. 你需要 Mipmaps 吗?这可能是您的方法的关键点。尝试不使用行 GLES20.glGenerateMipMap(GLES20.GL_TEXTURE_2D);
  3. 2048x2048 很大。特别是对于纹理。你真的需要那么详细吗?也许 1024x1024 就足够了。
  4. 避免使用 RGB_888,改用 RGB_565:您将以一半的尺寸获得几乎相同的视觉质量。

关于android - 将纹理快速加载到 OpenGL 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com