DX基础 | DXGI(DirectX Graphics Infrastructure)

MSDN DXGI Overview

在这里插入图片描述
DXGI是windows系统中用户模式下最底层的图形设备接口.
DXGI 直接与硬件驱动打交道.
DXGI对上提供a common framework for future graphics components.

应用程序可以直接访问DXGI. 或者通过Direct3D的API来访问,这些API帮你与DXGI进行通信.
如果你的应用需要枚举设备或者想要控制数据如何被输出,你可能需要直接与DXGI通信.

Enumerating Adapters 枚举适配器

适配器是一种 计算器软件和硬件能力 的抽象.
通常情况下,你的机器上会有很多适配器. 有一些设备在硬件上实现,有一些在软件上实现.
适配器实现 图形应用程序使用 的功能.

如图, 展示了一个计算机. 两个适配器(video card). 三个输出显示器(output monitor).
在这里插入图片描述
当枚举这些硬件时:
IDXGIOutput1: 每个硬件设备上可能有多个输出接口,因此每个接口对应一个Output;
IDXGIAdapter2: 对每一个video card(即便是集显),简单理解为一个硬件设备;

当枚举完成,使用 IDXGIFactory (完成枚举的主控工厂);

如果你想要选择指定的某个video hardware.
推荐对每一个adapter handle 迭代调用:
D3D11CreateDevice or D3D11CreateDeviceAndSwapChain
通过达到某个 feature level 来选择.

Each video card implements a certain level of Microsoft DirectX (DX) functionality depending on the graphics processing units (GPUs) installed.
每个视频卡根据GPU实现某种Level的DX能力.
如 9_1 feature level 被Direct3D 9实现 / 11_0 feature level 被Direct3D 11实现.
对于DX版本 / Shader models / feature levels 都有一个独特的编号系统:

  • Direct3D versions use a period; for example, Direct3D 12.0.
  • Shader models use a period; for example, shader model 5.1.
  • Feature levels use an underscore; for example, feature level 12_0.
    在这里插入图片描述

Presentation 送显

你的应用的主要任务是: render frames,然后通知DXGI去显示这些帧到输出.
按照某个帧率来送显,可能需要不止两个buffer.

The set of buffers created is called a swap chain
创建的缓冲叫做交换链.
A swap chain has one front buffer and one or more back buffers.
交换链通常需要一个前置缓冲,和一个后者多个后置缓冲.
在这里插入图片描述

Create a Swap Chain 创建交换链

In DXGI, a swap chain is tied to a window when the swap chain is created.
在DXGI中,当一个交换链被创建,它会绑定到一个窗口. 这可以节约内存且提高performance.
之前的版本DX,允许改变交换链绑定的窗口.

In DXGI, a swap chain is tied to a rendering device on creation.
在DXGI中,一个交换链被绑定到一个渲染设备?

In DXGI, the swap effects available are DXGI_SWAP_EFFECT_DISCARD and DXGI_SWAP_EFFECT_SEQUENTIAL.
在DXGI中,一个交换效果是 DXGI_SWAP_EFFECT_DISCARD 和 DXGI_SWAP_EFFECT_SEQUENTIAL.

DISCARD 丢弃
SEQUENTIAL 顺序

Care and Feeding of the Swap Chain

TODO: Resize问题

DXGI Responses from DLLMain

由于做项目的时候就遇到了这个问题.
想在DLLMain中初始化DXGI使用DX,却反悔错误.
由于dll被加载和卸载的时机不能被保证.推荐不要在 DllMain 中使用DXGI和DX的方法.
为了防止这个问题:

  • If your app’s DllMain function releases its last reference to a DXGI factory, DXGI raises an exception.
  • If your app’s DllMain function creates a DXGI factory, DXGI returns an error code.
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值