c++ - OpenGL 会阻止不必要的 API 调用吗?

标签 c++ opengl optimization

目前我的管道中有大约 15 个渲染 channel 。对于每一遍,我都会在绘图前设置正确的设置,然后再重新设置。这些设置包括视口(viewport)大小、打开或关闭深度测试、混合功能或关闭、模板功能、模板操作等。

我想知道 OpenGL 是否足够聪明,可以忽略设置已存在状态的 API 调用。因为否则我会用很多标志跟踪状态,并且在渲染过程之前只在实际需要时设置状态。

最佳答案

简短的回答:这取决于驱动程序。

OpenGL 本身并没有做很多事情。供应商可以按照他们认为合适的方式实现标准规定的功能。他们通常会测试现有状态以避免不必要地拖延管道吗?也许吧,但如果没有阅读供应商的建议或自己衡量性能,就无法确定。

我所看到的建议(没有引用,因为它到处都是)的共识是,您应该避免调用带有冗余状态更改的 OpenGL。它不会造成太大伤害,而且可能会带来一些好处。

在您的情况下(在传递之间每帧更改几次状态),它可能不会有太大区别。

关于c++ - OpenGL 会阻止不必要的 API 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143308/

相关文章:

opengl - 使用带有 glew 的 VBO 访问冲突

c++ - 从多个线程写入内存区域会导致争用吗?

opengl - 用 fwidth 确定 miplevel

c++ - 基于四元数的相机不需要的滚动

algorithm - 不可预测数据的排序算法

python - 优化盈亏平衡点 : iterate many times over set or convert to list first?

myClass(x,y,z) = value 的 C++ 运算符重载

c++ - 读取 Win32 变量

c++ - itk - 3D 图像分割

c++ - Visual Studio c++ 链接器的一个很好的教程