【问题标题】:OpenGL - Sampler2D array in GLSL 120?OpenGL - GLSL 120 中的 Sampler2D 数组?
【发布时间】:2017-02-26 07:35:43
【问题描述】:

我正在开发一个游戏引擎,我需要在我的片段着色器中有一组 Sampler2D 来支持多个纹理。在 GLSL 130 及更高版本上,它看起来像这样:

uniform sampler2D textures[32];

遗憾的是,我的显卡只是带有 OpenGL 2.1 的默认 Intel,因此它不支持 Sampler2D 数组。如果可能的话,如何在不为每个纹理创建 32 个制服的情况下实现这一目标?

谢谢。

【问题讨论】:

    标签: arrays macos opengl


    【解决方案1】:

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

    您可以期望的最好的结果是支持EXT_texture_array,这将允许您拥有sampler2DArray 类型。这将允许您创建GL_TEXTURE_2D_ARRAY_EXT 纹理类型,它可以有多个数组层。您可以访问纹理的各个层而无需任何交叉。

    此外,根据您的工作,纹理图集可能是可能的。

    【讨论】:

    • 我非常支持纹理图集的建议。大多数事情都可以用它们来实现,而且它非常便携和快速。警告通常仅在纹理图集上使用过多的 mip 贴图级别时才会出现,这在大多数情况下是一个可管理的问题。
    • 我找到了解决这个问题的方法,我之前并不知道,但是将 OpenGL 更改为 Core Profile 解决了这个问题,我一次可以访问 16 个纹理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多