Gamma-vezérlők (Direct3D 9)
A gamma-vezérlők lehetővé teszik, hogy a rendszer úgy módosítsa a felület tartalmát, hogy az ne befolyásolja a felület tartalmát. Gondoljon ezekre a vezérlőkre olyan egyszerű szűrőkre, amelyeket a Direct3D az adatokra alkalmaz, miközben az elhagyja a felületet, és mielőtt a képernyőre kerül.
A gamma-vezérlők a felcserélési láncok tulajdonságai. A gamma-vezérlők lehetővé teszik a felület piros, zöld és kék szintjeinek a rendszer által megjelenített tényleges szintekre való dinamikus változását. A gammaszintek beállításával a felhasználó képernyője színeket villoghat – pirosat a felhasználó karakterének lövésekor, zöld színt, amikor a karakter új elemet kap, és így tovább – anélkül, hogy új képeket másolna a keretpufferbe a hatás eléréséhez. Vagy módosíthatja a színszinteket, hogy szín elfogultság legyen alkalmazva a háttérpufferben lévő képekre.
Minden eszközhöz mindig van legalább egy felcserélési lánc (implicit felcserélési lánc), mivel a Direct3D 9 egy felcserélési lánccal rendelkezik az eszköz tulajdonságaként. Mivel a gamma rámpa a felcserélési lánc egyik tulajdonsága, a gamma rámpa alkalmazható a felcserélési lánc ablakozásakor. A gamma rámpa azonnal érvénybe lép. Nincs várakozás függőleges szinkronizálási műveletre.
A SetGammaRamp és GetGammaRamp módszerek lehetővé teszik a felületről érkező képpontok piros, zöld és kék színösszetevőit befolyásoló rámpaszintek manipulálását, mielőtt a digitális-analóg konverterbe (DAC) kerülnének megjelenítésre.
Gamma rámpaszintek
A Direct3D-ben a gamma rámpa kifejezés egy olyan értékkészletet ír le, amely megfelelteti egy adott színösszetevő - piros, zöld, kék - szintjét a keretpufferben lévő összes képponthoz az új szintekre, amelyeket a DAC fogad megjelenítésre. Az újraformálás három keresési táblázattal történik, amelyek mindegyike egy színösszetevőhöz tartozik.
Így működik: A Direct3D egy képpontot vesz ki a keretpufferből, és kiértékeli az egyes piros, zöld és kék színösszetevőket. Minden összetevőt 0 és 65535 közötti érték jelöl. A Direct3D az eredeti értéket használja egy 256 elemből álló tömb (a rámpa) indexeléséhez, ahol minden elem tartalmaz egy értéket, amely az eredetit helyettesíti. A Direct3D elvégzi ezt a keresési és cserefolyamatot a keretpufferben lévő egyes képpontok minden színösszetevőjéhez, ezáltal módosítva az összes képernyő-képpont végleges színeit.
Hasznos a rámpaértékek ábrázolása gráfokkal, ahogy az alábbi két grafikonon is látható. A bal oldali grafikonon egy olyan rámpa látható, amely egyáltalán nem módosítja a színeket. A jobb oldali gráf egy rámpát mutat, amely negatív torzításokat vet ki arra a színösszetevőre, amelyre alkalmazva van.
A bal oldali gráf tömbeleme az indexével megegyező értékeket tartalmaz – 0 a 0. indexnél, a 65535 pedig a 255. indexnél. Ez a típusú rámpa az alapértelmezett érték, mivel nem módosítja a bemeneti értékeket a megjelenítésük előtt. A jobb gráf több variációt biztosít; a rámpa az első elem 0-tól az utolsó elem 32768-ig terjedő értékeit tartalmazza, amelyek között az értékek egységesen mozognak. Ennek az az oka, hogy a rámpát használó színösszetevő elnémítva jelenik meg a kijelzőn. Nem csak lineáris gráfokat használhat; ha az alkalmazás szükség esetén tetszőleges leképezést tud hozzárendelni. Akár az összes nullára is beállíthatja a bejegyzéseket, hogy teljesen eltávolítson egy színösszetevőt a megjelenítésből.
Gamma rámpaszintek beállítása és beolvasása
A gamma-rámpák hatékonyan keresnek táblázatokat, amelyeket a Direct3D a keretpuffer színösszetevőinek új szintekre való leképezésére használ. Az elsődleges felület rámpaszintjeit a SetGammaRamp és GetGammaRamp metódus meghívásával állíthatja be és kérdezheti le. SetGammaRamp két paramétert fogad el, a GetGammaRamp egy paramétert fogad el. A SetGammaRamp esetében az első paraméter D3DSGR_CALIBRATE vagy D3DSGR_NO_CALIBRATION. A második paraméter, a pRamp egy D3DGAMMARAMP struktúrára mutató mutató. A D3DGAMMARAMP szerkezet három 256 elemből álló WORD tömböt tartalmaz, egy tömböt, amelyek mindegyike piros, zöld és kék gamma rámpákat tartalmaz. GetGammaRamp egy olyan paraméterrel rendelkezik, amely egy olyan D3DGAMMARAMP típusra mutat, amely az aktuális gamma rámpával lesz kitöltve.
A SetGammaRamp első paraméterének D3DSGR_CALIBRATE értékét is belefoglalhatja, hogy új gammaszintek beállításakor meghívja a kalibrátort. A gamma-rámpák kalibrálása némi feldolgozási többletterhelést okoz, ezért nem szabad gyakran használni. A kalibrált gamma-rámpák beállítása konzisztens és abszolút gammaértéket biztosít a felhasználó számára, függetlenül a kijelzőadaptertől és a monitortól.
Nem minden rendszer támogatja a gamma-kalibrációt. Annak megállapításához, hogy a gamma-kalibráció támogatott-e, hívja meg GetDeviceCaps, és vizsgálja meg a caps2 tagot a társított D3DCAPS9 szerkezetben a metódus visszatérése után. Ha a D3DCAPS2_CANCALIBRATEGAMMA képességjelző jelen van, akkor a gamma-kalibráció támogatott.
Az új rámpaszintek beállításakor ne feledje, hogy a tömbökben beállított szintek csak akkor lesznek használatban, ha az alkalmazás teljes képernyős, exkluzív módban van. Amikor az alkalmazás normál üzemmódra vált, a rámpák szintjei félre lesznek állítva, és újra érvénybe lépnek, amikor az alkalmazás visszaállítja a teljes képernyős módot.
Ha az eszköz nem támogatja a gamma rámpákat a felcserélési lánc aktuális bemutató módjában (teljes képernyős vagy ablakos), a rendszer nem ad vissza hibaértéket. Az alkalmazások a D3DCAPS9 típus Caps2 tagjában ellenőrizhetik a D3DCAPS2_FULLSCREENGAMMA és D3DCAPS2_CANCALIBRATEGAMMA képességbiteket, hogy meghatározzák az eszköz képességeit, és hogy telepítve van-e a kalibrátor.
Kapcsolódó témakörök