gpt4 book ai didi

opengl - 设置 gl_FragDepth 会导致延迟吗?

转载 作者:行者123 更新时间:2023-12-04 08:43:24 25 4
gpt4 key购买 nike

我设计了一组非常基本的深度着色器,用于将深度渲染到我的阴影贴图深度纹理。
这是我使用的深度片段着色器的代码:

#version 330 core

in vec3 FragPos;
uniform vec3 lightPos;
uniform float farPlane;

void main()
{
float depth = length(FragPos - lightPos);
depth /= farPlane;
gl_FragDepth = depth;
}
这段代码不多,它只是简单地计算一个片段和光源之间的距离,通过将其除以光的远平面距离来归一化该值,并将 gl_FragDepth 设置为结果。
代码工作没有任何错误。我在场景中只有两个对象和一个点光源来测试渲染器。后来,我拉了一个大的内部场景,FPS 从 60-70 之间的某个地方下降到 30-40。
我尝试使用 Nvidia Nsights 进行一些 GPU 分析,发现阴影 channel 的 glDrawElements 花费了 4 毫秒。我将问题归结到上面写的片段着色器中的最后一行代码, gl_FragDepth = depth .
我发现如果我删除表达式 gl_FragDepth = depth,FPS 会跳到 70 秒,而绘制调用只需要 1 毫秒。请注意,其他一切都没有受到影响。
设置 gl_FragDepth 值怎么会导致性能低下?

最佳答案

写信给 gl_FragDepthdisable early fragment tests :

Therefore, an implementation is free to apply early fragment tests if the Fragment Shader being used does not do anything that would impact the results of those tests. So if a fragment shader writes to gl_FragDepth, thus changing the fragment's depth value, then early testing cannot take place, since the test must use the new computed value.

关于opengl - 设置 gl_FragDepth 会导致延迟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64451812/

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