http://blog.csdn.net/pizi0475/article/details/7768597
http://blog.csdn.net/pizi0475/article/details/7768597
Direct3D11中对象的建模把资源的创建和渲染功能分割到到一个device和一个或多个context中。这种分离的设计是为了便于多线程。
Device
Device用来创建资源和枚举一个显示适配器性能。在Direct3D 11中,device用接口ID3D11Device表示。
每个程序必须至少有一个device,大部分程序一般也只创建一个device。可以通过调用D3D11CreateDevice 和D3D11CreateDeviceAndSwapChain来创建一个device,并通过D3D_DRIVER_TYPE标记来指明它要对应于存在于你机器上的那个特定硬件。每个device可以根据需要使用一个或多个context。
Device Context
一个Device Context包含了一个Device使用的环境和设置。进一步来说,一个Device Context用来设置管线状态和生成用于使用属于该Device的资源的渲染命令。Direct3D 11 实现了两种device context,一种是立即渲染,另一种是延迟渲染。这两种contex都是用接口ID3D11DeviceContext表示。
Immediate Context
该上下文用于直接向驱动发送渲染命令。每个device必须且只能有一个“立即上下文”能从GPU获得数据。立即上下文可用来渲染一个
command list.有两种方法获得立即上下文:
#通过调用D3D11CreateDevice 和D3D11CreateDeviceAndSwapChain。
#通过调用 ID3D11Device::GetImmediateContext。
Deferred Context
延迟上下文把GPU指令记入一个command list。该上下文主要用于多线程程序,单线程下没必要使用。延迟上下文一般由工作线程使用,而非主线程。当你创建一个延迟上下文后,该上下文并不从立即上下文中继承任何状态。可调用ID3D11Device::CreateDeferredContext获得延迟上下文。
不管是立即还是延迟的上下文,都可以在任何线程上执行。
线程注意事项
下面标明了D3D11中的线程模型与先前版本的D3D有什么不同:
所有的ID3D11Device接口方法都是线程自由的,所谓线程自由是指在多个线程中可以同时调用同一个函数。
# 所有继承ID3D11DeviceChild接口的子接口(比如ID3D11Buffer,ID3D11Query)都是线程自由的。
# Direct3D11 把资源创建和渲染功能分配到两个接口中。Map,Unmap,Begin,End和GetData由ID3D11DeviceContext实现,因为ID3D11Device严格定义了操作的顺序。ID3D11Resource 和 ID3D11Asynchronous也是线程自由的。
# ID3D11DeviceContext中的方法,除了哪些存在于ID3D11DeviceChild中的方法,都是非线程自由的。同时只能有一个线程调用哪些方法(如Draw,Copy,Map等等)。
# 总体上,线程自由可以最小化需要同步的对象。一个程序使用同步方法会直接影响程序的并行效率。
ID3D10Device 接口不是线程自由的。该接口实现了所有创建和uxuanran的功能(Direct3D9同样也是这样)。Map 和 Unmap由 继承ID3D10Resource的接口实现。Begin,End和GetData由继承了ID3D10Asynchronous的接口实现。
http://blog.csdn.net/pizi0475/article/details/7768597相关推荐
- https://blog.csdn.net/blmoistawinde/article/details/84329103
背景 很多场景需要考虑数据分布的相似度/距离:比如确定一个正态分布是否能够很好的描述一个群体的身高(正态分布生成的样本分布应当与实际的抽样分布接近),或者一个分类算法是否能够很好地区分样本的特 ...
- numpy的shape用法(转http://blog.csdn.net/by_study/article/details/67633593)
https://www.bbsmax.com/A/1O5E78b7z7/ https://www.cnblogs.com/lindaxin/p/8074921.html http://blog.csd ...
- 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)
权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可 ...
- http://blog.csdn.net/u011001723/article/details/456210272222
http://blog.csdn.net/u011001723/article/details/45621027
- http://blog.csdn.net/xingfuzhijianxia/article/details/6433918
http://blog.csdn.net/xingfuzhijianxia/article/details/6433918
- http://blog.csdn.net/luoshengyang/article/details/6651971
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6651971 在Android系统中,提供了独特 ...
- http://blog.csdn.net/lovejavaydj/article/details/6
2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/lovejavaydj/article/details/6202610 转载于:ht ...
- http://blog.csdn.net/churximi/article/details/61210129
http://blog.csdn.net/churximi/article/details/61210129http://blog.csdn.net/churximi/article/details/ ...
- http://blog.csdn.net/java2000_wl/article/details/8627874
http://blog.csdn.net/java2000_wl/article/details/8627874
- 数据采集之解析Mysql的binlog日志发送至Kafka实时消费(转:https://blog.csdn.net/liguohuabigdata/article/details/79472777)
本文采用Maxwell来实现实时解析mysql的binlog日志发送至kafka 1.开启mysql binlog 环境中mysql是docker容器,所以需要进入容器修改mysql配置.docker ...
最新文章
- JSON与JAVA数据的转换
- 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用。
- go float64 转int_深挖Go函数之深度解析(下):可变参数
- 基于verilog的万年历设计
- Linux中文件查找技术大全
- TensorFlow笔记(2) 常量与变量
- NVIDIA Parallel Nsight
- Mysql导入导出数据总结
- vi: 未找到命令_vi技巧和窍门:十个很棒的命令一定会给您的朋友留下深刻的印象...
- v4l2loopback -- 源码分析
- 利用R语言ggplot2包制作金字塔图,展示人口结构数据
- 网络链接错误,请检查配置后重试!
- 树莓派控制PCF8591 AD/DA模块
- 前端处理简单的XSS(跨站脚本攻击)防护
- C++ 两两交换链表中的节点
- Lucene 开发手册
- CCF-CSP 小中大 C语言
- 分布式 常见的容错机制
- 前端面试日记(7)网易有道
- 【ZHYP005】子涵优品开发日志
热门文章
- 伦敦时间现在几点_伦敦现在几点
- Forth 内存布局
- 速率bps(kbps、Mbps)和每秒字节传输B/s(KB/s、MB/s)的关系如下
- oracle 02085,【DBLINK】“ORA-02085: database link %s connects to %s”故障排查及处理策略两则...
- lighttp 配置php扩展包,Lighttpd配置
- 经典鸡兔同笼同类型问题
- DS1302的电子万年历_51单片机,年月日、星期、时分秒、农历和温度,带闹钟,全套资料
- 知名程序员云风辞职 意在重新思考未来
- OpenCV—python 角点特征检测之一(cornerHarris、Shi-Tomasi、FAST)
- 海外短视频月活1.5亿,欢聚时代拿稳全球短视频入场券?