我在 Android 上使用原生代码中的 OpenGL ES 1.1。在某些地方,我使用 glClipPlanef() 来剪辑一些东西。剪辑的代码是:
GLfloat clip[4] = { 0, -1, 0, 0.2 };
glEnable(GL_CLIP_PLANE0);
glClipPlanef(GL_CLIP_PLANE0, clip);
<draw things>
glDisable(GL_CLIP_PLANE0);
这会在 y 轴上向上剪掉所有内容。
当我在 HTC Gratia (Android 2.2) 和 Galaxy Nexus (Android 4.3) 上测试时,这工作正常。
但是,当我在 Nexus 4 (Android 4.3) 上进行测试时,剪辑不起作用。为了让它在那里工作,我必须将方程参数更改为:
GLfloat clip[4] = { -1, 0, 0, -0.02 };
Nexus 4 上的剪裁似乎 X 轴和 Y 轴颠倒了。所有绘图仍然与其他设备相同,这只影响剪裁。
有谁知道为什么会这样?它是 Nexus 4 中的 Adreno 320 GPU 特有的吗?如果剪辑在不同设备上的工作方式不同,我如何正确支持所有设备?
不幸的是,我没有可能只更改为 OpenGL ES 2.0,在项目的这一点上工作太多了。这可能是 Android 中的 OpenGL ES 1.1 仿真中的东西吗?
编辑:刚刚确认新的 Nexus 7(2013 版)也有同样的错误剪辑问题。它还具有 Adreno 320 GPU。