【问题标题】:Textures in OpenGL corrupted based on Android screen density (hdpi)OpenGL 中的纹理基于 Android 屏幕密度 (hdpi) 损坏
【发布时间】:2011-10-09 12:47:07
【问题描述】:

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

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

但是,在 Galaxy S2(可能是所有 HDPI 设备)上,纹理贴图未正确裁剪。纹理贴图位于/drawable/目录下,minSdkVersion设置为4,所以Screen Compatibility不会开启。如果打开屏幕兼容性(通过将 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?

任何对此的了解将不胜感激。

【问题讨论】:

    标签: android opengl-es android-compatibility


    【解决方案1】:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多