我在从 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));

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

10-07 20:11