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 mipmapping带来的性能提升_Opengl_Mipmaps - Fatal编程技术网

Opengl mipmapping带来的性能提升

Opengl mipmapping带来的性能提升,opengl,mipmaps,Opengl,Mipmaps,为什么性能提升要归功于mipmap? 我在网上的某个地方读到,“当我们有256 x 256纹理数据,并想将其映射到4x4时,驱动程序只会将生成的4x4 mipmap级别复制到GPU内存,而不是256x 256数据。采样将在GPU内存上复制的4x4数据上工作,这将节省大量计算。”我只想知道它是否正确 此外,当glTeximage调用发生时,它将纹理数据上传到gpu内存中,并在glTeximage调用中传递。那么它与上述陈述相冲突。当我们调用glgeneratemipmap()时,它是否会在CPU端

为什么性能提升要归功于mipmap? 我在网上的某个地方读到,“当我们有256 x 256纹理数据,并想将其映射到4x4时,驱动程序只会将生成的4x4 mipmap级别复制到GPU内存,而不是256x 256数据。采样将在GPU内存上复制的4x4数据上工作,这将节省大量计算。”我只想知道它是否正确


此外,当glTeximage调用发生时,它将纹理数据上传到gpu内存中,并在glTeximage调用中传递。那么它与上述陈述相冲突。当我们调用glgeneratemipmap()时,它是否会在CPU端创建所有mipmap级别,然后在GPU端复制所有这些级别?

mipmap提高性能有两个主要原因。第一个原因是它减少了GPU内存和纹理单元之间的带宽,第二个原因是它改进了纹理单元内部的缓存

假设您有一个应用了纹理的远处对象。通过对GPU进行mipmapping,而不是处理、读取和缓存一个巨大的纹理(级别0),它将读取一个较小的纹理。在这种情况下,带宽的减少非常明显

mipmapping上的带宽和缓存是齐头并进的。采样距离对象的纹理很可能会以稀疏方式读取纹理。例如,读取texel x,y,对于下一个片段,读取x+10,y+10。x+10、y+10可能位于另一个缓存线中。从较小的纹理读取时,缓存未命中率可能会低得多


glTexImageXX创建单个级别并将像素数据上载到GPU。调用glGenerateMipmap时,驱动程序将为附加级别分配GPU内存,并且很可能会执行单个或多个GPU作业来填充这些级别。在某些情况下,它会在CPU上执行相同的操作,然后将数据上载到GPU。

请您解释第二点,它如何改进纹理单元内的缓存?@debonair:使用Mipmap时,样本大小更接近实际的纹理大小。因此,回访更紧密。我有一个完整的图表,可能有助于可视化正在发生的事情。