Skip to content
Go back

Android OpenGL 中纹理显示异常的处理方法

由于刚刚接触到 Android OpenGL 的开发,踩到了一个纹理贴图的坑,在此记录一下,提供给大家参考。

问题描述

在某些特定的机型中(红米 note2、魅族 MX5)这类机型中,进行 OpenGL 绘制纹理的时候,会出现绘制不上的情况,导致本应该出现纹理的地方却变成白色。

问题解决

主要的思想:在取到 bitmap 的时候来根据 bitmap 的宽高找到与之最接近的一个 2^N 的一个数值,来修改该 bitmap 的尺寸可以解决此类问题。贴上部分代码,仅供参考。

/** * 获取图片资源,获取2的幂次方大小的bitmap * * @param context * @param resId * @return */public static Bitmap getResBitmapPowerOf2Size(Context context, int resId) {    Bitmap bitmap = getResBitmap(context, resId);    int maxWidth = 0;    int maxHeight = 0;    if (bitmap != null) {        maxWidth = calcNearestSize(bitmap.getWidth());        maxHeight = calcNearestSize(bitmap.getHeight());    }    return getResizedBitmap(bitmap, maxWidth, maxHeight);}/** * 用于计算originSize最接近的2的n次幂最接近的n * * @param originSize * @return */private static int calcNearestSize(int originSize) {    int minSize = 1;    for (int i = 1; i <= originSize; i = i * 2) {        int result = originSize - i;        if (result == 0) {            return originSize;        } else if (result > 0) {            minSize = i;        }    }    return minSize;}

Share this post on: