GLSL为什么把早期的varying关键字改为了in/out?

Number of views 155

我对这个问题一直比较好奇,早期varying的定义不是挺好的么?把一个项目的GLSL代码可以直接复制到另一个项目中,但是后面改为in/out之后,比较早时候写的GLSL代码就得手动把varying改成in/out,不是说我比较懒不愿意这么做,尽管我确实比较懒。但是我更想了解下这背后的原因是啥?

1 Answers

varying 关键字改为 inout 是一种有意的设计决策,主要出于以下几点原因:

  1. 语义清晰varying 关键字在早期 GLSL 中用于表示顶点着色器和片段着色器之间的数据传递。然而,这种语义并不完全明确。通过使用 inout 关键字,开发者可以更清楚地理解数据是在哪个阶段被输入或输出的。

  2. 一致性与扩展性:现代 OpenGL 着色语言设计中,inout 关键字不仅限于顶点着色器和片段着色器之间的数据传递,它们还广泛用于其他类型的着色器(如几何着色器、计算着色器等)中的数据传递。因此,使用统一的 inout 语法则更具一致性,并且易于扩展。

  3. 可读性和维护性:使用 inout 可以使代码更加易读和易于维护。当看到 inout 关键字时,可以立即知道变量的作用域和生命周期,从而更容易理解和调试代码。

  4. 避免混淆:在某些情况下,varying 可能会导致一些混淆。例如,在某些上下文中,它可能被误解为全局变量。而 inout 则明确地指出了变量的作用范围。

总结来说,虽然将 varying 改为 inout 需要对旧代码进行一些修改,但这种改变是为了提高代码的清晰度、一致性和可维护性。长远来看,这对开发者和整个生态系统都是有益的。