Seite 1 von 1

GLSL - komponentenweise bedingte Zuweisung.

Verfasst: 13.07.2020, 16:01
von Schrompf
Hallo,

ihr seid doch Profis. Ihr kennt euch doch aus. In DirectX / HLSL kann ich den ternären Operator benutzen

Code: Alles auswählen

float4 res = someVector.xyzw < float4( 0, 0, 0, 0) ? float4( -1, -1, -1, -1) : float4( 1, 1, 1, 1);
um z.B. ein billiges Sign() zu implementieren. Ich weiß, sowas gibt's fertig in GLSL, aber die bedingte Zuweisung? Ich kann lessThan() benutzen, aber das gibt mir nen boolvector zurück. Und was tue ich mit dem?

Re: GLSL - komponentenweise bedingte Zuweisung.

Verfasst: 13.07.2020, 18:03
von xq
Grade mal aus Spaß probiert:

Code: Alles auswählen

bvec4 items = lessThan(someVector, vec4( 0, 0, 0, 0));

vec4 res = 2.0 * vec4(items) - 1.0; // true → 1, false → 0


Re: GLSL - komponentenweise bedingte Zuweisung.

Verfasst: 13.07.2020, 20:44
von Spiele Programmierer
mix hat entsprechende Überladungen für genau diesen Zweck.

Re: GLSL - komponentenweise bedingte Zuweisung.

Verfasst: 13.07.2020, 20:57
von Schrompf
Ah, ok, Danke! Cast zu float macht wahrscheinlich 0.0f oder 1.0f draus, Dein Beispiel wäre also +1 / -1, nicht +1 / 0 :-) Und ich muss einfach mal hoffen, dass jeder Treiber-ShaderCompiler daraus den OpCode cmp() macht