D3D的两个主要的接口

  • Device,ID3D11Device。创建资源,Shader对象,状态对象,查询对象,等。以及检查硬件功能,调试函数。可以认为是资源的提供者。
  • Device Context,ID3D11DeviceContext。使用资源。绑定资源,Shader对象,状态对象等到流水线。以及控制计算流水器的执行。
    • Immedite context。立即模式,用于主渲染线程,也是服务GPU的主要接口
    • Deffered context。延迟模式,提供线程安全机制,用于异步线程模型。

创建Device和Context:

创建Device可以用 D3D11CreateDevice函数 或 D3D11CreateDeviceAndSwapChain函数。区别是后者还可以创建swap chain和返回context,所以优先用后者。

D3D11CreateDeviceAndSwapChain的参数用法如下:
HRESULT  D3D11CreateDeviceAndSwapChain(
__in IDXGIAdapter *pAdapter,
__in D3D_DRIVER_TYPE DriverType,
__in HMODULE Software,
__in UINT Flags,
__in const D3D_FEATURE_LEVEL *pFeatureLevels,
__in UINT FeatureLevels,
__in UINT SDKVersion,
__in const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
__out IDXGISwapChain **ppSwapChain,
__out ID3D11Device **ppDevice,
__out D3D_FEATURE_LEVEL *pFeatureLevel,
__out ID3D11DeviceContext **ppImmediateContext
;

*pAdapter: 指向显卡适配器,NULL则使用默认的显卡。


DriverType:指定驱动类型。值可以是:
  • D3D_DRIVER_TYPE_UNKNOWN,
  • D3D_DRIVER_TYPE_HARDWARE,一般用这个
  • D3D_DRIVER_TYPE_REFERNCE,用于软件实现的D3D
  • D3D_DRIVER_TYPE_NULL,用于测试
  • D3D_DRIVER_TYPE_SOFTWARE,自定义驱动,通常不用。
  • D3D_DRIVER_TYPE_WARP,支持使用多核CPU,但只能用于D3D 10.1。
software:如果DriverType选的不是software,这个参数就设置成NULL。


Flags:指定设备的特殊功能,可以是以下值的组合:
enum D3D11_CREATE_DEVICE_FLAG
    {
        D3D11_CREATE_DEVICE_SINGLETHREADED= 0x1, //必须是单线程的。如果不设置就是多线程的。
        D3D11_CREATE_DEVICE_DEBUG= 0x2,  //实现ID3D11Debug接口。
        D3D11_CREATE_DEVICE_SWITCH_TO_REF= 0x4,  //D3D11不支持此选项。
        D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS= 0x8, //禁止多线程优化。
        D3D11_CREATE_DEVICE_BGRA_SUPPORT= 0x20,  //用于Direct2D
        D3D11_CREATE_DEVICE_DEBUGGABLE= 0x40,
        D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY= 0x80,
        D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x100,
        D3D11_CREATE_DEVICE_VIDEO_SUPPORT= 0x800
    } D3D11_CREATE_DEVICE_FLAG;

pFeatureLevels,指定要支持的D3D的功能级别。可以是以下值的组合:
  • D3D_FEATURE_LEVEL_11_1,
  • D3D_FEATURE_LEVEL_11_0,
  • D3D_FEATURE_LEVEL_10_1,
  • D3D_FEATURE_LEVEL_10_0,
  • D3D_FEATURE_LEVEL_9_3,
  • D3D_FEATURE_LEVEL_9_2,
  • D3D_FEATURE_LEVEL_9_1
SDKVersion,在D3D11中就使用 D3D11_SDK_VERSION


pSwapChainDesc,swap chain是DXGI创建的对象。此指针指向swap chain的描述,主要是swap chain的初始化属性。需要定义一个DXGI_SWAP_CHAIN_DESC结构体。


ppSwapChain,返回SwapChain。

ppDevice,返回Device。

pFeatureLevel,返回FeatureLevel。

ppImmediteContext,返回ImmediteContext。

Direct3D 11的Device接口和DeviceContext接口的更多相关文章

  1. JQuery1.11版本对prop和attr接口的含义分离导致问题分析

    问题背景 实验中, 在jquery1.7版本, attr("value")  和 val() 接口获取 input 控件的值, 都是一致的, 都是当前控件值. 但是 jquery1 ...

  2. 【译】Import Changes from Direct3D 11 to Direct3D 12

    译者:林公子 出处:木木的二进制人生 转载请注明作者和出处,谢谢! 这是微软公布的Direct3D 12文档的其中一篇,此翻译留作学习记录备忘,水平有限,错漏难免,还望海涵. 原文链接是https:/ ...

  3. Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...

  4. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  5. Servlet--HttpSession接口,HttpSessionContext接口,Cookie类

    HttpSession接口 定义 public interface HttpSession 这个接口被 Servlet 引擎用来实现在 HTTP 客户端和 HTTP 会话两者的关联.这种关联可能在多外 ...

  6. Direct3D 11 Tutorial 1: Basics_Direct3D 11 教程1:基础

    Github-LearnDirectX-DX3D11 tutorial01 概述 在这第一篇教程中,我们将通过介绍创建最小Direct3D应用程序所必需的元素.每一个Direct3D应用程序必需拥有这 ...

  7. Spring InitializingBean 接口以及Aware接口实现的原理

    关于Spring InitializingBean 接口以及Aware接口实现的其实都在 第11步中: finishBeanFactoryInitialization() 方法中完成了3部分的内容: ...

  8. 部分还款-还款试算接口与还款接口-python

    一.还款试算.还款接口, 1.只传入参数loan_Code 2.还款接口参数化以下: "loanCode": loanCode1,"orderId": orde ...

  9. Java8函数式接口/Lambda表达式/接口默认方法/接口静态方法/接口冲突方法重写/lambda表达式指定泛型类型等

    一:函数式接口 1.函数式接口的概念就是此接口必须有且只能有一个抽象方法,可以通过@FunctionalInterface来显示规定(类似@Override),但是没有此注解的但是只有一个抽象方法的接 ...

随机推荐

  1. 字典树-百度之星-Xor Sum

    Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ...

  2. Android自定义控件(三)——有弹性的ListView

    上一次我们试验了有弹性的ScrollView.详情 这一次,我们来试验有弹性的ScrollView. 国际惯例,效果图: 主要代码: import android.content.Context; i ...

  3. JavaScript学习笔记:检测数组方法

    检查数组的方法 很多时候我们需要对JavaScript中数据类型(Function.String.Number.Undefined.Boolean和Object)做判断.在JavaScript中提供了 ...

  4. C# 大小写转换

    全部大写: string upper = str.ToUpper() 全部小写: string lower = str.ToLower(); str是需要转换的字符.

  5. 如何让网页打开就运行JS代码,不用onclick

    打开网页直接运行是要调用window.onload( )函数: <html>    <head>    </head>    <body>    < ...

  6. C#计算当前日期为一年中的第几周

    方法一: private   int   WeekOfYear(string   date) { DateTime   curDay   =   Convert.ToDateTime(date); i ...

  7. 将HTML格式的String转化为HTMLElement

    代码如下: <meta charset="UTF-8"> <title>Insert title here</title> </head& ...

  8. MSSQL-资源地址

    1.SQL-SERVER客户端管理工具.下载地址 https://msdn.microsoft.com/en-us/library/mt238290.aspx?f=255&MSPPError= ...

  9. C语言变量的存储类别

    我们知道,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量. 从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式. 静态存储方式:是指在程序运行期 ...

  10. Silverlight js html 相互调用

    1.sl调用js 比如我们在页面中定义一个js函数: <script type="text/javascript">        function fnTest(ms ...