我在Visual C ++中使用OpenGL 4进行一些纹理操作。 我正在研究的平台是Visual Studio 2015.看过GL_TEXTUREi纹理单元的实现后,我发现总数限制在0到31之间(总共32个)。
这是否意味着可以同时访问的最大纹理数量受限于32?
这是来自实现源代码:
{{1}}
答案 0 :(得分:6)
可以绑定到OpenGL的纹理数量是不是32 或 16 。这不是你用glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
得到的。该函数检索片段着色器 可以访问的纹理数。
请参阅每个shader has its own limit of the number of textures it can use。但是,还有一些可以使用的纹理总数,周期。这是由GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
定义的(在OpenGL中)。
因此有两个限制:每阶段纹理和纹理总数限制。
OpenGL 3.x将每阶段限制的最小数量定义为16,因此硬件每阶段的纹理不能少于16个。它可以有一个更高的限制,但你知道你至少得到16. 3.x定义纹理的最小数量 - 总数限制为48. AKA:16 * 3阶段。类似地,GL 4.x将数字定义为每阶段16个纹理,以及80个纹理 - 总数限制(即:16 * 5阶段)。
同样,这些是最小数字。硬件可以(并且确实)变化。
要使用比定义的枚举数更多的纹理单位,可以使用GL_TEXTURE0
的值并将其添加到要操作的纹理单元中:
glActiveTexture(GL_TEXTURE0 + unit_index);