android的多分辨率支持机制 由anyDensity设置导致OpenGL贴图

前段时间给员工做培训,做了不少OpenGL下面的Demo,不过onSurfaceChanged 获取的width 和height和屏幕尺寸适中不符合

终于找到了 <supports-screens android:anyDensity="true"/>  设置,获取的尺寸和屏幕相符了

但是,贴图却不能显示了,全部变白

实机截图

android的多分辨率支持机制 由anyDensity设置导致OpenGL贴图模拟器运行效果android的多分辨率支持机制 由anyDensity设置导致OpenGL贴图

调查思考了一下原因,我觉得应该是样:

Android平台中,当程序在manifest中设置android:anyDensity="true"后,系统会对创建的bitmap进行缩放,缩放的根据就是Density

而在设备上,opengl的贴图大小必须是2的N次方,模拟器因为是软件模拟,对贴图尺寸没有严格要求。我的图片本来是512*512的,但是被自动缩放后,尺寸就不标准了,所以造成贴图没有成功

通过调试确认了这一想法

    bitmap = BitmapFactory.decodeResource(mContext.getResources(), id + i);
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();

不设置 android:anyDensity="true", w h 为512, 设置后 变为了768

然后,我将所有的图片资源,都放到了drawable-hdpi目录下,再运行程序,这次尺寸没有改变,贴图正常了。


基于这个问题,这里深入探讨一下android的多分辨率支持机制。

android SDK文档中  android-sdk-windows/docs/guide/practices/screens_support.html,说的其实比较清楚,不过由于是英文的,大家估计通读理解的人并不多,网上说到多分辨率支持,也就是

你可能感兴趣的:(android的多分辨率支持机制 由anyDensity设置导致OpenGL贴图)