由于刚刚接触到Android OpenGL的开发,踩到了一个纹理贴图的坑,在此记录一下,提供给大家参考。
问题描述
在某些特定的机型中(红米note2、魅族MX5)这类机型中,进行OpenGL绘制纹理的时候,会出现绘制不上的情况,导致本应该出现纹理的地方却变成白色
问题解决
主要的思想:在取到bitmap的时候来根据bitmap的宽高找到与之最接近的一个2^N 的一个数值,来修改该bitmap的尺寸可以解决此类问题。贴上部分代码,仅供参考。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
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); }
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; }
|