ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 将Textures快速加载到OpenGL 2.0中

2019-06-30 11:12:11  阅读:251  来源: 互联网

标签:android opengl-es textures opengl-es-2-0


我正在为Android构建一个简单的动态壁纸.我使用下面的代码将所需的纹理上传到OpenGL ES 2.0中.我已将所有图像加载到一个大小为2048×2048的文件中.下面的代码需要大约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;
}

解决方法:

有几种方法可以提高性能.

>每次调用onSurfaceChanged时都不要加载纹理.将textureId初始化为-1(在渲染器的构造函数/ surfaceCreated中),如果您有不同的Id,请在onSurfaceChanged的开头检查.当你打电话给glGenTextures时,你会得到一个正数.
>你需要Mipmap吗?这可能是你方法的关键点.尝试不使用GLES20.glGenerateMipMap(GLES20.GL_TEXTURE_2D);
> 2048×2048是巨大的.特别是纹理.你真的需要那么多细节吗?也许1024×1024就足够了.
>避免使用RGB_888,而是使用RGB_565:您将获得几乎相同视觉质量的一半大小.

标签:android,opengl-es,textures,opengl-es-2-0
来源: https://codeday.me/bug/20190630/1336005.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有