2011-10-09 51 views
1

我遇到了HDPI屏幕问题(在Samsung Galaxy S2上测试过)。基于Android屏幕密度损坏的OpenGL纹理(hdpi)

我有一个纹理贴图,与OES_draw_texture 1.1扩展一起使用。这适用于MDPI屏幕,大大小小(在HTC Legend和Asus Transformer平板电脑上进行测试)。纹理贴图被正确裁剪并且纹理正确显示。

但是,在Galaxy S2(以及大概所有的HDPI设备)上,纹理贴图未被正确裁剪。纹理贴图位于/ drawable /目录中,而minSdkVersion设置为4,因此屏幕兼容性将不会打开。如果屏幕兼容性打开(通过将minSdkVersion设置为3),即使在S2上也可以正常工作,因为它正在模拟MDPI屏幕。

我的印象是,如果您要访问可绘制资源“a”,Android会查看特定密度文件夹(在本例中为/ drawable-hdpi /),如果找不到,则返回到/ drawable /或/ drawable-mdpi /。但是我还没有找到文件来支持这个。

我的问题如下:

  • 什么是Android的资源行为的搜索?如果它无法在hdpi中找到资源,它实际上会回退到mdpi上吗?资源?
  • 为什么OES_draw_texture GL-ES1.1扩展无法正确裁剪?我怀疑它与px和dp有关; draw_texture通常使用直接像素,但Android可能会尝试使用dp,因此将所有裁剪位置乘以1.5,因为资源位于/ drawable /文件夹中?
  • 有没有办法强制HDPI设备模拟MDPI而不使用屏幕兼容性?

任何知识,将不胜感激。

回答

2

From here.(当加载你的纹理)

// This will tell the BitmapFactory to not scale based on the device's pixel density: 
// (Thanks to Matthew Marshall for this bit) 
BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inScaled = false;