MUOKKAA: Tämä on kopio kysymyksestä pinon ylivuodosta: https://stackoverflow.com/questions/9222217/how-does-the-fragment-shader-know-what-variable-to-use-for-the-color-of-a-pixel

Jos haluat lähettää arvon kärkien varjostimesta fragmentti-varjostimeen, kärkiparametrien on ilmoitettava yksi muuttuja nimellä out, katkelma-varjostimen on ilmoitettava muu muuttuja in ja molempien muuttujien nimien ja tyyppien on oltava samat. Mutta tätä ei tapahdu, kun haluat lähettää väriarvon fragmentin varjostimesta. Itse asiassa voit kutsua lähtömuuttujaa haluamallasi tavalla. Miksi? Vanhemmassa versiossa oli yksi muuttuja nimeltä gl_FragColor
Kuinka ohjelma linkittää ulostulofragmenttimuuttujan gl_FragColoriin?

Kommentit

Vastaa

Se toimii melkein samalla tavalla kuin kärkipisteiden varjostimien syötteet.

Kärkipisteiden varjostimissa sinulla on syötteitä. Ja nämä syötteet edustavat kärkipisteominaisuusindeksejä, numeroita, jotka välität osoitteeseen glVertexAttribPointer ja

ja niin edelleen. Määrität, mikä tulo vetää mistä attribuutista. GLSL 3.30 -käyttöjärjestelmässä käytetään tätä syntaksia:

layout(location = 2) in color; 

Tämä asettaa color -verkon varjostimen tulon attribuutiksi sijainti 2. Ennen 3.30 (tai ilman ARB_explicit_attrib_location) joudut joko asettamaan tämän nimenomaisesti glBindAttrbLocation ennen linkitetään tai kysellään ohjelmaa attribuuttihakemistosta osoitteella glGetAttribLocation . Jos et anna nimenomaisesti määritteen sijaintia, GLSL määrittää sijainnin mielivaltaisesti (ts. Toteutuksen määrittelemällä tavalla).

Sen asettaminen varjostimessa on melkein aina parempi vaihtoehto.

Joka tapauksessa fragmenttivarjostimen lähdöt toimivat melkein samalla tavalla. Fragmenttivarjostimet voivat kirjoittaa useisiin ulostuloväreihin , jotka itse kartoitetaan useisiin puskureihin kehyspuskurissa . Siksi sinun on ilmoitettava, mikä lähtö menee mihin fragmentin ulostuloväriin.

Tämä prosessi alkaa fragmentin ulostulon sijaintiarvolla. Se asetetaan hyvin samalla tavalla kuin kärkipaikan varjostimen syöttösijainnit:

layout(location = 1) out secColor; 

On myös API-toimintoja glBindFragDataLocation ja glGetFragDataLocation , jotka ovat analogisia glBindAttribLocation ja glGetAttribLocation kanssa.

Jos et tee mitään nimenomaista assi gnmentit, toteutukset yleensä määrittävät yhden lähtömuuttujistasi sijaintiin 0. OpenGL-standardi ei kuitenkaan vaadi tätä käyttäytymistä, joten sinun ei pitäisi myöskään riippua siitä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *