Visual Studio 2015中OpenGL 4实现中的纹理单元数(GL_TEXTUREi)

时间:2017-09-26 12:17:10

标签: c++ opengl glsl shader

我在Visual C ++中使用OpenGL 4进行一些纹理操作。 我正在研究的平台是Visual Studio 2015.看过GL_TEXTUREi纹理单元的实现后,我发现总数限制在0到31之间(总共32个)。

这是否意味着可以同时访问的最大纹理数量受限于32?

这是来自实现源代码:

{{1}}

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);