Kurze GLSL Syntax Frage



  • Folgendes kurzer GLSL Shader:

    texture framebuffer
    texture wave
    vec2 offset
    
    effect
    {
    	vec2 texoffset = wave(_in * offset).xy;
    	texoffset -= vec2(0.5, 0.5);
    	texoffset *= 0.05;
    
    	_out = framebuffer(_in + texoffset);
    }
    

    texture ist dabei nix anderes als "uniform sampler2D", _in ist ein vec2 mit den koordinaten des momentanen pixels, _out ist ein vec4 mit RGBA also der farbwert, wie der pixel ausgegeben werden soll.

    das ist ein beispielshader aus dem SFML-PostFX Tutorial.

    Mir geht es jetzt um die Zeile

    vec2 texoffset = wave(_in * offset).xy;
    

    bzw auch.

    _out = framebuffer(_in + texoffset);
    

    Was wird mit "name(irgendwas)" gemacht? Also, was macht der "()"-Operator bei dem jeweiligen Objekt?

    Ist "bla = irgendwas(4,5)" äquivalent zu "bla = irgendwas.xy" ?


  • Mod

    es ist ein funktionsaufruf, win in c, wuerde ich sagen.



  • Wenn "irgendwas" ein vec2/3/4 ist, dann bedeutet bla = irgendwas.xy, dass dem Vektor bla (der ein vec2 sein muss) die x/y Werte von irgendaws zugeteilt werden. irgendwas(...) jedoch stellt einen Funktionsaufruf dar, wobei diese irgendwo deklariert sein muss. Der Aufruf liefert dann den Rueckgabewert der Funktion zurueck, den man wiederum per Zuweisungsoperator '=' einem weiteren Objekt zuweisen kann.


Anmelden zum Antworten