gpt4 book ai didi

opengl - 在片段着色器中,为什么我不能使用平面输入整数来索引 sampler2D 的统一数组?

转载 作者:行者123 更新时间:2023-12-04 18:19:07 24 4
gpt4 key购买 nike

我想指定在渲染一组 Sprite 时要使用的纹理。所以我在它们的顶点数据中放置了一个纹理索引,并将它作为一个平面值从我的顶点着色器传递给我的片段着色器,但不能像预期的那样使用它来索引采样器数组,因为编译器将其视为“非常量”。相反,我不得不求助于下面令人作呕的代码。谁能解释这里发生了什么?

const int numTextures = 2;

uniform sampler2D textures[numTextures];

in vec2 uv;
flat in int tex;
out vec4 colour;

void main(void)
{
// this caused the compiler error
/// "sampler arrays indexed with non-constant expressions"
// colour = texture( textures[ tex ], uv );

// hence this (ugh) ...
switch ( tex )
{
case 0:
colour = texture( textures[0], uv );
break;
case 1:
colour = texture( textures[1], uv );
break;
default:
colour = vec4( 0.3f, 0.3f, 0.3f, 1.0f );
break;
};
}

最佳答案

[...] but can't use it to index an array of samplers as expected because compiler sees it as "non-constant" [...]


在 3.30 版之前的 GLSL 和 3.00 版之前的 GLSL ES 中,纹理采样器数组的索引必须是一个常量表达式:
GLSL 3.30 Specification - 4.1.7 Samplers (page 21)
GLSL ES 3.00 Specification - 4.1.7.1 Samplers (page 29) :

Samplers aggregated into arrays within a shader (using square brackets [ ]) can only be indexed with integral constant expressions [...]



在更高版本中,采样器数组的索引必须是“动态统一的”。这意味着所有片段的索引必须“相同”(例如,常量或统一变量)。
GLSL 4.60 Specification - 4.1.11. Opaque Types (page 31)
GLSL ES 3.20 Specification - 4.1.11. Opaque Types (page 32)

When aggregated into arrays within a shader, opaque types can only be indexed with a dynamically uniform integral expression. [...]

[...] Sampler types (e.g. sampler2D) are opaque types [...]


GLSL 4.60 Specification - 3.8.2. Dynamically Uniform Expressions (page 20)
GLSL ES 3.20 Specification - 3.9.3. Dynamically Uniform Expressions (page 22)

A fragment-shader expression is dynamically uniform if all fragments evaluating it get the same resulting value.



一个 flat片段着色器输入对于单个基元是不变的,但对于整个网格不是不变的,对于由单个“绘制调用”处理的所有基元也不是,对于调用组来说是不同的。 A ( flat ) 片段着色器输入不是 Dynamically uniform .

关于opengl - 在片段着色器中,为什么我不能使用平面输入整数来索引 sampler2D 的统一数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388274/

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