Opengl es 在WebGL或OpenGL中,使用输出片段变量作为临时存储是否不好?

Opengl es 在WebGL或OpenGL中,使用输出片段变量作为临时存储是否不好?,opengl-es,gpu,webgl,webgl2,Opengl Es,Gpu,Webgl,Webgl2,忽略编码模式和代码清晰度/质量: 这是一个问题,我只是不知道这是天生的坏还是无关紧要。在WebGL 1.0中,我找不到足够的内部工作机制来指定:gl_FragColor或WebGL 2中的out变量(布局(位置=0)out vec4 color) 执行以下操作是否会产生一些固有的额外性能成本: void main() { gl_FragColor = vec4(0., 0., 0., 1.); vec4 val = gl_FragColor * something; ... gl

忽略编码模式和代码清晰度/质量:

这是一个问题,我只是不知道这是天生的坏还是无关紧要。在WebGL 1.0中,我找不到足够的内部工作机制来指定:gl_FragColor或WebGL 2中的out变量(布局(位置=0)out vec4 color)

执行以下操作是否会产生一些固有的额外性能成本:

void main() {
  gl_FragColor = vec4(0., 0., 0., 1.);
  vec4 val = gl_FragColor * something;
  ...
  gl_FragColor = val;
}
或者完全使用临时声明的变量,然后一次性赋值给out值更好吗

void main() {
  vec4 thing = vec4(0., 0., 0., 1.);
  vec4 val = thing * something;
  ...
  gl_FragColor = val;
}

我只是猜测答案是“不”,没有任何后果。驾驶员可以做任何想做/需要做的事情来得到正确答案。如果
gl\u FragColor
是特殊的,则驾驶员可以自行设定温度。GPU供应商为性能而竞争。着色器被转换为GPU本身的汇编语言,因此它不太可能是特殊的,除非作为一种告诉编译器在计算完成后实际输出哪个值的方式


我总是这样做。three.js as也是如此,这听起来很公平,也很有意义。如果你有一个编写了糟糕的驱动程序的供应商,那么它“可能”会对性能造成影响,但是编写糟糕的驱动程序可能不值得为任何人提供支持。在接受这个答案之前,我将把这个问题留一段时间,看看是否还有其他想法:)