DirectX10 swapchain and device point to 0x00000000 (causing runtime error) (c++)
Ok, i followed this tutorial (code is down below on the page, just top of the picture you can click on show code) about DX10 and c++ basically the code is like
// include and stuff
ID3D10Device* device; // adding = NULL wont change problem
ID3D10RenderTargetView* rtv;
IDXGISwapChain* swapchain;
// function predecs, winmain, winproc
// winmain calls initD3D(hWnd) just before entering msg loop
void initD3D(HWND hWnd){
DXGI_SWAP_CHAIN_DESC scd; // creates struct for swap chain info
ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC)); // clear the struct for use
scd.BufferCount = 1; // create two buffers one front buffer one back buffer
scd.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // use 32-bit color
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // tell how chain is to be used
scd.OutputWindow = hWnd; // set window to be used by d3d
scd.SampleDesc.Count = 1; // set level of multi sampling
scd.SampleDesc.Quality = 0; // set quality of multisampling
scd.Windowed = true; // set to windowed or fullscreen
D3D10CreateDeviceAndSwapChain(NULL, D3D10_DRIVER_TYPE_HARDWARE,
NULL, 0, D3D10_SDK_VERSION, &scd,
&swapchain, &device);
// get the adress of the backbuffer and use it to create the render target
ID3D10Texture2D* pBackBuffer;
// AND HERE (NEXT LINE) THE ERROR OCCURS
swapchain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer);
// on runtime debugger tells me swapchain value is 0x00000000
// why does it point to nowhere?
device->CreateRenderTargetView(pBackBuffer, NULL, &rtv);
pBackBuffer->Release();
// set the render target as the back buffer
device->OMSetRenderTargets(1, &rtv, NULL);
D3D10_VIEWPORT viewport; // create a struct to hold the viewport data
ZeroMemory(&viewport, sizeof(D3D10_VIEWPORT)); // clear the struct
//viewport.stuff
device->RSSetViewports(1, &viewport); //set the viewport
}
i left out the unnecessary code, I think you can either figure it out or follow the link if you really need the full code, I want to focus on the main problem ;)
so as stated in the code my debugger tells me that swapchain
points to 0x00000000 looking through the values i found out that its the same with device
also poinmts to 0x00000000.
Message is:
First-chance exception at 0x........ in bla.exe: 0x........: Access violation reading location 0x00000000
i looked over the whole code, have no idea what might be the problem.
could it be a hardware related problem? I am on a Thinkpad T510 with two graphics chips (one intel and one nVidia), using the nVidia chips as default causes Visual Studio to crash.
i have no idea what else might be the problem, because the tutorial states that the code will run :) i know that there is another topic with a very very related problem, but as far as i understand its not the same. (and the answer the author gave himself doesn't solve my problem)
edit: i just read debug output and it seems that a **load of *.dlls couldn't be loaded btw I am using the x86 libs of DX SDK
snippet:
'AnotherWindowsApp.exe': Loaded 'E:\visual studio 2010 Projects\AnotherWindowsApp\Debug\AnotherWindowsApp.exe', Symbols loaded.
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
[...]
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\nvinit.dll', Binary was not built with debug information.
'AnotherWindowsApp.exe': Loaded 'C:\Program Files (x86)\NVIDIA Corporation\coprocmanager\detoured.dll', Cannot find or open the PDB file
'AnotherWindowsApp.exe': Loaded 'C:\Program Files (x86)\NVIDIA Corporation\coprocmanager\Nvd3d9wrap.dll', Cannot find or open the PDB file
[...]
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\d3d9.dll', Cannot find or open the PDB file
'AnotherWindowsApp.exe': Loaded 'C:\Program Files (x86)\NVIDIA Corporation\coprocmanager\nvdxgiwrap.dll', Cannot find or open the PDB file
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\d3d11.dll', Cannot find or open the PDB file
[...]
'AnotherWindowsApp.exe': Loaded 'C:\Windows\SysWOW64\igd10umd32.dll', Cannot find or open the PDB file
First-chance exception at 0x7623b727 in AnotherWindowsApp.exe: Microsoft C++ exception: _com_error at memory location 0x0045f06c..
First-chance exception at 0x7623b727 in AnotherWindowsApp.exe: Microsoft C++ exception: _com_error at memory location 0x0045ef90..
First-chance exception at 0x7623b727 in AnotherWindowsApp.exe: Microsoft C++ exception: _com_error at memory location 0x0045f0e0..
The thread 'Win32 Thread' (0x18b0) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x12dc) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x354) has exited with code 0 (0x0).
The thread 'UMDShimPresentThread' (0x1080) has exited with code 0 (0x0).
'AnotherWindowsApp.exe': Unloaded 'C:\Windows\SysWOW64\nvwgf2um.dll'
'AnotherWindowsApp.exe': Unloaded 'C:\Windows\SysWOW64\igd10umd32.dll'
First-chance exception at 0x01281758 in AnotherWindowsApp.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x01281758 in AnotherWindowsApp.exe: 0xC0000005: Access violation reading location 0x00000000.
First-chance exception at 0x01281758 in AnotherWindowsApp.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x0128开发者_开发技巧1758 in AnotherWindowsApp.exe: 0xC0000005: Access violation reading location 0x00000000.
The program '[5912] AnotherWindowsApp.exe: Native' has exited with code -1073741819 (0xc0000005).
First you should check what error code is returned by the D3D10CreateDeviceAndSwapChain function. Compare the error code with the ones on this site to get a first idea, what may have gone wrong.
'swapchain' and 'device' are set to zero (0x00000000), when the D3D10CreateDeviceAndSwapChain function wasn't successful.
Second, according to the docs the DXGI_SWAP_CHAIN_DESC struct is an 'in' parameter. Probably this causes your error.
Update (Based on the comments): One thing thats different to the tutorial is the Buffer Format. The tutorial uses DXGI_FORMAT_R8G8B8A8_UNORM but you used DXGI_FORMAT_B8G8R8A8_UNORM.
Consider turning on the D3D debug output, it will surely tell you what went wrong in D3D10CreateDeviceAndSwapChain
.
This occurs because D3D10CreateDeviceAndSwapChain
fails. You didn't check the return code. You attempted to create a D3D10 hardware device but may not be running with D3D10-level graphics hardware, for example. Use the Direct3D debug output to tell you what the error was.
精彩评论