在我看来,gl_FragCoord
在 ES 着色语言规范中没有充分定义:这里
在我看来,缺少的是像素中心应该位于何处的规范:在整数坐标处或它们之间。相比之下,gl_FragCoord
的常规着色语言规范已经确定了这一点:这里
更糟糕的是,我在不同的平台上得到了不同的结果:ARM Mali T604似乎遵循.5约定,而Adreno 330似乎将像素中心置于全整数(两者都在Android 4.4.2上测试过)。
有人可以启发我这里的最佳实践吗?
浏览实际的规范文档,我发现:
1.1.4 Changes from OpenGL GLSL 3.3:
Removed:
* Layout qualifiers: index, origin_upper_left and pixel_center_integer
我不知道这些限定符在 OpenGL ES 中被省略了,我找不到明确的提及哪个约定是正确的(或者是否留给实现来决定),尽管我认为传统方式是半整数坐标。无论如何,看起来您必须添加一些代码来例如向下舍入值以获得一致的行为。
顺便说一下,手册页是不可信的 - 它们往往会省略很多东西并包含错误。规范始终是权威。