首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过传入IDXGIAdapter创建DirectX10交换链和设备

通过传入IDXGIAdapter创建DirectX10交换链和设备
EN

Stack Overflow用户
提问于 2012-12-21 12:50:10
回答 1查看 700关注 0票数 0

我正在尝试从IDXGIAdapter创建设备和交换链。我的所有代码都是成功的,直到调用返回DXGI_ERROR_INVALID_CALL的CreateSwapChain。

MSDN表示,当DXGI_SWAP_CHAIN_DESC为null或IDXGISwapChain**为null时,可能会返回DXGI_ERROR_INVALID_CALL。

我真的不确定"IDXGISwapChain** is null“是什么意思,因为它是输出(当你实际输入NULL时,我猜是这样的。

我的交换链定义为...

代码语言:javascript
复制
IDXGISwapChain* m_pSwapChain;

我的其他代码是..。

代码语言:javascript
复制
IDXGIAdapter * pPrimaryAdapter = m_vAdapters.at(0); 

HRESULT hr = D3D10CreateDevice(pPrimaryAdapter,
                                D3D10_DRIVER_TYPE_HARDWARE,
                                NULL,
                                NULL,//D3D10_CREATE_DEVICE_SINGLETHREADED
                                D3D10_SDK_VERSION,
                                &m_pD3DDevice);


if(hr != S_OK)
{
    MessageBox(NULL, L"Error ###: Creation of Direct3D10 Device Failed", 0, 0);
    return false;
}

//m_pDXGIFactory->MakeWindowAssociation(hWnd, DXGI_MWA_NO_ALT_ENTER ); 
if(FAILED(m_pDXGIFactory->MakeWindowAssociation(hWnd, 0 )))
{
    MessageBox(0, L"Error ###: MakeWindowAssociation Failed", 0,0);
    return false;
}

IDXGIDevice * pDXGIDevice;
if(FAILED(m_pD3DDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice)))
{
    MessageBox(0, L"QueryInterface pDXGIDevice Failed", 0,0);
    return false;
}




DXGI_SWAP_CHAIN_DESC SwapChainDesc;

    SwapChainDesc.BufferCount = 1;
    SwapChainDesc.BufferDesc.Width = 800;
    SwapChainDesc.BufferDesc.Height = 600;
    SwapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    SwapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
    SwapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
    SwapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    SwapChainDesc.OutputWindow = hWnd;
    SwapChainDesc.SampleDesc.Count = 1;
    SwapChainDesc.SampleDesc.Quality = 0;
    SwapChainDesc.Windowed = TRUE;



hr = m_pDXGIFactory->CreateSwapChain(pDXGIDevice, &SwapChainDesc, &m_pSwapChain);

switch(hr)
{
case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE:
    {
        MessageBox(NULL, L"CreateSwapChainFailure: DXGI_ERROR_NOT_CURRENTLY_AVAILABLE", 0,0);
        return false;
    }break;
case DXGI_ERROR_INVALID_CALL:
    {
        MessageBox(NULL, L"CreateSwapChainFailure: DXGI_ERROR_INVALID_CALL", 0, 0);
        return false;
    }break;

};
EN

回答 1

Stack Overflow用户

发布于 2012-12-21 13:48:59

在赋值之前,您是否尝试过将SwapChainDesc的内存清零?您没有指定该结构的所有值,因此除非将其置零,否则某些参数可能无效。

尝试:

代码语言:javascript
复制
DXGI_SWAP_CHAIN_DESC SwapChainDesc;
ZeroMemory(&SwapChainDesc, sizeof(SwapChainDesc));

SwapChainDesc.BufferCount = 1;
....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13984432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档