Problem mit C++ (VS 2010) und DirectX
-
Hallo
ich bin neu hier also sagt bitte ob ich falsch bin...
Ich hab das Problem, dass immer, wenn ich dieses Programm(unten) starte der Compiler einen Fehler auasspuckt:
c:\users\********\downloads\beginningdirectx11_beginningdirectx11code\cd\chapter2\blankd3dwindow\blankd3dwindow\dx11demobase.cpp(92): Failed to create the Direct3D device! hr=S_OK (0x00000000)
Der Thread 'Win32-Thread' (0x1a8c) hat mit Code -1 (0xffffffff) geendet.Der Code:
#include"Dx11DemoBase.h" Dx11DemoBase::Dx11DemoBase( ) : driverType_( D3D_DRIVER_TYPE_NULL ), featureLevel_( D3D_FEATURE_LEVEL_11_0 ), d3dDevice_( 0 ), d3dContext_( 0 ), swapChain_( 0 ), backBufferTarget_( 0 ) { } Dx11DemoBase::~Dx11DemoBase( ) { Shutdown( ); } bool Dx11DemoBase::Initialize( HINSTANCE hInstance, HWND hwnd ) { hInstance_ = hInstance; hwnd_ = hwnd; RECT dimensions; GetClientRect( hwnd, &dimensions ); unsigned int width = dimensions.right - dimensions.left; unsigned int height = dimensions.bottom - dimensions.top; D3D_DRIVER_TYPE driverTypes[] = { D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP, D3D_DRIVER_TYPE_REFERENCE, D3D_DRIVER_TYPE_SOFTWARE }; unsigned int totalDriverTypes = ARRAYSIZE( driverTypes ); D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0 }; unsigned int totalFeatureLevels = ARRAYSIZE( featureLevels ); DXGI_SWAP_CHAIN_DESC swapChainDesc; ZeroMemory( &swapChainDesc, sizeof( swapChainDesc ) ); swapChainDesc.BufferCount = 1; swapChainDesc.BufferDesc.Width = width; swapChainDesc.BufferDesc.Height = height; swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; swapChainDesc.BufferDesc.RefreshRate.Numerator = 60; swapChainDesc.BufferDesc.RefreshRate.Denominator = 1; swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; swapChainDesc.OutputWindow = hwnd; swapChainDesc.Windowed = true; swapChainDesc.SampleDesc.Count = 1; swapChainDesc.SampleDesc.Quality = 0; unsigned int creationFlags = 0; #ifdef _DEBUG creationFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif HRESULT result; unsigned int driver = 0; for( driver = 0; driver < totalDriverTypes; ++driver ) { result = D3D11CreateDeviceAndSwapChain( 0, driverTypes[driver], 0, creationFlags, featureLevels, totalFeatureLevels, D3D11_SDK_VERSION, &swapChainDesc, &swapChain_, &d3dDevice_, &featureLevel_, &d3dContext_ ); if( SUCCEEDED( result ) ) { driverType_ = driverTypes[driver]; break; } } if( FAILED( result ) ) { DXTRACE_MSG( "Failed to create the Direct3D device!" ); return false; } ID3D11Texture2D* backBufferTexture; result = swapChain_->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&backBufferTexture ); if( FAILED( result ) ) { DXTRACE_MSG( "Failed to get the swap chain back buffer!" ); return false; } result = d3dDevice_->CreateRenderTargetView( backBufferTexture, 0, &backBufferTarget_ ); if( backBufferTexture ) backBufferTexture->Release( ); if( FAILED( result ) ) { DXTRACE_MSG( "Failed to create the render target view!" ); return false; } d3dContext_->OMSetRenderTargets( 1, &backBufferTarget_, 0 ); D3D11_VIEWPORT viewport; viewport.Width = static_cast<float>(width); viewport.Height = static_cast<float>(height); viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; viewport.TopLeftX = 0.0f; viewport.TopLeftY = 0.0f; d3dContext_->RSSetViewports( 1, &viewport ); return LoadContent( ); } bool Dx11DemoBase::LoadContent( ) { // Override with demo specifics, if any... return true; } void Dx11DemoBase::UnloadContent( ) { // Override with demo specifics, if any... } void Dx11DemoBase::Shutdown( ) { UnloadContent( ); if( backBufferTarget_ ) backBufferTarget_->Release( ); if( swapChain_ ) swapChain_->Release( ); if( d3dContext_ ) d3dContext_->Release( ); if( d3dDevice_ ) d3dDevice_->Release( ); backBufferTarget_ = 0; swapChain_ = 0; d3dContext_ = 0; d3dDevice_ = 0; }
Er sagt auch beim debuggen, wenn ich die Maus auf "result" halte:
E_INVALIDARGbitte um schnelle Hilfe
danke im vorraus
-
Ist nur ne Vermutung, aber bei meinen Versuchen mit D3D10 hat
#ifdef _DEBUG
creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endifprobleme gemacht. Irgendwie ist dieses Flag nichtmehr vorhanden oder was auch immer. Kommentier einfach mal |= ... aus und schau obs läuft :>