【问题标题】:gl_FragCoord - insuffucient definition in ES Shading Language?gl_FragCoord - ES 着色语言中的定义不足?
【发布时间】:2014-02-27 15:50:45
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: graphics opengl-es glsl gpu opengl-es-3.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 中省略了这些限定符,并且我无法明确提及哪种约定是正确的(或者是否由实现决定),尽管我认为传统方式是半整数坐标。无论如何,看起来你必须添加一些代码,例如向下取整值以获得一致的行为。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多