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