DirectX10 swapchain и устройство указывают на 0x00000000 (вызывая ошибку времени выполнения) (c ++) - PullRequest
1 голос
/ 12 марта 2011

Хорошо, я следовал этому уроку (код внизу страницы, чуть выше картинки, которую вы можете нажать, чтобы показать код) о DX10 и C ++ в основном код похож на

// 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

}

я пропустил ненужный код, я думаю, что вы можете выяснить его или перейти по ссылке, если вам действительно нужен полный код, я хочу сосредоточиться на основной проблеме;)

так, как указано в коде, мой отладчик говорит мне, что swapchain указывает на 0x00000000, просматривая значения, которые я обнаружил, что то же самое с device также указывает на 0x00000000. Сообщение:

First-chance exception at 0x........ in bla.exe: 0x........: Access violation reading location 0x00000000

Я просмотрел весь код, понятия не имею, в чем может быть проблема.

это может быть аппаратная проблема? Я нахожусь на Thinkpad T510 с двумя графическими чипами (один Intel и один nVidia), используя чипы nVidia по умолчанию вызывает сбой Visual Studio.

Я понятия не имею, в чем еще может быть проблема, потому что в руководстве говорится, что код будет работать :) я знаю, что есть другая тема с очень очень связанной проблемой, но насколько я понимаю, это не то же самое. (и ответ, который дал сам автор, не решает мою проблему)

edit: я только что прочитал отладочный вывод, и кажется, что ** загрузка * .dll не может быть загружена Кстати, я использую библиотеки x86 DX SDK

сниппет:

'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 0x01281758 in AnotherWindowsApp.exe: 0xC0000005: Access violation reading location 0x00000000.
The program '[5912] AnotherWindowsApp.exe: Native' has exited with code -1073741819 (0xc0000005).

Ответы [ 3 ]

3 голосов
/ 12 марта 2011

Сначала вы должны проверить, какой код ошибки возвращается функцией D3D10CreateDeviceAndSwapChain. Сравните код ошибки с на этом сайте , чтобы получить первое представление о том, что могло пойти не так.

'swapchain' и 'device' установлены в ноль (0x00000000), когда функция D3D10CreateDeviceAndSwapChain не была успешной.

Во-вторых, согласно документам структура DXGI_SWAP_CHAIN_DESC является параметром 'in'. Вероятно, это вызывает вашу ошибку.

Обновление (на основе комментариев): Одна вещь, которая отличается от учебника, это формат буфера. В учебнике используется DXGI_FORMAT_R8G8B8A8_UNORM, но вы использовали DXGI_FORMAT_B8G8R8A8_UNORM.

0 голосов
/ 12 марта 2011

Это происходит из-за сбоя D3D10CreateDeviceAndSwapChain.Вы не проверяли код возврата.Вы попытались создать аппаратное устройство D3D10, но, возможно, не работаете с графическим оборудованием уровня D3D10, например.Используйте выходные данные отладки Direct3D, чтобы сообщить, в чем заключалась ошибка.

0 голосов
/ 12 марта 2011

Подумайте о включении выхода отладки D3D, он наверняка скажет вам, что пошло не так в D3D10CreateDeviceAndSwapChain.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...