2

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

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

更糟糕的是,我在不同平台上得到的结果好坏参半:ARM Mali T604 似乎遵循 .5 约定,而 Adreno 330 似乎将像素中心设置为全整数(均在 Android 4.4.2 上测试)。

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

4

1 回答 1

1

通过实际的规范文档,我发现了这一点:

1.1.4 Changes from OpenGL GLSL 3.3:

Removed:
 * Layout qualifiers: index, origin_upper_left and pixel_center_integer

我不知道 OpenGL ES 中省略了这些限定符,并且我找不到明确提及哪个约定是正确的(或者是否留给实现来决定),尽管我认为传统方式是半整数坐标。无论如何,看起来您必须添加一些代码来例如向下舍入值以获得一致的行为。

顺便说一句,手册页是不可信的——它们往往会省略很多东西并包含错误。规范永远是权威。

于 2014-02-04T12:22:42.283 回答