为什么性能会因mipmap而提升? 我在网上的某处读到“当我们有256 x 256纹理数据并希望将其映射到4x4时,驱动程序只会将生成的4x4 mipmap级别复制到GPU内存而不是256x 256数据。并且采样将对复制的4x4数据进行处理在GPU内存上将节省大量计算“我只是想知道它是否正确?
另外,当glTeximage调用发生时,它会在gpu内存中上传纹理数据,并在glteximage调用中传递。然后它与上述陈述冲突。当我们调用glgeneratemipmap()时它会在CPU端创建所有mipmap级别,然后在GPU端复制所有这些级别吗?
答案 0 :(得分:2)
Mipmapping提升了性能有两个主要原因。第一个是因为它减少了GPU内存和纹理单元之间的带宽,第二个是因为它改善了纹理单元内的缓存。
想象一下,你有一个带有纹理的远处物体。通过对GPU进行mipmaping而不是处理,读取和缓存巨大的纹理(级别0),它会读取较小的纹理。在这种情况下,带宽减少是非常明显的。
mipmaping上的带宽和缓存是齐头并进的。对距离对象的纹理进行采样最有可能以稀疏的方式读取纹理。例如,读取texel x,y,对于下一个片段,读取x + 10,y + 10。 x + 10,y + 10可以在另一个高速缓存行中。当从较小的纹理读取时,虽然缓存未命中可以少得多。
glTexImageXX创建单个级别并将像素数据上传到GPU。当调用glGenerateMipmap时,驱动程序将为其他级别分配GPU内存,并且很可能会执行单个或多个GPU作业来填充这些级别。在某些情况下,我在CPU上做同样的事情,然后将数据上传到GPU。