DirectX11基础 ---设备(Device)和设备上下文(Device context)

文章目录

  • 设备(Device)
  • 设备上下文(Device Context)
  • 即使上下文(immediate context)
  • 延迟上下文(deferred context)

设备(Device)

ID3DllDevice 接口提供了许多方法来创建着色器程序对象、资源、状态对象和查询对象(等等)。它还提供了检查某些硬件特性的可用性的方法,以及许多与诊断和调试相关的方法。通常,可以将设备看作应用程序中使用的各种资源的提供者。
除了作为Direct3D 11的资源提供者,该设备还封装了特性级别(feature levels) 的概念。使用特性级别是一种允许应用程序在硬件上使用和运行Direct3D 11 API的技术,这些硬件实现了一些较老的功能,比如Direct3D 10 gpu。这允许应用程序使用同样的渲染API,但仍然针对几代硬件。

设备上下文(Device Context)

虽然设备(device) 用于创建管道使用的各种资源,但为了实际使用这些资源并操纵管道本身,我们将使用设备上下文(device context) 。设备上下文用于将创建的资源、着色器对象和状态对象绑定到管道。它们也被用来控制渲染和计算管道的执行。此外,它们还提供了操作设备创建的资源的方法。通常,设备上下文可以被看作是设备产生的资源的消费者,设备作为处理管道的接口。
设备上下文在ID3DllDeviceContext接口中实现。为了帮助引入多线程渲染支持,提供了两种不同风格的上下文。第一个称为即时上下文(immediate context),第二个称为延迟上下文(deferred context) 。虽然这两种类型实现了相同的设备上下文接口,但是它们的使用具有非常不同的语义。我们将在下面讨论这两个上下文背后的概念。

即使上下文(immediate context)

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

延迟上下文(deferred context)

延迟上下文是一种次要的上下文类型,它提供了一种线程安全机制,用于记录来自次要线程(主渲染线程除外)的一系列命令。这用于生成一个命令列表对象,该对象可以稍后在即时上下文中“回放”。允许从其他线程生成命令列表提供了在多核CPU系统上发现性能改进的一些可能性。此外,Direct3D 11还允许在多个线程上执行异步资源创建,这提供了简化多线程加载情况的能力。当考虑到当前和未来的PC硬件环境时,这些都是很重要的概念,我们可以期望在给定的PC中有越来越多的CPU内核可用。

你可能感兴趣的:(c++,DirectX,渲染)