我不知道校服是如何在记忆中表现的。
制服似乎可以占用宝贵的登记空间,但它们最终会进入/通过/进入全球记忆,对吗?
当制服未使用时情况是否会改变?编译器可以优化它们吗? - 在这种情况下,我将无效(-1)作为绑定位置,所以我假设是。
答案 0 :(得分:3)
制服以GLSL编译器和OpenGL实现认为合适的任何方式表示。一些实现使得组件内的某些制服实际常量,使得改变制服实际上是原位修补组件。有些人对制服有特殊的记忆。
这完全取决于硬件。
编制者可以优化制服;这就是“活跃制服”这个词的来源。用于查询统一信息的OpenGL API仅适用于活动制服:实际检测到编译器正在使用的制服。
答案 1 :(得分:2)
首先,GLSL规范没有说明它的概念的实际实现,所以下面的详细说明当然应该被解读为“可能是任何方式,但现在通常都是这样”。
关于图形硬件的我(可能是有限的)知识,制服通常存在于所谓的常量存储器中,这是全局设备存储器的一部分(并且甚至可以缓存更新的硬件),因为它们无法更改无论如何,通过着色器程序,并且对程序的所有调用都是全局的(可以并且应该并行运行在不同的多处理器上)。因此,它们本身不会占用任何多处理器寄存器空间。
你也是对的,因为GLSL编译器可以(并且通常会)优化掉任何未使用的制服(以及属性),但前提是当它们没有用于任何可能的执行分支时。因此,获得-1
统一位置的经历是完全有效的(并且通常是期望的)行为。