1
據我所知,我們用glTexImage2D函數在GPU內存中存儲紋理,理論上沒有限制的數字。但是,當我們嘗試使用它們時,存在32個紋理單元GL_TEXTURE0到GL_TEXTURE31的限制。爲什麼會有這種限制?爲什麼紋理單元數量在OpenGL中有限?
據我所知,我們用glTexImage2D函數在GPU內存中存儲紋理,理論上沒有限制的數字。但是,當我們嘗試使用它們時,存在32個紋理單元GL_TEXTURE0到GL_TEXTURE31的限制。爲什麼會有這種限制?爲什麼紋理單元數量在OpenGL中有限?
有問題的限制(正如評論中提到的那樣,是錯誤的限制)是一次可以使用一個渲染命令的紋理的數量。每個着色器階段都有its own limit on the number of textures it can access。
此限制,是因爲硬件是不是在它的能力是無限的。紋理需要資源,一些硬件限制了一次可以使用多少這些資源。就像硬件對着色器階段可以具有的制服數量有限制一樣,等等。
現在,有一些硬件,其能夠在更低水平的方式訪問紋理數據。該功能通過ARB_bindless_texture公開。這不是一個核心功能,因爲並不是所有最新的支持GL 4.x的硬件都可以支持它。
傳統上,每一個紋理單元可能會在片段應用的操作。這意味着只有很多單位可以用來保持像素填充率;那些紋理單元佔用了硅片的空間,爭奪紋理記憶等等(我在這裏簡化了一些東西)。更重要的是,枚舉0..31這一事實並不意味着它們存在於您的GL實現中。您可以用'glGet'函數查詢這些函數,例如'GL_MAX_TEXTURE_SIZE','GL_MAX_TEXTURE_IMAGE_UNITS'。 –
您可能對[* GLview *](http://www.realtech-vr.com/glview/)感興趣,它可以通過查詢來報告實際功能,限制,擴展等。 –
'ARB_bindless_texture'支持在支持它的硬件上訪問任何數量的紋理而不綁定它們。 – ybungalobill