Kontrolki Gamma (Direct3D 9)
Kontrolki Gamma umożliwiają zmianę sposobu wyświetlania zawartości powierzchni przez system bez wpływu na zawartość samej powierzchni. Te kontrolki można traktować jako bardzo proste filtry stosowane przez funkcję Direct3D do danych, gdy opuszczają powierzchnię i przed ich renderowaniem na ekranie.
Kontrolki Gamma są właściwością łańcucha wymiany. Kontrolki Gamma umożliwiają dynamiczne zmienianie sposobu mapowania poziomów czerwonej, zielonej i niebieskiej powierzchni na rzeczywiste poziomy wyświetlane przez system. Ustawiając poziomy gamma, możesz spowodować, że ekran użytkownika kolory - czerwony, gdy znak użytkownika zostanie nakręcony, zielony, gdy znak pobiera nowy element itd. bez kopiowania nowych obrazów do buforu ramki w celu osiągnięcia efektu. Możesz też dostosować poziomy kolorów, aby zastosować odchylenie kolorów do obrazów w buforze wstecznym.
Dla każdego urządzenia zawsze istnieje co najmniej jeden łańcuch wymiany (niejawny łańcuch wymiany), ponieważ direct3D 9 ma jeden łańcuch wymiany jako właściwość urządzenia. Ponieważ rampa gamma jest właściwością łańcucha wymiany, rampa gamma może być stosowana, gdy łańcuch wymiany jest oknem. Rampa gamma ma skutek natychmiast. Nie ma oczekiwania na operację synchronizacji pionowej.
Metody SetGammaRamp i GetGammaRamp umożliwiają manipulowanie poziomami rampy, które wpływają na czerwone, zielone i niebieskie składniki kolorów pikseli z powierzchni przed ich wysłaniem do konwertera cyfrowego-analogowego (DAC) do wyświetlania.
Poziomy rampy gamma
W trybie Direct3D termin rampa gamma opisuje zestaw wartości mapujących poziom określonego składnika koloru — czerwony, zielony, niebieski — dla wszystkich pikseli w buforze ramek na nowe poziomy odbierane przez moduł DAC do wyświetlania. Ponowne mapowanie odbywa się za pomocą trzech tabel odnośników, po jednym dla każdego składnika koloru.
Oto jak to działa: Funkcja Direct3D pobiera piksel z buforu ramki i ocenia poszczególne składniki koloru czerwonego, zielonego i niebieskiego. Każdy składnik jest reprezentowany przez wartość z zakresu od 0 do 65535. Funkcja Direct3D pobiera oryginalną wartość i używa jej do indeksowania tablicy 256 elementów (rampy), gdzie każdy element zawiera wartość, która zastępuje oryginalną. Funkcja Direct3D wykonuje ten proces wyszukiwania i zamienia każdy składnik kolorów każdego piksela w buforze ramki, zmieniając w ten sposób końcowe kolory dla wszystkich pikseli na ekranie.
Jest to przydatne, aby zwizualizować wartości rampy, tworząc wykresy, jak pokazano na poniższych dwóch wykresach. Lewy wykres przedstawia rampę, która w ogóle nie modyfikuje kolorów. Wykres po prawej stronie przedstawia rampę, która nakłada negatywną stronniczą stronniczą na składnik koloru, do którego jest stosowany.
Elementy tablicy wykresu po lewej stronie zawierają wartości identyczne z ich indeksem — 0 w elemenie indeksu 0 i 65535 na indeksie 255. Ten typ rampy jest domyślny, ponieważ nie zmienia wartości wejściowych przed ich wyświetleniem. Prawy wykres zawiera więcej odmian; jego rampa zawiera wartości z zakresu od 0 w pierwszym elemenie do 32768 w ostatnim elemenie, z wartościami od jednolicie między. Efekt polega na tym, że składnik koloru korzystający z tej rampy jest wyciszony na wyświetlaczu. Nie ograniczasz się do używania wykresów liniowych; jeśli aplikacja może przypisać dowolne mapowanie w razie potrzeby. Można nawet ustawić wpisy na wszystkie zera, aby całkowicie usunąć składnik koloru z wyświetlacza.
Ustawianie i pobieranie poziomów rampy Gamma
Poziomy rampy gamma to skutecznie tabele wyszukiwania używane przez usługę Direct3D do mapowania składników kolorów buforu ramki na nowe poziomy, które będą wyświetlane. Poziomy rampy dla powierzchni podstawowej można ustawić i pobrać, wywołując metody SetGammaRamp i GetGammaRamp. SetGammaRamp akceptuje dwa parametry i GetGammaRamp akceptuje jeden parametr. W przypadku SetGammaRamp pierwszy parametr to D3DSGR_CALIBRATE lub D3DSGR_NO_CALIBRATION. Drugi parametr pRamp jest wskaźnikiem do struktury D3DGAMMARAMP. Struktura D3DGAMMARAMP zawiera trzy 256-elementowe tablice WORD, jedną tablicę zawierającą czerwone, zielone i niebieskie rampy gamma. GetGammaRamp ma jeden parametr, który przyjmuje wskaźnik do typu D3DGAMMARAMP, który zostanie wypełniony bieżącą rampą gamma.
Można uwzględnić D3DSGR_CALIBRATE wartość dla pierwszego parametru SetGammaRamp wywołać kalibrator podczas ustawiania nowych poziomów gamma. Kalibrowanie ramp gamma wiąże się z pewnym obciążeniem przetwarzania i nie należy ich często używać. Ustawienie skalibrowanej rampy gamma zapewnia spójną i bezwzględną wartość gamma dla użytkownika, niezależnie od adaptera wyświetlania i monitora.
Nie wszystkie systemy obsługują kalibrację gamma. Aby ustalić, czy kalibracja gamma jest obsługiwana, wywołaj metodę GetDeviceCapsi zbadaj składową Caps2 skojarzonej struktury D3DCAPS9 po zwróceniu metody. Jeśli flaga możliwości D3DCAPS2_CANCALIBRATEGAMMA jest obecna, obsługiwana jest kalibracja gamma.
Podczas ustawiania nowych poziomów rampy należy pamiętać, że poziomy ustawione w tablicach są używane tylko wtedy, gdy aplikacja jest w trybie pełnoekranowym i wyłącznym. Za każdym razem, gdy aplikacja zmieni się w tryb normalny, poziomy rampy zostaną odłożone ponownie, gdy aplikacja przywróci tryb pełnoekranowy.
Jeśli urządzenie nie obsługuje ramp gamma w bieżącym trybie prezentacji łańcucha wymiany (pełnoekranowym lub oknem), nie jest zwracana żadna wartość błędu. Aplikacje mogą sprawdzać D3DCAPS2_FULLSCREENGAMMA i D3DCAPS2_CANCALIBRATEGAMMA bity możliwości w ramach elementu członkowskiego Caps2 typu D3DCAPS9 w celu określenia możliwości urządzenia i tego, czy jest zainstalowany kalibrator.
Tematy pokrewne
-
powierzchni Direct3D