gpt4 book ai didi

opengl - gl_FragColor 是否做了 gl_FragData 不做的事情?

转载 作者:行者123 更新时间:2023-12-02 01:25:14 24 4
gpt4 key购买 nike

正如 jar 头上所说:是否有任何理由使用 gl_FragColor 而不是 gl_FragData[0]?如果不是,那么为什么gl_FragColor存在呢?它仅仅是 gl_FragData 不存在时期的遗留物吗?

(是的,我知道最新的 GLSL 版本中已弃用两者,但我仍然想编写可以在旧卡上运行的代码。)

最佳答案

我将向您推荐 GLSL 1.1 的 OpenGL 规范,因为除了说它们是互斥的之外,它对两者几乎没有什么区别。

The OpenGL Shading Language (version 1.1) - 7.2 片段着色器特殊变量 - 第 43 页

If a shader statically assigns a value to gl_FragColor, it may not assign a value to any element of gl_FragData. If a shader statically writes a value to any element of gl_FragData, it may not assign a value to gl_FragColor. That is, a shader may assign values to either gl_FragColor or gl_FragData, but not both.

考虑到这种语言,在不使用 MRT(多个渲染目标)的着色器中,gl_FragColor 可能是首选。对于输出到多个缓冲区的着色器,请使用 gl_FragData [n]。但切勿混合搭配,即使您可能从逻辑上假设 gl_FragColorgl_FragData [0] 的别名。

GLSL 规范早于 FBO,因此拥有一组位置来输出片段数据并不总是有意义。由于 GLSL 和 FBO 都是 OpenGL 3.0 的核心,因此很容易认为这是理所当然的。片段着色器的旧 ARB 扩展规范对这个主题有一个简介:

14) What is the interaction with a possible MRT (Multiple Render Target) extension?

The OpenGL Shading Language defines the array gl_FragData[] to output
values to multiple buffers. There are two situations to consider.

1) There is no MRT extension support. A shader can statically assign a
value to either gl_FragColor or gl_FragData[0] (but not both).
Either way the same buffer will be targeted.
2) There is MRT support. In this case what happens is defined in the
relevant MRT extension documentation.

他们正在提前思考,但还没有完全准备好所有的部分。无论如何,这都是古老的历史。

关于opengl - gl_FragColor 是否做了 gl_FragData 不做的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com