开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜