2017-02-25 99 views
0

我正在研究一个游戏引擎,我需要在我的片段着色器中有一个Sampler2Ds数组来支持多个纹理。在GLSL 130以上,它看起来是这样的:OpenGL - GLSL 120中的Sampler2D数组?

uniform sampler2D textures[32]; 

可悲的是,我的显卡是只是默认英特尔用OpenGL 2.1,所以它不支持Sampler2D阵列。如果可能的话,我怎样才能达到这个目标,而不是为每个纹理创建32个制服?

谢谢。

回答

2

无论你做什么都无法实现。你的“带有OpenGL 2.1的默认英特尔”不允许你在一个着色器阶段访问32个纹理。期。您只能在支持OpenGL 4.x的更新硬件上使用。所以即使在GLSL 1.30上,这也可能会失败。

您可以期待的最佳效果是支持EXT_texture_array,这将允许您拥有sampler2DArray类型。这将允许您创建纹理类型GL_TEXTURE_2D_ARRAY_EXT,该类型可以具有多个阵列图层。您可以访问纹理的各个图层,而无需任何交叉。

此外,根据你在做什么,纹理地图集可能是可能的。

+1

我高度支持纹理地图集的建议。大多数东西都可以用它们来实现,而且它非常便携和快速。注意事项通常只在纹理图集上使用过多的mip地图级别时出现,这在大多数情况下是一个可管理的问题。 – moka

+0

我发现了一种解决这个问题的方法,我之前并不知道,但将OpenGL更改为Core Profile解决了该问题,并且我一次可以访问16个纹理。 – flyingflouder86