Delen via


Query's uitvoeren op ondersteuning voor dieptebuffers (Direct3D 9)

Net als bij elke functie ondersteunt het stuurprogramma dat uw toepassing gebruikt mogelijk niet alle typen dieptebuffering. Controleer altijd de capaciteiten van de chauffeur. Hoewel de meeste stuurprogramma's ondersteuning bieden voor dieptebuffering op basis van z, bieden niet alle ondersteuning voor dieptebuffering op basis van w. Stuurprogramma's geven geen problemen als u probeert een niet-ondersteunde configuratie in te schakelen. Ze vallen terug op een andere methode voor dieptebuffering of schakelen dieptebuffering soms helemaal uit, wat kan leiden tot scènes die worden weergegeven met extreme dieptesorteringsartefacten.

U kunt controleren op algemene ondersteuning voor dieptebuffers door een query uit te voeren op Direct3D voor het weergaveapparaat dat door uw toepassing wordt gebruikt voordat u een Direct3D-apparaat maakt. Als het Direct3D-object rapporteert dat het ondersteuning biedt voor dieptebuffering, bieden alle hardwareapparaten die u maakt op basis van dit Direct3D-object ondersteuning voor z-buffering.

Als u wilt zoeken naar ondersteuning voor dieptebuffers, kunt u de methode IDirect3D9::CheckDeviceFormat gebruiken, zoals wordt weergegeven in het volgende codevoorbeeld.

// 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;

IDirect3D9::CheckDeviceFormat kunt u een apparaat kiezen om te maken op basis van de mogelijkheden van het apparaat. In dit geval worden apparaten die geen 16-bits dieptebuffers ondersteunen, geweigerd.

Het gebruik van IDirect3D9::CheckDepthStencilMatch om de compatibiliteit van dieptestencils met een renderdoel te bepalen, wordt geïllustreerd in het volgende codevoorbeeld.

// 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;

Wanneer u weet dat het stuurprogramma dieptebuffers ondersteunt, kunt u w-bufferondersteuning controleren. Hoewel dieptebuffers worden ondersteund voor alle softwarerasterizers, worden w-buffers alleen ondersteund door de referentierasterizer, die niet geschikt is voor gebruik door echte toepassingen. Ongeacht het type apparaat dat door uw toepassing wordt gebruikt, controleert u de ondersteuning voor w-buffers voordat u dieptebuffering op basis van w probeert in te schakelen.

  1. Nadat u uw apparaat hebt gemaakt, roept u de methode IDirect3DDevice9::GetDeviceCaps aan, waarbij een geïnitialiseerde D3DCAPS9 structuur wordt doorgegeven.
  2. Na de aanroep bevat het LineCaps-lid informatie over de ondersteuning van het stuurprogramma voor het weergeven van primitieven.
  3. Als het RasterCaps-lid van deze structuur de vlag D3DPRASTERCAPS_WBUFFER bevat, ondersteunt het stuurprogramma dieptebuffering op basis van w voor dat primitieve type.

Dieptebuffers