OpenGL中的纹理基于Android屏幕密度(hdpi)损坏

时间:2011-10-09 12:47:08

标签: android opengl-es android-compatibility

我遇到HDPI屏幕问题(在三星Galaxy S2上测试过)。

我有一个纹理贴图,我与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?

任何对此的了解都将受到赞赏。

1 个答案:

答案 0 :(得分: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;