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