据我所知,我们使用glTexImage2D函数将纹理存储在GPU内存中,理论上没有数量限制。但是,当我们尝试使用它们时,存在32个纹理单元GL_TEXTURE0到GL_TEXTURE31的限制。为什么会出现这种限制?
答案 0 :(得分:1)
有问题的限制(在评论中提到,是错误的限制)取决于一次可以与单个渲染命令一起使用的纹理数量。每个着色器阶段都有its own limit on the number of textures it can access。
存在此限制是因为硬件的功能不受限制。纹理需要资源,某些硬件限制了一次可以使用多少这些资源。就像硬件对着色器阶段可以拥有的制服数量有限制等等。
现在,有一些硬件能够以更低级别的方式访问纹理数据。此功能通过ARB_bindless_texture公开。这不是核心功能,因为并非最近所有支持GL 4.x的硬件都能支持它。