Visual Studio 2015 中 OpenGL 4 实现中的纹理单元数 (GL_TEXTUREi)
Posted
技术标签:
【中文标题】Visual Studio 2015 中 OpenGL 4 实现中的纹理单元数 (GL_TEXTUREi)【英文标题】:Number of texture units (GL_TEXTUREi) in OpenGL 4 implementation in Visual Studio 2015 【发布时间】:2017-09-26 12:17:09 【问题描述】:我使用 OpenGL 4 在 Visual C++ 中进行一些纹理操作。 我正在使用的平台是 Visual Studio 2015。在查看了 GL_TEXTUREi 纹理单元的实现后,我发现总数限制在 0 到 31(总共 32 个)。
是不是意味着可以同时访问的纹理的最大数量被限制为32?
这是来自实现源代码:
#define GL_TEXTURE0 0x84C0
#define GL_TEXTURE1 0x84C1
#define GL_TEXTURE2 0x84C2
#define GL_TEXTURE3 0x84C3
#define GL_TEXTURE4 0x84C4
#define GL_TEXTURE5 0x84C5
#define GL_TEXTURE6 0x84C6
...
#define GL_TEXTURE31 0x84DF
【问题讨论】:
相关/重复:How many textures can usually I bind at once?(我实际上不能投票为骗子,因为它来自 GameDev.SE) 【参考方案1】:可以绑定到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);
【讨论】:
以上是关于Visual Studio 2015 中 OpenGL 4 实现中的纹理单元数 (GL_TEXTUREi)的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Visual Studio 无法识别 is_open() 函数
在 Visual Studio 2015 中打开 Visual Studio 2017 项目
使用 Visual Studio 2017 构建 open62541 DLL
Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015