我正在尝试为OpenGL创建类似效果系统的东西,我希望能够在同一个文件中定义多个着色器。但我发现了以下问题。假设我有两个着色器:A和B.着色器A使用texA,着色器B使用texB。然后,尽管着色器A既不使用texB也不使用着色器B使用texA,两个纹理都将在两个程序中枚举(我使用单独的程序,因此每个着色器对应一个程序)。一个结果是我不能在一个文件中定义很多纹理,因为着色器将无法链接(它成功编译但链接器然后抱怨纹理采样器的数量超过硬件限制)。其他问题是我正在进行自动资源绑定,并且我的着色器有很多错误的资源依赖性。
那么有没有办法告诉着色器编译器/链接器从单独的程序中删除所有未使用的资源?
答案 0 :(得分:1)
着色器采样器单元不用于选择纹理,而是将纹理单元传递给着色器。纹理本身被绑定到纹理单元。因此,选择使用哪种纹理不应在着色器中完成,而应在宿主程序中完成。
如果你的OpenGL实现(= GPU驱动程序)支持这些,你可以使用无绑定纹理。