Practical Rendering and Computation with Direct3D 11
+ -

1.1 Direct3D框架

2024-06-13 11 0

Direct3D 11是本地应用编程接口(API),其用于与计算机的视频硬件通信并控制其以创建渲染图像。术语native表示API被设计为通过C/C++访问,而不是通过托管语言访问。因此,使用API最直接的方法是在C/C++应用程序中。尽管有许多不同的原生窗口框架,但我们将使用Win32 API,只是为了减少启动和运行Direct3D 11所需的额外软件技术的数量。

尽管它们对应用程序是透明的,但实际上有许多位于Direct3D下方的不同软件层,它们共同构成了整体Windows客户端环境中使用的图形体系结构。在本节中,我们将讨论应用程序和Direct3D如何适应这个整体架构,并将探索其他组件的用途是什么,以提供对我们是什么的全面了解在使用API时实际操作。

1.1.1图形架构

Windows中使用的通用图形体系结构如图1.1所示。在这个图中,我们可以看到应用程序位于最高级别并且主要与Direct3D交互。在下一层向下,Direct3D运行时与视频硬件的用户模式驱动程序交互,以执行由应用程序生成的命令。驱动然后与DXGI框架交互,负责执行与内核模式驱动程序的低级别通信,以及管理可用的硬件资源。具有这样一个由不同层和界面组成的阵列可能有点复杂,无法理解每一个他们中的一个负责。然而,我们将简要介绍浏览每一层以了解他们每层执行的操作。
152224485423

DXGI:Microsoft DirectX Graphics Infrastructure(基础设施),详见:https://learn.microsoft.com/zh-cn/windows/win32/direct3ddxgi/d3d10-graphics-programming-guide-dxgi

应用程序最终控制将最终在用户的应用程序窗口中呈现给用户的内容。应用程序提供任何二维或三维对象、图像、文本、动画或其他高级内容;它们通常专门用于每个应用程序的特定需求。

Direct3D提供了一组API函数,这些函数可用于将应用程序的高级内容转换为可由用户模式驱动程序解释的格式。应用程序所需的内容必须根据Direct3D的规则进行格式化。这包括实际的数据格式,以及所需的函数调用顺序。只要应用程序遵循所需的Direct3D使用,就可以确保它在图形体系结构中运行。

一旦Direct3D接收到来自应用程序的一系列函数调用,它就会进行交互以产生由GPU执行的命令的列表。这些操作的结果将中继到DXGI接口,以操作的内容硬件资源。DXGI处理较低级别的硬件接口,例如提供为安装在计算机中的每个视频卡提供一个“适配器”接口。DXGI还提供了对所谓交换链的访问,这些交换链封装了实际的缓冲区可用于将渲染的内容呈现给窗口。

尽管这在图1.1中没有显示,但很可能多个应用程序将同时使用Direct3D运行时。这是的好处之一Windows显示驱动程序模型(WDDM),视频资源被虚拟化在所有应用程序之间共享。应用程序不必担心访问GPU,因为它可同时用于所有应用程序。当然,当用户正在执行图形密集型操作,就像玩高端游戏一样使用GPU的应用程序可能会更少,因此计算量会更多力量可以被引导到游戏中。这与Windows XP驱动程序模型有所不同XPDM),它没有明确虚拟化对GPU的访问。

1.1.2抽象的好处

由于应用程序与Direct3D API接口,而不是直接与驱动程序接口,因此它仅需要学习与一个API接口的技巧,以产生所需的输出尝试适应用户可能已经安装的所有各种设备。这种转变创建与视频卡交互的统一渲染系统的负担制造商—他们必须遵守Direct3D标准,而不是应用程序尝试实现自己的“标准”渲染系统。

现代计算机的视频系统通常包含专用硬件设计用于执行图形操作。然而,入门级计算机可能没有安装支持Direct3D的硬件,或者只安装了特定应用程序所需的功能。幸运的是,Direct3D11提供了可以在缺乏具有Direct3D功能的硬件(高达Direct3D 10.1功能级别)的情况下使用的软件驱动程序实现。是否存在此类硬件通过Direct3D方便地从开发者那里抽象出来。

这两种情况都使开发人员受益匪浅。只要应用程序能够正确地与Direct3D11交互,它就可以访问标准化的渲染系统,并支持系统中存在的任何设备,无论它们是基于硬件还是基于软件的设备。

0 篇笔记 写笔记

作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!