Opengl 如何在帧缓冲区中沿像素写入整数,然后使用写入的整数忽略深度缓冲区 我想做什么
我想让另一组三角形的一组三角形出血,或者忽略深度缓冲区,但前提是它们的编号相同 问题(可选阅读) 我不知道如何在不向管道中引入大量气泡的情况下做到这一点。现在我有非常高的吞吐量,因为我可以把我的几何体放到GPU上,告诉它渲染,然后忘记它。然而,如果我必须在画图时不断切换状态,我担心我的表现会下降。其他人做了我刚才所说的事情(做了大量的抽签和状态更改),他们的表现比我差得多。这种性能损失在较旧的硬件上也要严重得多,我们讨论的是,通过状态更改的方式,性能损失大约为50-100倍 不幸的是,这种三角形出血场景发生了数千次,因此状态机将被“绘制三角形,深度关闭,绘制三角形出血,深度打开,…”淹没,除了N次,其中N次可能变大(N>=1000) 想象这一点的一个好方法是有一组三角形Opengl 如何在帧缓冲区中沿像素写入整数,然后使用写入的整数忽略深度缓冲区 我想做什么,opengl,Opengl,我想让另一组三角形的一组三角形出血,或者忽略深度缓冲区,但前提是它们的编号相同 问题(可选阅读) 我不知道如何在不向管道中引入大量气泡的情况下做到这一点。现在我有非常高的吞吐量,因为我可以把我的几何体放到GPU上,告诉它渲染,然后忘记它。然而,如果我必须在画图时不断切换状态,我担心我的表现会下降。其他人做了我刚才所说的事情(做了大量的抽签和状态更改),他们的表现比我差得多。这种性能损失在较旧的硬件上也要严重得多,我们讨论的是,通过状态更改的方式,性能损失大约为50-100倍 不幸的是,这种三角形
T\u i
,以及一组通过B\u i
流血的三角形,其中B\u i
只通过T\u i
流血,而i
的范围是0…1000+
。请注意,如果我们正在绘制B_100
,那么它应该只通过T_100
,而不是T_99
或T_101
我的下一个想法是将所有三角形及其整数绘制到一个帧缓冲区(与整数一起),然后将贯穿三角形绘制到另一个帧缓冲区(也与整数一起),然后将这些帧缓冲区合并在一起。我想它们会有颜色、深度和整数,所以我希望能在片段着色器中合并它们
问题是,我不知道如何在片段着色器中的out vec4 fragColor
旁边写一个整数
问题(简而言之)
这给我留下了两个问题:
你想要的理论上是可能的,但我不能谈论它的性能。对于每个程序迭代,您将在许多纹理中读取和写入大量texel 无论如何,要回答您的问题:
glFramebufferTexture2D
和GL\u color\u ATTACHMENT0
、GL\u color\u ATTACHMENT1
等具有多个颜色附件。然后,每个纹理都可以有自己的内部格式,在您的示例中,您可能希望为颜色输出使用常规RGB纹理,和第二个仅为1整数的纹理
vec3
/vec4
,整数缓冲区为int
,浮点缓冲区为float