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
Quellcode |
|
1 2 3 4 5 6 7 |
ERROR: Call m_pIDXGIFactory->CreateSwapChain throws error DXGI_ERROR_INVALID_C ALL Description: The application has made an erroneous API call that it had enough information to avoid. This error is intended to denote that the application should be altered to avoid the error. Use of the debug version of the DXGI.DLL will provide run-time debug output with further information. // Ausgabe DXGI ERROR: IDXGIFactory::CreateSwapChain: Must specify at least one buffer. [ MISCELLANEOUS ERROR #5: ] |
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 |
DXGI_SWAP_CHAIN_DESC sd; ZeroMemory(&sd, sizeof(DXGI_SWAP_CHAIN_DESC)); sd.BufferDesc.Width = (int)vSize.x; sd.BufferDesc.Height = (int)vSize.y; sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.OutputWindow = hWnd; sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; sd.Windowed = true; sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; m_pSwapChain = NULL; HRESULT hResult = Direct3D::Instance().GetFactory()->CreateSwapChain(Direct3D::Instance().GetDevice(), &sd, &m_pSwapChain); if(FAILED(hResult)) LOG_ERROR_DIRECTX("m_pIDXGIFactory->CreateSwapChain", hResult, NXE_ERROR); |
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
C-/C++-Quelltext |
|
1 2 |
DXGI_SWAP_CHAIN_DESC sd = { }; // C++98 DXGI_SWAP_CHAIN_DESC sd{ }; // C++11/14 |
C-/C++-Quelltext |
|
1 2 |
sd.BufferDesc.Width = static_cast<int>(vSize.x); sd.BufferDesc.Height = static_cast<int>(vSize.y); |
C-/C++-Quelltext |
|
1 |
m_pSwapChain = nullptr; |
1. Verwende nie ZeroMemory, lieber die Sprache ausnutzen:
C-/C++-Quelltext
1 2 DXGI_SWAP_CHAIN_DESC sd = { }; // C++98 DXGI_SWAP_CHAIN_DESC sd{ }; // C++11/14
Und zu D3D11: Du kannst beide Werte von RefreshRate auf 0 setzen, dann werden diese für dich gesetzt.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (27.10.2013, 22:21)
3. Nutze nullptr anstelle von NULL (ist ab VS2010 unterstützt)
C-/C++-Quelltext
1 m_pSwapChain = nullptr;
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
void f(int a); void f(A* a); // ... f(0); f(NULL); f(nullptr); // Welche der beiden Funktionen wird wann aufgerufen? |
Die Refresh Rate explizit auf 60 zu setzen, ist sogar eine eher schlechte Idee. Nicht jeder Monitor hat notwendigerweise eine Refresh Rate von exakt 60 Hz. Wenn die angegebene RefreshRate aber nicht exakt mit der des angeschlossenens Monitor übereinstimmt, kann DXGI z.B. im Fullscreen nicht Flippen, sondern muss Blitten. Daher: RefreshRate besser einfach leer lassen, sofern man keinen ganz speziellen Grund hat, tatsächlich eine ganz bestimmte Refresh Rate anzufordern...
Ich würde überhaupt das struct entweder gleich richtig initialisieren, oder nicht initialisieren und einfach alle Member setzen...
Ersteres finde ich immer furchtbar, weil es überhaupt nicht mehr offensichtlich ist, wofür die Werte stehen.
Deswegen setze ich lieber alle Member "per Hand", aber initialisiere das struct auch, allerdings fällt mir auch grade auf, dass ich die Member ja dann doppelt mit einem Wert versehe...
Edit: Übrigens Happy Birthday
Werbeanzeige