c++ - 无法创建 DirectX 设备和交换链

标签 c++ visual-studio visual-c++

我在从 directx 检索交换链和设备时遇到问题。更多信息在代码中

void GXDX::StartUp(HWND* mainWindow,int w, int h)
{

    //width and height are members of GXDX

    width = w; //contains the width
    height = h; //contains the height

    this->mainWindow = mainWindow; // Is a handle to the main window. it is usually something 
                                   //like : unusual -735313406 

    ID3D10Texture2D *backBufferSurface;

    DXGI_SWAP_CHAIN_DESC swapChainDesc;
    swapChainDesc.BufferCount = 2;
    swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
    swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
    swapChainDesc.BufferDesc.Width = width;
    swapChainDesc.BufferDesc.Height = height;
    swapChainDesc.SampleDesc.Count = 1;
    swapChainDesc.SampleDesc.Quality = 0;
    swapChainDesc.OutputWindow = *mainWindow;
    swapChainDesc.Windowed = TRUE;

    D3D10_DRIVER_TYPE driverType = D3D10_DRIVER_TYPE_HARDWARE;

    HRESULT hr = D3D10CreateDeviceAndSwapChain(NULL,driverType,NULL,0,
        D3D10_SDK_VERSION, &swapChainDesc,&swapChain,&dxDevice);

    if(FAILED(hr))//Error is here
        throw GXVideoException(L"Problems retrieving directX device");
}

下面是方法完成后给出的所有值

-       &dxDevice   0x00e74b04  ID3D10Device * *
-           0x00000000  ID3D10Device *
-       IUnknown    {...}   IUnknown
        __vfptr CXX0030: Error: expression cannot be evaluated  
-       &swapChain  0x00e74b08  IDXGISwapChain * *
-           0x00000000  IDXGISwapChain *
-       IDXGIDeviceSubObject    {...}   IDXGIDeviceSubObject
-       IDXGIObject {...}   IDXGIObject
-       IUnknown    {...}   IUnknown
        __vfptr CXX0030: Error: expression cannot be evaluated  
-       &swapChainDesc  0x002df90c {BufferDesc={...} SampleDesc={...} BufferUsage=0xcccccccc ...}   DXGI_SWAP_CHAIN_DESC *
-       BufferDesc  {Width=0x00000320 Height=0x00000258 RefreshRate={...} ...}  DXGI_MODE_DESC
        Width   800 unsigned int
        Height  600 unsigned int
-       RefreshRate {Numerator=60 Denominator=1 }   DXGI_RATIONAL
        Numerator   60  unsigned int
        Denominator 1   unsigned int
        Format  DXGI_FORMAT_R8G8B8A8_UNORM  DXGI_FORMAT
        ScanlineOrdering    -858993460  DXGI_MODE_SCANLINE_ORDER
        Scaling -858993460  DXGI_MODE_SCALING
-       SampleDesc  {Count=0x00000001 Quality=0x00000000 }  DXGI_SAMPLE_DESC
        Count   1   unsigned int
        Quality 0   unsigned int
        BufferUsage 3435973836  unsigned int
        BufferCount 2   unsigned int
-       OutputWindow    0x008b08ca {unused=-665779669 } HWND__ *
        unused  -665779669  int
        Windowed    1   int
        SwapEffect  -858993460  DXGI_SWAP_EFFECT
        Flags   3435973836  unsigned int
        driverType  D3D10_DRIVER_TYPE_HARDWARE  D3D10_DRIVER_TYPE
        hr  0x887a0001  HRESULT
-       this    0x00e74af0 {dxDevice=0x00000000 swapChain=0x00000000 }  GXDX * const
-       GXRenderer  {running=true width=0x00000320 height=0x00000258 ...}   GXRenderer
-       __vfptr 0x013277dc const GXDX::`vftable'    *
        [0] 0x0132110e GXDX::Render(void)   *
        [0x1]   0x013211d6 GXDX::StartUp(struct HWND__ * *,int,int) *
        [0x2]   0x01321041 GXDX::SetupScene(void)   *
        [0x3]   0x01321069 GXDX::DisplayScene(void) *
        running true    bool
        width   0x00000320  int
        height  0x00000258  int
-       mainWindow  0x0132a214 struct HWND__ * GXRenderManager::mainWindow {unused=0x008b08ca } HWND__ *
        unused  0x008b08ca  int
-       dxDevice    0x00000000  ID3D10Device *
+       IUnknown    {...}   IUnknown
-       swapChain   0x00000000  IDXGISwapChain *
-       IDXGIDeviceSubObject    {...}   IDXGIDeviceSubObject
-       IDXGIObject {...}   IDXGIObject
-       IUnknown    {...}   IUnknown
        __vfptr CXX0030: Error: expression cannot be evaluated  

[编辑]

在 Goz 回复之前,我检查了进一步的调试细节,这是收到的内容

DXGI Error: IDXGIFactory::CreateSwapChain: SwapEffect is unknown.

我猜我没有添加 swapeffect 属性。我会这样做并检查一下

最佳答案

傻我。早些时候我在评论中提到我正在阅读的两本书都不包含交换链效应属性。不管我是否包含交换链,我都知道出了问题。

但我也注意到这两本书都将交换链描述归零。使遗漏属性更安全。所以我添加了以下内容

SecureZeroMemory(&swapChainDesc, sizeof(swapChainDesc));

一切正常。撇开这个不谈,我还是应该添加一个交换链效果属性。但是出于原因,这本书决定不这样做,我还没有弄清楚。

关于c++ - 无法创建 DirectX 设备和交换链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3098984/

相关文章:

c++ - 调试 session 期间的内存泄漏 - 可能的威胁?

c++ - 这不是我要求的输出

c++ - 安装 CppUnit Libraries 和 CppUnit Includes

c++ - 路径的 CMake 命令相等

c++ - 匹配成员变量的正则表达式

c++ - 像素修改不覆盖整个图像

visual-studio - Visual Studio 2003 合并模块

visual-studio - 寻找数据库项目的替代方案

c++ - 具有委托(delegate)构造函数的 constexpr

c++ - 将 VC++ 内联汇编程序移植到 x64(__stdcall Hook )