Udostępnij za pośrednictwem


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:

  1. Aplikacje odnajdą obsługę tej funkcji, sprawdzając dostępność formatów tekstur wielu elementów.
  2. Aplikacja tworzy te powierzchnie, wywołując CreateTexture.
  3. 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.
  4. 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.
  5. 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.

potoku pikseli