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
Zitat von »"BlazeX"«
Ja gut, es gibt D3D11. Aber ich habe nicht vor mir selbst jetzt schon ne neue Graka zu gönnen.
Zitat von »"BlazeX"«
Bin ich mit dieser DXGI-Geschichte (Factory, Adapter, Output) auf dem richtigen Weg?
Zitat von »"BlazeX"«
Um nochmal auf diese DXGI-Geschichte zurückzukommen:
Da gibt es Adapter (Graka), die "rendern" und Outputs(Monitor) auf den ausgegeben wird.
Beim erstellen eines Adapters, kann ich eine SwapChain gleich mit erzeugen lassen. Wie kann ich dieser Swap-Chain einen Monitor (Output) zuweisen?
Zitat von »"BlazeX"«
Kennt jemand ne Skizze, die Device, DeviceContext, SwapChain, und das ganze zum Rendern mal in einen ordentlichen, begreifbaren Zusammenhang bringt?
Zitat von »"BlazeX"«
Noch was: Kann ich jetzt HDR und AA nutzen?
Quellcode |
|
1 2 3 4 5 6 7 |
[Adapter - Name wie 9800 GX2] [Output - ID+1 (müsste Nr. des Monitors sein?)] [Fullscreen] [Resolution] [VSync] [MSAA] [Anisotropy] |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
#include<windows.h> #include<list> #include<sstream> #include<D3D11.h> #pragma comment(lib, "D3D11.lib") #pragma comment(lib, "DXGI.lib") //Eine Auflösung beschreiben struct Resolution { DWORD dwX, dwY; }; //Eine ganze Liste von Auflösungen typedef std::list<Resolution> ResolutionList; //Utils zum Auflösung sortieren BOOL operator == (const Resolution & a, const Resolution & b) { return(a.dwX == b.dwX && a.dwY == b.dwY); } BOOL operator < (const Resolution & a, const Resolution & b) { return(a.dwX == b.dwX ? a.dwY < b.dwY : a.dwY < b.dwY); } //Die zentrale Funktion, um Auflösungen zu enumerieren void EnumResolutions(IDXGIFactory1 * pFactory, DWORD dwAdapter, DWORD dwOutput, ResolutionList * pToFill) { //Adapter und Output holen IDXGIAdapter1 * pAdapter; pFactory->EnumAdapters1(dwAdapter, &pAdapter); IDXGIOutput * pOutput; pAdapter->EnumOutputs(dwOutput, &pOutput); //Anzahl der VideoModes abfragen DWORD dwNumModes; pOutput->GetDisplayModeList(DXGI_FORMAT_R8G8B8A8_UNORM, 0, (UINT*)&dwNumModes, NULL); //Speicher für alle VideoModes reservieren und alle abragen DXGI_MODE_DESC * pVideoModes= new DXGI_MODE_DESC[dwNumModes]; pOutput->GetDisplayModeList(DXGI_FORMAT_R8G8B8A8_UNORM, 0, (UINT*)&dwNumModes, pVideoModes); //Alle VideoModes durchgehen und in der Liste speichern for(DWORD dwMode= 0; dwMode < dwNumModes; dwMode++) { //Neuen Eintrag hinzufügen Resolution Entry; Entry.dwX= pVideoModes[dwMode].Width; Entry.dwY= pVideoModes[dwMode].Height; pToFill->push_back(Entry); } //Alle doppelten raus und sortieren pToFill->unique(); pToFill->sort(); //Alles freigeben delete[] pVideoModes; pOutput->Release(); pAdapter->Release(); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char * pcCommandLine, int iShowCommand) { //Alle Auflösungen enumerieren //Vorgabe: Adapter 0, Output 0, Format R8G8B8A8_UNORM IDXGIFactory1 * pFactory; HRESULT hResult= CreateDXGIFactory1(__uuidof(IDXGIFactory), (void**)(&pFactory) ); //Auflösungen aufzählen ResolutionList Resolutions; EnumResolutions(pFactory, 0, 0, &Resolutions); //Verpacken und ausgeben std::stringstream Message; Message<<"Adapter=0, Output=0\n\n"; for(ResolutionList::iterator Iter= Resolutions.begin(); Iter != Resolutions.end(); Iter++) { Message<<Iter->dwX<<" x "<<Iter->dwY<<std::endl; } MessageBoxA(NULL, Message.str().c_str(), "Auflösungen", MB_OK|MB_ICONINFORMATION); //Alles freigeben pFactory->Release(); return(0); } |
Zitat von »"BlazeX"«
Auflösung auflisten. Wie geht das? Wie löse ich das Problem mit den verschiedenen Outputs?
Zitat von »"BlazeX"«
Wie liste ich MultiSampling-Typen auf?
Zitat von »"BlazeX"«
Wie erreiche ich VSync? (Ist eher für die Device-Erstellung interessant
Werbeanzeige