http://blog.csdn.net/pizi0475/article/details/7768597 水深无声 2022-08-21 04:29 35阅读 0赞 http://blog.csdn.net/pizi0475/article/details/7768597 Direct3D11中对象的建模把资源的创建和渲染功能分割到到一个device和一个或多个context中。这种分离的设计是为了便于多线程。 Device Device用来创建资源和枚举一个显示适配器性能。在Direct3D 11中,device用接口[**ID3D11Device**][ID3D11Device]表示。 每个程序必须至少有一个device,大部分程序一般也只创建一个device。可以通过调用[**D3D11CreateDevice**][D3D11CreateDevice] 和[**D3D11CreateDeviceAndSwapChain**][D3D11CreateDeviceAndSwapChain]来创建一个device,并通过[**D3D\_DRIVER\_TYPE**][D3D_DRIVER_TYPE]标记来指明它要对应于存在于你机器上的那个特定硬件。每个device可以根据需要使用一个或多个context。 Device Context 一个Device Context包含了一个Device使用的环境和设置。进一步来说,一个Device Context用来设置管线状态和生成用于使用属于该Device的资源的渲染命令。Direct3D 11 实现了两种device context,一种是立即渲染,另一种是延迟渲染。这两种contex都是用接口[**ID3D11DeviceContext**][ID3D11DeviceContext]表示。 Immediate Context 该上下文用于直接向驱动发送渲染命令。每个device必须且只能有一个“立即上下文”能从GPU获得数据。立即上下文可用来渲染一个 [command list][].有两种方法获得立即上下文: \#通过调用[**D3D11CreateDevice**][D3D11CreateDevice] 和[**D3D11CreateDeviceAndSwapChain**][D3D11CreateDeviceAndSwapChain]。 \#通过调用 [**ID3D11Device::GetImmediateContext**][ID3D11Device_GetImmediateContext]。 Deferred Context 延迟上下文把GPU指令记入一个[command list][]。该上下文主要用于多线程程序,单线程下没必要使用。延迟上下文一般由工作线程使用,而非主线程。当你创建一个延迟上下文后,该上下文并不从立即上下文中继承任何状态。可调用[**ID3D11Device::CreateDeferredContext**][ID3D11Device_CreateDeferredContext]获得延迟上下文。 不管是立即还是延迟的上下文,都可以在任何线程上执行。 线程注意事项 下面标明了D3D11中的线程模型与先前版本的D3D有什么不同: 所有的[**ID3D11Device**][ID3D11Device]接口方法都是线程自由的,所谓线程自由是指在多个线程中可以同时调用同一个函数。 \# 所有继承[**ID3D11DeviceChild**][ID3D11DeviceChild]接口的子接口(比如[**ID3D11Buffer**][ID3D11Buffer],[**ID3D11Query**][ID3D11Query])都是线程自由的。 \# Direct3D11 把资源创建和渲染功能分配到两个接口中。Map,Unmap,Begin,End和GetData由[**ID3D11DeviceContext**][ID3D11DeviceContext]实现,因为[**ID3D11Device**][ID3D11Device]严格定义了操作的顺序。[**ID3D11Resource**][ID3D11Resource] 和 [**ID3D11Asynchronous**][ID3D11Asynchronous]也是线程自由的。 \# [**ID3D11DeviceContext**][ID3D11DeviceContext]中的方法,除了哪些存在于[**ID3D11DeviceChild**][ID3D11DeviceChild]中的方法,都是非线程自由的。同时只能有一个线程调用哪些方法(如Draw,Copy,Map等等)。 \# 总体上,线程自由可以最小化需要同步的对象。一个程序使用同步方法会直接影响程序的并行效率。 ID3D10Device 接口不是线程自由的。该接口实现了所有创建和uxuanran的功能(Direct3D9同样也是这样)。Map 和 Unmap由 继承ID3D10Resource的接口实现。Begin,End和GetData由继承了ID3D10Asynchronous的接口实现。 [ID3D11Device]: http://msdn.microsoft.com/en-us/library/ff476379%28v=VS.85%29.aspx [D3D11CreateDevice]: http://msdn.microsoft.com/en-us/library/ff476082%28v=VS.85%29.aspx [D3D11CreateDeviceAndSwapChain]: http://msdn.microsoft.com/en-us/library/ff476083%28v=VS.85%29.aspx [D3D_DRIVER_TYPE]: http://msdn.microsoft.com/en-us/library/ff476328%28v=VS.85%29.aspx [ID3D11DeviceContext]: http://msdn.microsoft.com/en-us/library/ff476385%28v=VS.85%29.aspx [command list]: http://msdn.microsoft.com/en-us/library/ff476885%28v=VS.85%29.aspx [ID3D11Device_GetImmediateContext]: http://msdn.microsoft.com/en-us/library/ff476529%28v=VS.85%29.aspx [ID3D11Device_CreateDeferredContext]: http://msdn.microsoft.com/en-us/library/ff476505%28v=VS.85%29.aspx [ID3D11DeviceChild]: http://msdn.microsoft.com/en-us/library/ff476380%28v=VS.85%29.aspx [ID3D11Buffer]: http://msdn.microsoft.com/en-us/library/ff476351%28v=VS.85%29.aspx [ID3D11Query]: http://msdn.microsoft.com/en-us/library/ff476578%28v=VS.85%29.aspx [ID3D11Resource]: http://msdn.microsoft.com/en-us/library/ff476584%28v=VS.85%29.aspx [ID3D11Asynchronous]: http://msdn.microsoft.com/en-us/library/ff476347%28v=VS.85%29.aspx
相关 http://blog.csdn.net/pizi0475/article/details/7768597 http://blog.csdn.net/pizi0475/article/details/7768597 Direct3D11中对象的建模把资源的 水深无声/ 2022年08月21日 04:29/ 0 赞/ 36 阅读
还没有评论,来说两句吧...