• Direct3D 11的Device接口和DeviceContext接口


    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。
  • 相关阅读:
    .Net中通过反射技术的应用插件程序的开发入门
    html超链接button
    WCF 跨域 Http绑定
    在ASP.NET MVC中修改默认代码生成/支架模板
    使用Lambda表达式重构委托
    使用公用表表达式(CTE)简化嵌套SQL
    WCF同域动态绑定服务地址
    WCF 跨域TCP绑定
    Silverlight 基础收集
    WCF服务控制台托管方法(不使用配置文件)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3220199.html
Copyright © 2020-2023  润新知