Graphics gl_FragCoord-ES着色语言中的不完整定义?

Graphics gl_FragCoord-ES着色语言中的不完整定义?,graphics,opengl-es,glsl,gpu,opengl-es-3.0,Graphics,Opengl Es,Glsl,Gpu,Opengl Es 3.0,在我看来,gl_FragCoord在ES着色语言规范中没有充分定义: 在我看来,缺少的是一个像素中心应该位于何处的规范:在整数坐标处或它们之间。相比之下,gl_FragCoord的常规着色语言规范明确了这一点: 更糟糕的是,我在不同的平台上得到的结果是混合的:ARM Mali T604似乎遵循.5约定,而Adreno 330似乎将像素中心设置为全整数(都在Android 4.4.2上测试) 有人能告诉我这里的最佳做法是什么吗?通过实际调查,我发现: 1.1.4 Changes from Open

在我看来,
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中被省略了,我也找不到一个明确的提及哪种约定是正确的(或者是否由实现来决定),尽管我认为传统的方式是在半整数坐标上。在任何情况下,看起来您都必须添加一些代码,例如向下舍入值以获得一致的行为


顺便说一句,手册页是不可信的——它们往往会遗漏很多内容并包含错误。规范始终是权威。

您始终可以添加0.375、0.375的亚像素偏移(到预转换坐标),作为折衷方案。长期以来,这一直是一个技巧,用于使三角形、点和光栅位置(而不是栅格)的像素中心一致对齐(因为它们都有不同的光栅化覆盖规则)。如果由于某种原因规则不同,则应将坐标四舍五入到正确的位置。通常,多边形的约定为左上角,点的约定为中心。