据我了解,我们将纹理存储在GPU内存中,并使用GlTeximage2D函数存储,理论上没有有限的数字。但是,当我们尝试使用它们时,有一个限制为32个纹理单元gl_texture0 to gl_texture31。为什么会有这种限制?
所讨论的限制(如注释中所述,错误的限制)在一次可以与单个渲染命令一起使用的纹理数上。每个着色器阶段都对其可以访问的纹理数量有自己的限制。
之所以存在此限制,是因为硬件在其功能中并非无限。纹理需要资源,并且某些硬件可以一次使用多少这些资源。就像硬件对着色器舞台所能拥有的制服数量一样,等等。
现在,有一些硬件能够以更低级的方式访问纹理数据。此功能通过arb_bindless_texture暴露。这不是一个核心功能,因为并非所有最近的GL 4.X功能可以支持它。