Skip to content
Quiet Side
Go back

Android OpenGL Dev Tips

由于刚刚接触到 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:

上一篇
Android Round Progress Bar
下一篇
PHP CodeIgniter(CI) 去掉 index.php