Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 使用glClear清除帧缓冲区和简单地绘制一个矩形来清除帧缓冲区有什么区别?_Opengl_3d - Fatal编程技术网

Opengl 使用glClear清除帧缓冲区和简单地绘制一个矩形来清除帧缓冲区有什么区别?

Opengl 使用glClear清除帧缓冲区和简单地绘制一个矩形来清除帧缓冲区有什么区别?,opengl,3d,Opengl,3d,我认为如果不使用glClear,至少一些旧的图形驱动程序会崩溃,而且glClear在很多情况下可能会更快,但为什么呢?3-d图形驱动程序通常是如何实现的,以便这些使用会产生不同的结果?为什么它会更快?因为它是一个绕过其他类型图形必须进行的大多数计算的函数 glClear忽略Alpha函数、混合函数、逻辑操作、模板、纹理映射和深度缓冲 为什么有些司机在没有它的情况下撞车?这很难说,但它应该与OpenGL的实现细节有关。这些函数完成了它应该做的事情,但可能会做更多您不知道的事情。 OpenGL可能

我认为如果不使用glClear,至少一些旧的图形驱动程序会崩溃,而且glClear在很多情况下可能会更快,但为什么呢?3-d图形驱动程序通常是如何实现的,以便这些使用会产生不同的结果?

为什么它会更快?因为它是一个绕过其他类型图形必须进行的大多数计算的函数

glClear忽略Alpha函数、混合函数、逻辑操作、模板、纹理映射和深度缓冲

为什么有些司机在没有它的情况下撞车?这很难说,但它应该与OpenGL的实现细节有关。这些函数完成了它应该做的事情,但可能会做更多您不知道的事情。
OpenGL可能会从这个函数中推断出它需要执行的其他任务。

在较高的级别上,它可以更快,因为OpenGL实现提前知道整个缓冲区需要设置为相同的颜色/值。你越了解到底需要做什么,你就越能利用可能的加速

假设将整个缓冲区设置为相同的值比将相同的像素设置为可变值更有效。使用
glClear()
,您已经知道所有像素将具有相同的值。如果使用发射恒定颜色的片段着色器绘制屏幕大小的四元体,则驱动程序必须通过分析着色器来识别这种情况,或者系统必须比较来自着色器的值,以知道所有像素都具有相同的值

将所有内容设置为相同值会更有效的原因与帧缓冲区压缩和相关技术有关。GPU通常不会将每个像素写入帧缓冲区,而是使用各种压缩方案来减少帧缓冲区写入所需的内存带宽。如果你想象几乎任何一种压缩,所有具有相同值的像素都是非常有利的

为了让您了解已发布的特定于供应商的技术,这里有一些来源。你可以通过搜索找到更多信息

  • 文章讨论了相对较新的AMD卡中的新帧缓冲区压缩方法:
  • 关于零带宽的NVIDIA专利已清除:
  • ARM网站上关于Mali帧缓冲区压缩的简介:

由于使用glClear时无需遍历整个管道,因此速度可能更快。绘制四边形时,必须至少调用顶点着色器、光栅化器和片段着色器。