Share via


Consulta de compatibilidad con búfer de profundidad (Direct3D 9)

Al igual que con cualquier característica, es posible que el controlador que usa la aplicación no admita todos los tipos de almacenamiento en búfer de profundidad. Compruebe siempre las funcionalidades del controlador. Aunque la mayoría de los controladores admiten el almacenamiento en búfer de profundidad basado en Z, no todos admitirán el almacenamiento en búfer de profundidad basado en w. No se produce un error en los controladores si intenta habilitar un esquema no admitido. Se reservan en otro método de almacenamiento en búfer de profundidad en su lugar, o a veces deshabilitan el almacenamiento en búfer de profundidad por completo, lo que puede dar lugar a escenas representadas con artefactos de ordenación de profundidad extrema.

Puede comprobar la compatibilidad general con los búferes de profundidad consultando Direct3D para el dispositivo de visualización que usará la aplicación antes de crear un dispositivo Direct3D. Si el objeto Direct3D informa de que admite el almacenamiento en búfer de profundidad, cualquier dispositivo de hardware que cree a partir de este objeto Direct3D admitirá el almacenamiento en búfer z.

Para consultar la compatibilidad con el almacenamiento en búfer de profundidad, puede usar el método IDirect3D9::CheckDeviceFormat , como se muestra en el ejemplo de código siguiente.

// 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 permite elegir un dispositivo para crear en función de las funcionalidades de ese dispositivo. En este caso, se rechazan los dispositivos que no admiten búferes de profundidad de 16 bits.

En el ejemplo de código siguiente se muestra el uso de IDirect3D9::CheckDepthStencilMatch para determinar la compatibilidad de galería de símbolos de profundidad con un destino de representación.

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

Cuando sepa que el controlador admite búferes de profundidad, puede comprobar la compatibilidad con w-buffer. Aunque los búferes de profundidad son compatibles con todos los rasterizadores de software, los búferes w solo son compatibles con el rasterizador de referencia, que no es adecuado para su uso por las aplicaciones reales. Independientemente del tipo de dispositivo que use la aplicación, compruebe la compatibilidad con los búferes w antes de intentar habilitar el almacenamiento en búfer de profundidad basado en w.

  1. Después de crear el dispositivo, llame al método IDirect3DDevice9::GetDeviceCaps y pase una estructura D3DCAPS9 inicializada.
  2. Después de la llamada, el miembro LineCaps contiene información sobre la compatibilidad del controlador para representar primitivos.
  3. Si el miembro RasterCaps de esta estructura contiene la marca D3DPRASTERCAPS_WBUFFER, el controlador admite el almacenamiento en búfer de profundidad basado en w para ese tipo primitivo.

Búferes de profundidad