在我看来,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 中省略了这些限定符,并且我找不到明确提及哪个约定是正确的(或者是否留给实现来决定),尽管我认为传统方式是半整数坐标。无论如何,看起来您必须添加一些代码来例如向下舍入值以获得一致的行为。
顺便说一句,手册页是不可信的——它们往往会省略很多东西并包含错误。规范永远是权威。