GLSL - komponentenweise bedingte Zuweisung.

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

GLSL - komponentenweise bedingte Zuweisung.

Beitrag 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?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: GLSL - komponentenweise bedingte Zuweisung.

Beitrag 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

War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: GLSL - komponentenweise bedingte Zuweisung.

Beitrag von Spiele Programmierer »

mix hat entsprechende Überladungen für genau diesen Zweck.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: GLSL - komponentenweise bedingte Zuweisung.

Beitrag 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
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten