Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

1

05.09.2010, 21:29

CheckMultisampleQualityLevels liefert nicht das was man erwartet (DirectX10)

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:

Zitat

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!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Fireball« (17.09.2010, 11:05) aus folgendem Grund: Das Ganze nach DirectX11 umgebaut und Fazit gezogen ...


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

05.09.2010, 23:08

Allerdings möchte ich nicht mit Direct3D11 arbeiten sondern mit der Vorgänger Version Direct3D10.

Ohne jetzt über eine richtige Antwort zu deiner Frage nachgedacht zu haben: Warum genau willst du D3D10 verwenden? Ich seh keinen wirklichen Grund D3D10 statt D3D11 zu verwenden.

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

3

06.09.2010, 00:35

Warum ich DirectX10 verwenden möchte ...

Hallo dot,

wenn ich länger drüber Nachdenke, hast du wohl Recht. Mitlerweile gibt es das ja auch für Windows Vista. Ich schätze aber, dass ich mit der 11er Version ein ähnliches Problem haben werde.

Ich probiere es einfach mal aus und poste hier dann das Ergebnis.

Gruß

Fireball

Werbeanzeige