Tekstury wieloelementowe (Direct3D 9)
Tradycyjne tekstury są uważane za tekstury jednoelementowe. Tekstury wieloelementowe umożliwiają aplikacjom zapisywanie jednocześnie w wielu elementach tekstury z cieniowania pikseli. Wynikiem następnego przebiegu renderowania jest to, że aplikacja może użyć co najmniej jednego elementu jako tekstury pojedynczego elementu — czyli jako danych wejściowych cieniowania pikseli. Te dodatkowe elementy można traktować jako magazyn tymczasowy dla wyników pośrednich, które będą używane w późniejszym przekazaniu przez aplikację.
Pierwsza generacja sprzętu, który uwidacznia tę funkcję, ma następujące ograniczenia:
- Wszystkie powierzchnie tekstur wielokrotnego elementu zostaną przydzielone automatycznie. To ograniczenie zostało rozwiązane przez traktowanie tego jako nowego typu formatu powierzchni z wieloma przeplatanymi kanałami RGBA.
- Wszystkie elementy tekstury wielu elementów mogą mieć taką samą głębokość bitów. To ograniczenie jest wyrażane przez nazwę nowych formatów powierzchni.
- Tekstura wieloelementowa nie może być podstawowa/wyświetlana. Innymi słowy, musi być tylko poza ekranem. To ograniczenie jest wyrażane przez wyliczenie formatu powierzchni.
- Nie wolno dithering, alpha test, fogging, blending, raster-op lub maskowanie. Nie jest wykonywane przetwarzanie cieniowania po pikselach, z wyjątkiem testu z i testu wzornika.
- Tekstura nie może być mipmapą. Tworzenie łańcucha mip zakończy się niepowodzeniem.
- Nie można ustawić tego samego elementu jako tekstury jednocześnie jako elementu docelowego renderowania. Jednak różne elementy tej samej powierzchni tekstury wieloelementowej mogą być jednocześnie teksturami i elementami docelowymi renderowania.
- Nie jest obsługiwane żadne antyaliasing.
- Nie można filtrować powierzchni tekstur z wieloma elementami, jeśli są używane jako tekstura. To ograniczenie można zweryfikować przy użyciu CheckDeviceFormat.
- Nie można zablokować powierzchni tekstur z wieloma elementami.
- Więcej niż jedną powierzchnię tekstury wielokrotnej można używać jednocześnie, przypisując je do różnych etapów, podobnie jak w przypadku zwykłych tekstur.
- Powierzchnie tekstur z wieloma elementami obsługują konwersję gamma z zakresu od 2.2 do 1.0 na operację odczytu, podobnie jak w przypadku innych formatów tekstur.
- Niektóre implementacje nie stosują maski zapisu wyjściowego (D3DRS_COLORWRITEENABLE). Te, które mogą mieć niezależne maski zapisu koloru. Jest to wyrażane przy użyciu nowego bitu możliwości. Liczba dostępnych masek zapisu w kolorze niezależnym będzie równa maksymalnej liczbie elementów, z których urządzenie jest w stanie.
- Clear czyści wszystkie elementy tekstury wieloelementowej ustawionej jako element docelowy renderowania.
Użycie tekstur z wieloma elementami odbywa się w następujących krokach:
- Aplikacje odnajdą obsługę tej funkcji, sprawdzając dostępność formatów tekstur wielu elementów.
- Aplikacja tworzy te powierzchnie, wywołując CreateTexture.
- Aplikacja ustawia powierzchnię jako element docelowy renderowania przy użyciu wywołania SetRenderTarget. Cieniowanie pikseli zapewnia dane wyjściowe powierzchni przy użyciu instrukcji mov - ps.
- setTexture jest wywoływana w celu ustawienia powierzchni tekstury wieloelementowej na określony etap. Podobnie jak w przypadku innych tekstur, ta sama powierzchnia może być ustawiona na wiele etapów jednocześnie.
- SetSamplerState jest wywoływana, aby ustawić D3DSAMP_ELEMENTINDEX na odpowiedni numer elementu w teksturze wieloelementowej, z której próbki próbkują próbki przykładów. Wartość domyślna tego stanu to 0, co oznacza, że tekstury nienależące do wielu elementów będą działać. Ustawienie tego stanu na niewłaściwą liczbę powoduje niezdefiniowane zachowanie — jeśli tekstura wielokrotnego elementu ma tylko dwa elementy szerokości, ale próbkator zostanie poproszony o próbkowanie z czwartego elementu, na przykład.
Obsługa interfejsu API
Poniżej przedstawiono podsumowanie elementów interfejsu API, które obsługują tekstury wielu elementów:
Format powierzchni D3DFMT_MULTI2_ARGB8 wyraża przeplatany charakter formatu.
Stan próbkatora D3DSAMP_ELEMENTINDEX wskazuje, który indeks elementu ma być używany.
Następujące stany renderowania obsługują tekstury wieloelementowe:
- D3DRS_COLORWRITEENABLE1
- D3DRS_COLORWRITEENABLE2
- D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE dotyczy zera elementu docelowego renderowania (lub elementu).
Flaga D3DPMISCCAPS_INDEPENDENTWRITEMASKS wskazuje, że urządzenie obsługuje niezależne maski zapisu dla wielu tekstur elementów lub wielu elementów docelowych renderowania.
Tematy pokrewne