Practical Rendering and Computation with Direct3D 11
+ -

1.4 Direct3D交互

2024-06-13 6 0

随着Direct3D11的高级概述的完成,我们现在将注意力转向应用程序如何与API接口并使用它。首先要了解应用程序使用的两个主要接口——设备和设备上下文。之后,我们将浏览一个简单的应用程序,看看它必须做什么才能使用Direct3D11

1.4.1 设备

使用Direct3D11时必须理解的主要接口是设备和设备上下文。这两个接口划分了管理Direct3D 11 API中可用功能的总体责任。当创建上述资源并与之接口时,使用设备(device)接口。当操作管道或资源时,将使用设备上下文( device context )。

ID3DllDevice接口提供了许多用于创建着色器程序对象、资源、状态对象和查询对象(以及其他)的方法。它还提供了检查某些硬件功能可用性的方法,以及许多诊断和调试相关的方法。通常,设备可以被认为是将在应用程序中使用的各种资源的提供者。我们将在本章后面了解如何在使用设备之前初始化和配置设备。由于此接口的大小和使用频率,我们将讨论与特定主题领域相关的设备方法。对于可用方法的直接列表,DXSDK文档为每个方法提供了一个完整的链接列表。

除了用作Direct3D 11的资源提供者之外,该设备还封装了特征级别的概念。特征级别的使用是一种允许应用程序在实现诸如Direct3D 10 GPU之类的较旧功能集的硬件上使用Direct3D 11 API和运行时的技术。这允许应用程序使用单个呈现API,但仍然以几代硬件为目标。我们将在本章后面看到如何使用API的这一伟大功能。

1.4.2上下文

当设备用于创建管道使用的各种资源时,为了实际使用这些资源并操纵管道本身,我们将使用设备上下文。设备上下文用于将创建的资源、着色器对象和状态对象绑定到管道。它们还用于控制渲染和计算管道调用的执行。此外,它们提供了用于操作由设备创建的资源的方法。一般来说,设备上下文可以被认为是设备产生的资源的消费者,它充当与管道一起工作的接口。

设备上下文在ID3DllDeviceContext接口中实现。为了帮助引入多线程渲染支持,提供了两种不同风格的上下文。第一个被称为即时上下文,第二个被称之为延迟上下文。虽然这两种类型都实现了相同的设备上下文接口,但它们的用法具有非常不同的语义。我们将在下面讨论这两个上下文背后的概念。

即时上下文

即时上下文或多或少是到管道的直接链接。当从该上下文调用方法时,Direct3D 11运行时会立即提交该方法,以便在驱动程序中执行。只允许使用单个即时上下文,并且它是在创建设备的同时创建的。此上下文可以被视为与管道的所有组件直接交互的接口。此上下文必须用作主渲染线程,并用作GPU的主要接口。

延迟上下文

延迟上下文是一种辅助类型的上下文,它提供了一种线程安全机制,用于记录来自主呈现线程以外的辅助线程的一系列命令。这用于生成一个命令列表对象,以后可以在即时上下文中“播放”该对象。允许从其他线程生成命令列表提供了在多核CPU系统上可以发现性能改进的一些潜力。此外,Direct3D 11还允许在多个线程上执行异步资源创建,这提供了简化多线程加载情况的能力。

在考虑当前和未来的PC硬件环境时,这些都是重要的概念,在这种环境中,我们可以预期在给定的PC中会有越来越多的CPU内核可用。多线程渲染的主题在第7章“多线程渲染”中进行了更详细的讨论。该主题本身就值得一本完整的书,但为了全面讨论Direct3D11,我们试图提供有关如何以及何时使用多线程的设计级别信息,而不是试图解释多线程编程的所有细节。

0 篇笔记 写笔记

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

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

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