gpt4 book ai didi

opengl - GLSL,不同大小的纹理数组

转载 作者:行者123 更新时间:2023-12-04 01:40:07 33 4
gpt4 key购买 nike

在 GLSL 中进行多重纹理处理时,是否有一个可索引的采样器数组,其中每个纹理的大小不同?此语法无效:

uniform sampler2D texArray[5];

现在似乎唯一的选择是单独创建采样器:
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;
uniform sampler2D tex5;

但是我无法遍历它们,这真是令人头疼。有解决办法吗?

最佳答案

This syntax isn't valid:



谁说的?采样器数组肯定是有效的(取决于版本)。你如何使用它们是另一回事。

GLSL 1.20 及更低版本不允许采样器数组。

在 GLSL 1.30 到 3.30 中,您可以拥有采样器数组,但对索引有严格的限制。索引必须是一个整数常量表达式。因此,虽然您可以声明一个采样器数组,但您不能循环遍历它。

GLSL 4.00 及更高版本允许索引为“ dynamically uniform integral expression”。该术语基本上意味着着色器的所有实例化(在同一个绘制调用中)必须获得相同的值。

因此,您可以在 GLSL 4.00+ 中循环遍历一个恒定范围,并使用循环计数器索引一个采样器数组。您甚至可以从统一变量中获取索引。您不能做的是让索引依赖于着色器阶段的输入(除非该值在渲染命令引起的所有实例中都相同),或者来自从纹理访问派生的值(除非该值是由渲染命令引起的所有实例都相同),或其他东西。

对放置在采样器数组中的纹理的唯一要求是它们与采样器类型匹配。所以你必须使用 GL_TEXTURE_2Dsampler2D 的所有元素上大批。除此之外,纹理可以有任意数量的差异,包括大小。数组的存在是为了使编码更容易;它不会改变那里的语义。

请记住:采样器数组中的每个单独元素都需要绑定(bind)到自己的纹理图像单元。

关于opengl - GLSL,不同大小的纹理数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12030711/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com