gl_FragCoord - ES着色语言中的定义不足?

时间:2014-02-03 22:58:45

标签: graphics opengl-es glsl gpu opengl-es-3.0

在我看来,ES着色语言规范中gl_FragCoord没有充分定义:here

我认为缺少的是像素中心应该位于何处的规范:在整数坐标处或它们之间的正确位置。相比之下,gl_FragCoord的常规着色语言规范确定了这一点:here

更糟糕的是,即使我在不​​同的平台上得到了不同的结果:ARM Mali T604似乎遵循.5惯例,而Adreno 330似乎将像素中心设置为完整整数(均在Android 4.4.2上进行了测试)。

有人可以告诉我这里的最佳做法吗?

1 个答案:

答案 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页面不值得信任 - 它们往往会省略很多东西而且包含错误。规范始终是权威。