GLSL扩展支持?:三元运算符?

6

我正在使用 #version 120 将 WebGL GLSL 着色器移植到 OpenGL GLSL 桌面。

是否有任何扩展可以添加对三目运算符 ?: 的支持?

例如:

#extension GL_EXT_***: enable

1
这显然是一个 XY 问题。你做了什么让你认为 GLSL 不支持 ?: - Nicol Bolas
它可能是,但 #version 120 报错了 - neosettler
1
这就是XY问题的本质。你的问题在于你的代码出现了错误。你认为这些错误是由于?:不被支持所导致的。相反,你应该询问你真正的问题:你的代码为什么会出错。 - Nicol Bolas
哦,我明白你的意思了。我会留意这个问题的,但是在移植了数千个着色器后,每个实例都出现了这些错误,而当使用相同的代码带有 if / else 语句时,它们都能正常运行。 - neosettler
经过进一步的调查,你是正确的。有些着色器可以工作...而有些则不能。这确实很奇怪。 - neosettler
1个回答

10
不需要扩展,它就在基本规范中: OpenGL Shading Language 1.20 Specification第5.9节“表达式”,第38页,第6个项目:
三元选择运算符(?:)。它对三个表达式进行操作(exp1?exp2:exp3)。该运算符评估第一个表达式,该表达式必须产生标量布尔值。如果结果为真,则选择评估第二个表达式,否则选择评估第三个表达式。仅评估第二个和第三个表达式之一。第二个和第三个表达式可以是任何类型,只要它们的类型匹配,或者可以应用于其中一个表达式的第4.1.10节“隐式转换”中的转换使它们的类型匹配。此结果匹配类型是整个表达式的类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接