- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
即使指定了适配器,以下代码中的 D3D12CreateDevice 也会抛出 _com_error 异常:
#include "d3dx12.h"
int main() {
ID3D12Device* device;
D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&device));
}
在 test.exe 中的 0x00007FFB1E315549 抛出异常:Microsoft C++ 异常:内存位置 0x0000002906BC90E0 处的 _com_error。
但是this来自 Microsoft 的示例程序不会从 D3D12CreateDevice 中抛出 _com_error。 D3D12CreateDevice 行为很奇怪,因为如果我将 HelloTriangle 文件夹重命名为 HelloTriangle2,异常会再次出现。
我检查了来自 D3D12CreateDevice 的 HRESULT,它返回 0(ZERO),这是成功的。但我仍然收到 _com_error。我的适配器通过硬件支持 DX12。
最佳答案
异常可以由运行时在内部使用,只要它们没有传播到函数之外就仍然是正确的。如果您从该异常继续,它可能会返回。您没有检查来自 D3D12CreateDevice
的 HRESULT
,您应该检查它返回的内容。
主要区别在于示例代码使用的是明确枚举的适配器,该适配器已被验证支持 Direct3D 12,而您的代码依赖于默认设备。
// Helper function for acquiring the first available hardware adapter that supports Direct3D 12.
// If no such adapter can be found, *ppAdapter will be set to nullptr.
_Use_decl_annotations_
void DXSample::GetHardwareAdapter(IDXGIFactory2* pFactory, IDXGIAdapter1** ppAdapter)
{
ComPtr<IDXGIAdapter1> adapter;
*ppAdapter = nullptr;
for (UINT adapterIndex = 0; DXGI_ERROR_NOT_FOUND != pFactory->EnumAdapters1(adapterIndex, &adapter); ++adapterIndex)
{
DXGI_ADAPTER_DESC1 desc;
adapter->GetDesc1(&desc);
if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)
{
// Don't select the Basic Render Driver adapter.
// If you want a software adapter, pass in "/warp" on the command line.
continue;
}
// Check to see if the adapter supports Direct3D 12, but don't create the
// actual device yet.
if (SUCCEEDED(D3D12CreateDevice(adapter.Get(), D3D_FEATURE_LEVEL_11_0, _uuidof(ID3D12Device), nullptr)))
{
break;
}
}
*ppAdapter = adapter.Detach();
}
如果您的系统没有支持 Direct3D 12 的设备,那么示例代码将使用 WARP 软件设备,而您的代码也没有这样做。
因此您的默认视频设备可能不支持 Direct3D 12,并且您的系统上什至可能没有任何支持它的视频设备。也就是说,在 Direct3D 运行时内抛出的 C++ 异常仍然会触发调试器中断,因此您必须继续它们。
参见 Anatomy of Direct3D 12 Create Device有关创建 Direct3D 12 设备的详细演练。
You may also want to make use of DeviceResources to handle all the logic for device creation.
关于c++ - D3D12CreateDevice 抛出 _com_error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515510/
我正在尝试从全屏 DirectX 游戏中捕获屏幕。 我设法从窗口游戏中截取屏幕截图,但是当我尝试从全屏游戏创 build 备时,它会引发异常。 这是我的代码: #include "stdafx.h"
可能是什么原因? 从 DLL_PROCESS_ATTACH 上的 DllMain() 调用 IDirect3D9::CreateDevice(),它挂起 代码很简单,就像: BOOL APIENTRY
我正在编写一个 DLL,它通过更改注入(inject)进程的 VMT 中所需的指针来 Hook 某些 D3D 函数。算法是这样的: 获取虚拟窗口句柄。 初始化虚拟 D3D 对象,创建 D3D 设备。
如果我的怀疑是愚蠢的或愚蠢的,请原谅我。我对 DirectX 编程完全陌生。只要有 C++ 知识(非常基本的 COM 知识)。 以下代码示例来自 MSDN Creating D3D device其中解
在创建启用多重采样的 Allegro 5 Direct3D 窗口时,我正在调试窗口创建闪烁。我已将问题缩小到在 allegro 的 d3d_disp.cpp 源文件中创建窗口。但是,我无法从 Dire
前段时间我发了一篇关于创建 dll 的帖子,用于注入(inject)目的,这将导致主机应用程序触发 Nvidia Optimus 笔记本电脑以“唤醒”dGpu。这是必要的,因为 nvidia 在这里创
我正在尝试使用 BlueZ 4.X DBus 接口(interface)在 Linux 上建立与蓝牙 4.0 LE 设备的连接。 为了测试这一点,我使用以下命令: dbus-send --system
我是一名优秀的程序员,十分优秀!