在我看来,ES着色语言规范中gl_FragCoord
没有充分定义:here
我认为缺少的是像素中心应该位于何处的规范:在整数坐标处或它们之间的正确位置。相比之下,gl_FragCoord
的常规着色语言规范确定了这一点:here
更糟糕的是,即使我在不同的平台上得到了不同的结果:ARM Mali T604似乎遵循.5惯例,而Adreno 330似乎将像素中心设置为完整整数(均在Android 4.4.2上进行了测试)。
有人可以告诉我这里的最佳做法吗?
答案 0 :(得分:1)
通过实际specification document,我发现了这个:
1.1.4 Changes from OpenGL GLSL 3.3:
Removed:
* Layout qualifiers: index, origin_upper_left and pixel_center_integer
我不知道这些限定符是从OpenGL ES中省略的,我找不到明确提到哪个约定是正确的(或者如果它留给实现来决定),尽管我认为传统的方法是在半整数坐标。在任何情况下,看起来你必须添加一些代码,例如将值向下舍入以获得一致的行为。
顺便说一下,man页面不值得信任 - 它们往往会省略很多东西而且包含错误。规范始终是权威。