Android OpenGL Dev Tips

由于刚刚接触到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
/**
* 获取图片资源,获取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;
}