gpt4 book ai didi

c++ - DirectX10 交换链和设备指向 0x00000000(导致运行时错误)(c++)

转载 作者:可可西里 更新时间:2023-11-01 11:38:36 25 4
gpt4 key购买 nike

好的,我关注了this tutorial (代码在页面下方,您可以点击显示代码的图片顶部)关于 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

我查看了整个代码,不知道可能是什么问题。

会不会是硬件问题?我在带有两个图形芯片(一个英特尔和一个 nVidia)的 Thinkpad T510 上,默认使用 nVidia 芯片会导致 Visual Studio 崩溃。

我不知道还有什么问题,因为教程指出代码将运行 :)我知道还有另一个主题有一个非常非常相关的问题,但据我了解它不一样。 (而且作者自己给的答案并没有解决我的问题)

编辑:我刚刚读取了调试输出,似乎无法加载 ** *.dll顺便说一句,我正在使用 DX SDK 的 x86 库

片段:

'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).

最佳答案

首先,您应该检查 D3D10CreateDeviceAndSwapChain 函数返回的错误代码。将错误代码与 this site 上的错误代码进行比较初步了解可能出了什么问题。

当 D3D10CreateDeviceAndSwapChain 函数不成功时,'swapchain' 和 'device' 设置为零 (0x00000000)。

二、根据docs DXGI_SWAP_CHAIN_DESC 结构是一个“输入”参数。可能这会导致您的错误。

更新(基于评论):与本教程不同的一件事是缓冲区格式。本教程使用 DXGI_FORMAT_R8G8B8A8_UNORM,但您使用的是 DXGI_FORMAT_B8G8R8A8_UNORM。

关于c++ - DirectX10 交换链和设备指向 0x00000000(导致运行时错误)(c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5282926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com