2010-02-05 15 views
1

Je comprends qu'un appel à Manager::CheckDepthStencilMatch devrait me donner une réponse, mais jusqu'à présent, je n'ai pas été en mesure de rassembler les pièces nécessaires pour faire cet appel efficacement.Comment vérifier un tampon Z 32 bits à l'aide de Managed Direct3D?

En particulier, j'ai besoin d'obtenir des valeurs pour les arguments adapterFormat et renderTargetFormat. Je ne spécifie aucun format particulier lors de la création de l'appareil, j'ai donc besoin d'un moyen d'obtenir les valeurs par défaut/format 'Format'.

+0

Soyez averti vous êtes peu probable de trouver que le tampon de profondeur 32 bits. Sauf si vous voulez dire D32F_LOCKABLE. Ou D24X8/D24S8? Pas vu de support de carte D32 depuis le Savage 3D ... – Goz

+0

@Goz, DepthFormat :: D32 fonctionne très bien sur ma machine. La carte est une "VIA/S3G DeltaChrome IGP". Cependant, j'utilise Managed Direct3D ici ... Serait-ce la raison pour laquelle cela fonctionne? –

+0

Typique. C'est une carte "S3" et le Savage3D était une carte S3;) Ne vous attendez pas à ce qu'il fonctionne sur les cartes nVidia ou ATI ... – Goz

Répondre

1

-

D3D::DepthFormat GetDepthFormat(){ 
    D3D::AdapterInformation ^adapter = D3D::Manager::Adapters->Default; 
    D3D::DepthFormat depthFormat = D3D::DepthFormat::D32; 
    if(!D3D::Manager::CheckDepthStencilMatch(0, 
     D3D::DeviceType::Hardware, adapter->CurrentDisplayMode.Format, 
     adapter->CurrentDisplayMode.Format, depthFormat)){ 

     depthFormat = D3D::DepthFormat::D16; 
     if(!D3D::Manager::CheckDepthStencilMatch(0, 
      D3D::DeviceType::Hardware, adapter->CurrentDisplayMode.Format, 
      adapter->CurrentDisplayMode.Format, depthFormat)){ 

      throw gcnew Exception(L"Your hardware needs to be upgraded."); 
     } 
    } 

    return depthFormat; 
}