Hallo zusammen,
ich bin letztens über ein sehr schönes Tutorial bei euch gestoßen
Direct3D11 Settings Dialog welches ich mir auch direkt reingezogen habe.
Allerdings möchte ich nicht mit Direct3D11 arbeiten sondern mit der Vorgänger Version Direct3D10. Meine Funktionen war sehr schnell implementiert und alles funktionierte wunderbar - bis auf eine, die mir seid
ein paar Tagen Kopfzerbrechen macht. Ich versuche wie folgt an die QualityLevels zu gelangen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void ListMultisampling(IDXGIFactory *pFactory, DWORD dwAdapter, std::list<DWORD> *pToFill){
...
//Adapter holen
IDXGIAdapter *pAdapter;
HR(pFactory->EnumAdapters(dwAdapter,&pAdapter));
//Dummy Device erstellen
ID3D10Device *pDevice=NULL;
HR(D3D10CreateDevice( pAdapter, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, D3D10_SDK_VERSION, &pDevice ));
for(DWORD dwCount = 2; dwCount <= D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT; dwCount++){
UINT dNumLevels;
HR(pDevice->CheckMultisampleQualityLevels(DXGI_FORMAT_R8G8B8A8_UNORM,dwCount,&dNumLevels));
if(dNumLevels>0)
pToFill->push_back(dwCount);
}
ReleaseCOM(pAdapter); //gibt alles wieder frei
ReleaseCOM(pDevice);
}
|
Ich habe diese Methode fast 1:1 aus dem oben genannten Link übernommen, mit der Ausnahme sie für DirectX10 umgeschrieben zu haben. Wenn man diese jetzt jedoch aufruft dann befinden sich
in der Liste nicht die erwarteten QualityLevels, sondern einfach nur ein paar 1sen und das kann ja nicht richtig sein. Erst hatte ich gedacht, ich hätte den den Device falsch initialisiert, doch D3D10CreateDevice liefert ein S_OK.
Heute bin ich wärend einer Google Session auf den folgenden
Link vom Direct3D Guru schlecht hin gestoßen. Er schreibt:
Walbourn:
CheckMultisampleQualityLevels method in Direct3D 10.x and 11. The
ATI Radeon HD 5000 Series only provides one quality level per sample count, while the
NVIDIA GeForce GTX 400 Series exposes a number of fine-grain quality levels per sample count.
Was kann ich da nun machen? Die drei Einsen im Settings Dialog sehen ein bischen blöde aus. :lol:
Mfg
Fireball
PS: Ich hatte diese Frage auch schon in einem anderen C++ Forum gestellt, doch dort habe ich bisher keine Antwort auf dieses Problem erhalten.
-------------------
Nachtrag:
So ich habe nun das Ganze mal nach DirectX11 umgebaut. Ergebnis ist die selbe Situation wie bei DirectX10. Hatte es mir schon gedacht, denn Walbourn nannte in seinem Blog auch DirectX11.
Tja und nun? Ich schätze, dass wenn man mit dieser Situation nicht leben kann nur der Kauf einer neuen Grafikkarte von NVIDIA helfen wird. Schade AMD, dass war wohl nichts!