2011-03-16 1 views
4

J'apprends directx 11 et j'essaie de configurer le multi-échantillonnage. Pour une raison ou une autre, chaque didacticiel sur Internet désactive le multi-échantillonnage et ne vérifie jamais comment l'activer.Comment utiliser CheckMultisampleQualityLevels et activer le multi-échantillonnage

Premièrement: J'ai cherché autour et je ne trouve aucun exemple de comment utiliser CheckMultisampleQualityLevels. Il semble que vous deviez créer un périphérique, appeler cette fonction, déterminer les niveaux disponibles, puis détruire ce périphérique et en créer un nouveau avec les paramètres souhaités. Est-ce la bonne façon de faire cela? Ou y a-t-il un meilleur moyen?

Deuxièmement, comment activer le multi-échantillonnage? Comme je ne sais pas comment faire fonctionner CheckMultisampleQualityLevels, j'ai essayé de mettre quelques valeurs pour DXGI_SWAP_CHAIN_DESC.SampleDesc.Count et DXGI_SWAP_CHAIN_DESC.SampleDesc.Quality (comme 4 et 4) et pendant qu'il fonctionne, rien n'est affiché (il fait erreur si je mets des valeurs folles comme 33 et 2). Est-ce que cela doit être mis ailleurs que dans la description de la chaîne d'échange ou est-ce que les shaders interfèrent avec ce dernier (j'ai un réglage basique de la lumière et de la texture)?

J'ai un GTX 570, donc je sais qu'il peut supporter la plupart des réglages AA. Je suis cet ensemble de tutoriels, au cas où il est de toute aide: http://rastertek.com/tutindex.html

Répondre

5

1. Appelez ID3D11Device::CheckMultisampleQualityLevels, ce qui vous donne le niveau de qualité pris en charge par l'adaptateur.

2.Pour remplir le DXGI_SWAP_CHAIN_DESC, définissez SampleDesc.Count et SampleDesc.Quality.

3.Si un anti-crénelage à échantillons multiples est utilisé, toutes les cibles de rendu liées et tous les tampons de profondeur doivent avoir le même nombre d'échantillons et les mêmes niveaux de qualité. (DXGI_SAMPLE_DESC structure)

Selon le document msdn sur les D3D11_RASTERIZER_DESC (D3D11_RASTERIZER_DESC structure), le niveau de fonctionnalité API 10.1 et supérieur, MultisampleEnable n'a pas d'effet sur les points et triangles en ce qui concerne MSAA et les impacts que la sélection de l'algorithme de ligne de rendu.

Vous devriez vérifier le msdn pour plus de détails.

1

Vous devriez essayer de configurer MultisampleEnable D3D11_RASTERIZER_DESC.

qualité aussi appelé à 1.

En ce qui concerne CheckmultisampleQuality vous suffit de définir le format de DXGI vous voulez créer. Le nombre d'échantillons que vous voulez. Enfin, passez un pointeur vers un uint et il vous renverra le nombre de niveaux de qualité disponibles. Si elle renvoie 0 alors le multi-échantillonnage n'est pas supporté sinon vous savez quels niveaux de qualité vous pouvez définir.

+0

J'ai raté la mise MultisampleEnable, mais lui permettant n'a rien changé malheureusement. J'ai remarqué que si je change les paramètres pour la qualité de l'échantillon/compte sur le tampon de profondeur, il y a toujours des erreurs. De plus, je connais les paramètres de CheckMultisampleQualityLevels, mais il semble étrange de devoir d'abord créer l'appareil pour l'appeler, puis recréer l'appareil pour modifier les paramètres.Je veux juste m'assurer que c'est la bonne façon de le faire – Telanor

+1

J'ai activé le débogage directx et j'ai trouvé que je devais définir la dimension de vue sur le tampon de profondeur à D3D11_DSV_DIMENSION_TEXTURE2DMS. Alors maintenant, le multi-échantillonnage fonctionne. – Telanor

1

cela m'a aidé:

  • tampons de profondeur doivent avoir le même nombre d'échantillons et les niveaux de qualité
  • depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;

grâce @Telanor et @ user1253930

Questions connexes