【发布时间】:2017-02-26 07:35:43
【问题描述】:
我正在开发一个游戏引擎,我需要在我的片段着色器中有一组 Sampler2D 来支持多个纹理。在 GLSL 130 及更高版本上,它看起来像这样:
uniform sampler2D textures[32];
遗憾的是,我的显卡只是带有 OpenGL 2.1 的默认 Intel,因此它不支持 Sampler2D 数组。如果可能的话,如何在不为每个纹理创建 32 个制服的情况下实现这一目标?
谢谢。
【问题讨论】:
我正在开发一个游戏引擎,我需要在我的片段着色器中有一组 Sampler2D 来支持多个纹理。在 GLSL 130 及更高版本上,它看起来像这样:
uniform sampler2D textures[32];
遗憾的是,我的显卡只是带有 OpenGL 2.1 的默认 Intel,因此它不支持 Sampler2D 数组。如果可能的话,如何在不为每个纹理创建 32 个制服的情况下实现这一目标?
谢谢。
【问题讨论】:
无论你做什么,你都无法实现它。您的“默认 Intel with OpenGL 2.1”不允许您在一个着色器阶段访问 32 个纹理。时期。您只能在支持 OpenGL 4.x 的更新硬件上获得该功能。所以即使在 GLSL 1.30 上,这也可能会失败。
您可以期望的最好的结果是支持EXT_texture_array,这将允许您拥有sampler2DArray 类型。这将允许您创建GL_TEXTURE_2D_ARRAY_EXT 纹理类型,它可以有多个数组层。您可以访问纹理的各个层而无需任何交叉。
此外,根据您的工作,纹理图集可能是可能的。
【讨论】: