创建交换链失败

2024-01-30

我正在关注 DX 示例和 MSDN 参考,但现在遇到了困难。

我从 D3D11CreateDeviceAndSwapChain() 获取 E_InvalidArg 的 HRESULT。 我知道它是我传递的 IDXGIAdapter,因为如果我将其更改为 null,它就可以工作。

我无法弄清楚我的初始化出了什么问题。也许有更多知识的人知道我做错了什么。这里是:

变量:

vector<IDXGIAdapter1*> vAdapters;
IDXGIAdapter1* selectedVAdapter; // Constructor inits this to null

Methods:

void refreshVideoAdapters(){
    IDXGIAdapter1* pAdapter;
    IDXGIFactory1* pFactory=NULL;

    uint lastID=0;
    if(selectedVAdapter){
        DXGI_ADAPTER_DESC1* desc=NULL;
        selectedVAdapter->GetDesc1(desc);
        lastID=desc->DeviceId;
        releaseVideoAdapter();
    }

    if(FAILED(CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&pFactory))) return;

    for(uint i=0; pFactory->EnumAdapters1(i, &pAdapter)!=DXGI_ERROR_NOT_FOUND; i++){
        vAdapters.push_back(pAdapter);

        if(lastID){
            DXGI_ADAPTER_DESC1* desc=NULL;
            pAdapter->GetDesc1(desc);
            if(lastID==desc->DeviceId){
                selectedVAdapter=pAdapter;
                lastID=0;
            }
        }
    }

    if(pFactory) pFactory->Release();
}
void releaseVideoAdapter(){
    for(uint i=0; i<vAdapters.size(); i++){
        vAdapters[i]->Release();
        vAdapters[i]=NULL;
    }
    vAdapters.clear();
    selectedVAdapter=NULL;
}
IDXGIAdapter1* getVideoAdapter(){return selectedVAdapter;}
bool setVideoAdapter(uint num=0){
    if(num<vAdapters.size()){
        selectedVAdapter=vAdapters[num];
        return 1;
    }
    return 0;
}

通话的相关部分:

       ...
    D3D_FEATURE_LEVEL featureLevels[]={
        D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1,
        D3D_FEATURE_LEVEL_9_3,
    };
    uint featuresSize=ARRAYSIZE(featureLevels);

    D3D_DRIVER_TYPE driverTypes[]={
        D3D_DRIVER_TYPE_HARDWARE,
        D3D_DRIVER_TYPE_WARP,
        D3D_DRIVER_TYPE_REFERENCE,
    };
    uint driversSize=ARRAYSIZE(driverTypes);

    refreshVideoAdapters();
    setVideoAdapter();

    DXGI_SWAP_CHAIN_DESC sd;
    ZeroMemory( &sd, sizeof( sd ) );
    sd.BufferCount = 1;
    sd.BufferDesc.Width = 42;
    sd.BufferDesc.Height = 42;
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    sd.BufferDesc.RefreshRate.Numerator = 60;
    sd.BufferDesc.RefreshRate.Denominator = 1;
    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    sd.OutputWindow = hWnd;
    sd.SampleDesc.Count = 1;
    sd.SampleDesc.Quality = 0;
    sd.Windowed = TRUE;

    HRESULT success=D3D11CreateDeviceAndSwapChain(
        selectedVAdapter, driver, NULL, flag, featureLevels, featuresSize, 
        D3D11_SDK_VERSION, &sd, &swapChain, &deviceInterface,
        &selectedFeatureLevel, &deviceContext);

       ...

您没有显示整个 D3D11CXreateDeviceAndSwapChain() 调用,所以我只能猜测 - 您是否注意到了该段落the docs http://msdn.microsoft.com/en-us/library/windows/desktop/ff476083%28v=vs.85%29.aspx?

如果将 pAdapter 参数设置为非 NULL 值,则还必须设置 DriverType 参数为 D3D_DRIVER_TYPE_UNKNOWN 值。如果将 pAdapter 参数设置为 非 NULL 值和 DriverType 参数为 D3D_DRIVER_TYPE_HARDWARE 值, D3D11CreateDeviceAndSwapChain 返回 E_INVALIDARG 的 HRESULT。

很容易被那个困住,因为“嘿,我希望设备使用硬件支持”:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建交换链失败 的相关文章

随机推荐

  • 来自位图源的图像的 LazyColumn 闪烁/闪烁

    我是 Jetpack Compose 的新手 我目前正在开发一个聊天应用程序 我要求用户从图库中选择图像或从相机中拍照 然后我将文件 Uri 保存到数据库中 然后监听所有消息的列表 当此列表更新时 此图像正在重新组合并闪烁 视图模型中的消息
  • 我的 PHP 脚本缓存(公共)友好吗?

    我已经完成了一个可以提供许多文档的小型 PHP 应用程序 这些文件must可由客户端缓存and代理 由于代理可以缓存我的结果 因此我必须格外小心 因为我提供的文档可以具有不同的 MIME 类型 基于 SERVER HTTP ACCEPT 的
  • arm-none-eabi 和 arm-linux-gnueabi 之间的区别?

    arm none eabi 和 arm linux gnueabi 有什么区别 我知道如何使用它们的区别 一种用于裸机软件 另一种用于在 Linux 上运行的软件 但技术背景是什么 我发现 ABI 存在差异 据我所知 它类似于 API 但在
  • Jquery mousedown 与 click

    今天我发现了一些让我很困惑的事情 我只是试图通过 jquery 隐藏 s th 首先我尝试使用这个 specificdiv li nth child 3 click function anotherdiv hide 但它不起作用 一段时间后
  • 使用 GIT 部署代码 - 签出与重置 -- 难吗?

    我需要确保服务器上的 python 部署位置之一始终与远程分支同步 并删除服务器上的任何更改 选项 1 和选项 2 有什么区别 哪一个是首选 我打算及时运行它 以确保服务器代码与远程同步 选项1 git clean f x git fetc
  • OpenMP 并行减少会产生错误的结果

    我正在使用信号矩阵 我的目标是计算一行所有元素的总和 该矩阵由以下结构表示 typedef struct matrix float data int rows int cols int leading dim matrix 我不得不提到矩阵
  • iphone,当使用“renderInContext”将图像保存到设备时,图像模糊?

    我正在使用此代码从视图中渲染图像 然后我将其保存到相册中 图像模糊 为什么 有解决办法吗 UIGraphicsBeginImageContext self view bounds size self view layer renderInC
  • Azure AD B2C 连接用户使用 Graph AD API 更改密码

    我们正在使用Azure AD B2C 我正在尝试为登录用户实现changePassword 功能 我们已经遵循了这个教程https learn microsoft com en us azure active directory b2c a
  • 在 GKE / Kubernetes 中构建、推送和测试 Docker 镜像的工作流程

    我正在开发一个 Kubernetes 服务 用于在 Google Container Egine GKE 中部署 直到最近 我还在 Google Cloud Shell 中构建了 Docker 镜像 但现在已经达到了配额限制 因为运行 Cl
  • 警报管理器立即触发

    您好 我目前正在使用 AlarmManager 我写了下面给出的代码 根据代码 AlarmManager 应在 10 秒后触发 但在我的代码中 警报管理器会立即触发 请帮忙 public class MainActivity extends
  • 数据结构的功能类似于 C 或 C++ 中的数据库

    是否有一种数据结构可以提供数据库的功能 如插入 更新 删除等 例如 创建一个类似于数据库表的结构 在其上存储数据并对其进行查询 有选择地删除它 我知道使用哈希表可以做到这一点 例如 uthash 库 但据我所知 在哈希表中仅更新一个列元素并
  • eclipse 不适用于 ubuntu 16.04

    我刚刚安装了ubuntu 16 04并下载了eclipse并解压 当我启动 Eclipse 时 欢迎页面是空的 当我启动 eclipse 市场时 什么也没有发生 如何解决这个问题 编辑完后尝试启动 Eclipseeclipse ini文件并
  • IE10 SCRIPT5009:“__doPostBack”未定义

    我在使用 ASP NET 控件的 IE10 上遇到问题 需要 JavaScript 回发 例如链接按钮 它可以在 IE9 版本以及 IE10 兼容模式下正常工作 但在 IE10 标准模式下 出现以下错误 SCRIPT5009 doPostB
  • 使用 gradle 脚本结帐

    我是 gradle 新手 我想使用 gradle 脚本签出远程存储库 可以运行 shell 命令 Inside gradle 任务来使用日期时间戳 shell 命令克隆远程存储库 是的 您可以使用 gradle Exec 类型任务在 OS
  • PHP 中的 preg_replace - NOT 条件的正则表达式

    我正在尝试使用 preg replace 在 PHP 中编写一个函数 它将替换列表中未找到的所有字符 通常我们会替换它们所在的位置 但这个不同 例如 如果我有字符串 mystring ab2c4d 我可以编写以下函数 将所有数字替换为 pr
  • 从 Mysql 导出 CSV

    我在导出使用 php 从我的 mysql 表之一创建的 csv 文件时遇到了一些麻烦 我使用的代码打印了正确的数据 但我看不到如何在 csv 文件中下载这些数据 而是提供了创建的文件的下载链接 我以为浏览器应该自动提供文件供下载 但事实并非
  • Java:如何检查数组中的元素是否已初始化?

    我想检查数组中的某个元素是否已初始化 我该怎么做 创建数组时 数组中的所有值都会被初始化 初始值可以明确设置 例如X xs x1 xN 或者在实例化数组时分配默认值 对于对象数组 每个元素的默认值是null for a boolean数组
  • 在 Windows Phone 7 上录制扬声器

    您知道是否可以拦截 win Phone 7 上的音频流并记录扬声器上正在播放的内容 或者 我使用 MediaElement 有没有办法获取当前流 我想在达到特定频率时添加一些动画 thanks 只要您知道该媒体的位置并可以启动下载 您就可以
  • Simple_form 必填字段不起作用 - Ruby on Rails

    我在 RoR 应用程序中有一个使用 simple form 构建的提交表单 当字段为空时 应用程序仍会进入下一步 不会提示错误或警告 这些字段应该是默认的required true 但即使手动编写也不起作用 该应用程序有 3 个步骤 New
  • 创建交换链失败

    我正在关注 DX 示例和 MSDN 参考 但现在遇到了困难 我从 D3D11CreateDeviceAndSwapChain 获取 E InvalidArg 的 HRESULT 我知道它是我传递的 IDXGIAdapter 因为如果我将其更