gpt4 book ai didi

c++ - glUseProgram() 和速度之后 uniform 的行为

转载 作者:可可西里 更新时间:2023-11-01 17:42:18 29 4
gpt4 key购买 nike

glUseProgram() 有多快?有没有更好(更快)的东西?:

这是我的想法:

  1. 使用 1 个通用着色器程序,但具有许多输入设置和属性(每个图形类的设置)
  2. 为每个图形类使用 1 个以上的着色器

更改着色器程序后 uniform 处于什么状态?它们是否保存值(例如,矩阵的值)?

以下是我认为#1 的好处:

  • 不使用 glUseProgram()

#2 的好处:

  • 无矩阵变化(例如,如果 Menu 类和 Scene3D 类具有不同的投影矩阵)

最佳答案

这两个选项中哪个更好在很大程度上取决于这些着色器的作用、它们的不同程度以及您设置的属性/uniform 数量以及它们的更改频率。没有一个适用于所有情况的正确答案。

也就是说:请记住,不仅有状态更改的成本,还有着色器运行时成本,并且按顶点和片段支付。因此,保持着色器的复杂性较低始终是一个好主意,通用着色器比专用着色器更复杂。

尽量减少状态变化。如果您有使用程序 X 的对象 A、C、E 和使用程序 Y 的对象 B、D、F,那么在其他条件相同的情况下,按 ACEBDF 顺序呈现,而不是 ABCDEF。

关于最后一个问题:除非您重新链接它们,否则程序会在其整个生命周期内保留其状态,并因此保留 uniform 的值。但是 uniform 是按程序状态计算的,这意味着如果您在不同程序中有两个名称和类型相同的 uniform ,值将不会从一个程序转移到另一个程序。

关于c++ - glUseProgram() 和速度之后 uniform 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683065/

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