Freigeben über


Abfragen der Tiefenpufferunterstützung (Direct3D 9)

Wie bei jedem Feature unterstützt der von Ihrer Anwendung verwendete Treiber möglicherweise nicht alle Arten der Tiefenpufferung. Überprüfen Sie immer die Funktionen des Treibers. Obwohl die meisten Treiber z-basierte Tiefenpufferung unterstützen, unterstützen nicht alle die w-basierte Tiefenpufferung. Treiber schlagen nicht fehl, wenn Sie versuchen, ein nicht unterstütztes Schema zu aktivieren. Sie greifen stattdessen auf eine andere Tiefenpufferungsmethode zurück oder deaktivieren manchmal die Tiefenpufferung ganz, was dazu führen kann, dass Szenen mit extremen Tiefensortierungsartefakten gerendert werden.

Sie können die allgemeine Unterstützung für Tiefenpuffer überprüfen, indem Sie Direct3D für das Anzeigegerät abfragen, das Ihre Anwendung verwenden wird, bevor Sie ein Direct3D-Gerät erstellen. Wenn das Direct3D-Objekt meldet, dass es Tiefenpufferung unterstützt, unterstützen alle Hardwaregeräte, die Sie aus diesem Direct3D-Objekt erstellen, die Z-Pufferung.

Um die Unterstützung der Tiefenpufferung abzufragen, können Sie die IDirect3D9::CheckDeviceFormat-Methode verwenden, wie im folgenden Codebeispiel gezeigt.

// The following example assumes that pCaps is a valid pointer to an 
// initialized D3DCAPS9 structure
if(FAILED(m_pD3D->CheckDeviceFormat(pCaps->AdapterOrdinal, 
                                    pCaps->DeviceType, 
                                    AdapterFormat, 
                                    D3DUSAGE_DEPTHSTENCIL, 
                                    D3DRTYPE_SURFACE,
                                    D3DFMT_D16)))
    return E_FAIL;

Mit IDirect3D9::CheckDeviceFormat können Sie ein Gerät auswählen, das basierend auf den Funktionen dieses Geräts erstellt werden soll. In diesem Fall werden Geräte, die keine 16-Bit-Tiefenpuffer unterstützen, abgelehnt.

Die Verwendung von IDirect3D9::CheckDepthStencilMatch zum Bestimmen der Kompatibilität von Tiefenschablonen mit einem Renderziel wird im folgenden Codebeispiel veranschaulicht.

// Reject devices that cannot create a render target of RTFormat while
// the back buffer is of RTFormat and the depth-stencil buffer is
// at least 8 bits of stencil
if(FAILED(m_pD3D->CheckDepthStencilMatch(pCaps->AdapterOrdinal,
                                        pCaps->DeviceType, 
                                        AdapterFormat, 
                                        RTFormat, 
                                        D3DFMT_D24S8)))
    return E_FAIL;

Wenn Sie wissen, dass der Treiber Tiefenpuffer unterstützt, können Sie die Unterstützung von w-buffer überprüfen. Obwohl Tiefenpuffer für alle Softwarerasterer unterstützt werden, werden w-Puffer nur vom Referenzrasterer unterstützt, der nicht für die Verwendung in realen Anwendungen geeignet ist. Überprüfen Sie unabhängig vom Gerätetyp, den Ihre Anwendung verwendet, die Unterstützung für w-Puffer, bevor Sie versuchen, die w-basierte Tiefenpufferung zu aktivieren.

  1. Rufen Sie nach dem Erstellen Ihres Geräts die IDirect3DDevice9::GetDeviceCaps-Methode auf, und übergeben Sie eine initialisierte D3DCAPS9-Struktur .
  2. Nach dem Aufruf enthält das LineCaps-Element Informationen zur Unterstützung des Treibers für das Rendern von Grundtypen.
  3. Wenn das RasterCaps-Element dieser Struktur das flag D3DPRASTERCAPS_WBUFFER enthält, unterstützt der Treiber die w-basierte Tiefenpufferung für diesen primitiven Typ.

Tiefenpuffer