使用D3D11创建设备和交换链
Using D3D11CreateDeviceAndSwapChain?
我目前正在C++中编写一个基于教程的DirectX 11游戏引擎,但遇到了一个问题。以下是错误所在:
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL,
0, &featureLevel, 1, D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain,
&m_device, NULL, &m_deviceContext);
result=HRESULT
,featureLevel=D3D_FEATURE_LEVEL
,swapChainDesc=DXGI_SWAP_CHAIN_DESC
,m_swapChain=IDXGISwapChain*
,m_device=ID3D11Device*
,最后m_deviceContext=ID3D11DeviceContext*
。
当我运行这个时,我得到的值大约是-5027…,所以这不起作用。我也看了这篇文章,尝试他们的方法,但它最终导致我的计算机崩溃(我对代码进行了一些修改,最终得到了D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, NULL, 0, D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, &featureLevel, &m_deviceContext);
)。
有人知道如何解决这个问题吗?我可以把我的整个程序上传到pastebin,只要问一下。此外,如果你想看一下,这里有教程的链接。
提前谢谢。
也许您的硬件不完全支持DirectX11功能级别,所以试着用这个
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_WARP, NULL,
0, &featureLevel, 1, D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain,
&m_device, NULL, &m_deviceContext);
D3D_DRIVER_TYPE_HARDWARE
标志表示D3Device将在硬件模式下创建。如果图形卡支持DX11功能级别,则程序将使用该图形卡的全部功能,否则创建将失败。D3D_DRIVER_TYPE_WARP
标志,使D3Device使用软件模式,这使程序能够在不支持DX11的图形卡上运行,但不能全速运行。
有关驱动程序类型的更多信息,请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ff476328(v=vs.85).aspx
因为你不确定你的应用程序运行的硬件,所以最好的做法是:
// Driver types
D3D_DRIVER_TYPE driverTypes[] =
{
D3D_DRIVER_TYPE_HARDWARE,
D3D_DRIVER_TYPE_WARP,
D3D_DRIVER_TYPE_REFERENCE,
};
// feature levels
D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
};
int numDriverTypes = ARRAYSIZE( driverTypes );
int numFeatureLevels = ARRAYSIZE( featureLevels );
您的应用程序将循环并测试这些阵列中每个功能级别的每个驱动程序类型,如果成功,则DXDevice将创建具有正确功能级别和驱动程序模式的
for( int driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex ++ )
{
result = D3D11CreateDeviceAndSwapChain( NULL, driverTypes[driverTypeIndex], NULL, createDeviceFlags, featureLevels, numFeatureLevels,
D3D11_SDK_VERSION, &swapChainDesc, &swapChain, &m_device, &featureLevel, &m_deviceContext);
if( SUCCEEDED( result ) )
break;
}
- C++嵌套if语句,基本货币交换
- shell排序中的交换和比较
- D3D11-将混合权重和索引传递到顶点着色器
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 通过交换元素使数组相同
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 交换运算符 + 重载会导致无限递归
- 为什么 std::reduce 需要交换性?
- 复制和交换习惯用法与移动操作之间的交互
- C++ - 没有自定义交换功能的移动分配运算符?
- 如何在数组中交换最小和最大的位置?
- 尽管一切看起来都很好,但值不会交换
- C++交换来自同一类成员的参数值,处理多个类
- 插入排序的最小交换
- C++在 2 个向量向量之间交换向量
- 转置矩阵:交换元素不会更改值
- 不正确的比较和交换计数器输出用于快速排序功能
- 交换函数不是在 C++ 中交换 2D 数组的元素
- std::vector move 而不是交换到空 vector 并释放存储
- 使用D3D11创建设备和交换链