Direc3D设备对象
来源:互联网 发布:淘宝太坑了女主角视频 编辑:程序博客网 时间:2024/05/19 06:36
1.创建Direct3D设备对象
在创建Direct3D设备对象之前,先需要初始化交换链DXGI_SWAP_CHAIN_DESC。
typedef struct DXGI_SWAP_CHAIN_DESC {
DXGI_MODE_DESC BufferDesc;
DXGI_SAMPLE_DESC SampleDesc;
DXGI_USAGE BufferUsage;
UINT BufferCount;
HWND OutputWindow;
BOOL Windowed;
DXGI_SWAP_EFFECT SwapEffect;
UINT Flags;
} DXGI_SWAP_CHAIN_DESC;
其中:
BufferDesc指定后台缓冲区(BackBuffer)的显示模式。该成员是DXGI_MODE_DESC类型,DXGI_MODE_DESC类型定义如下:
typedef struct DXGI_MODE_DESC {
UINT Width;
UINT Height;
DXGI_RATIONAL RefreshRate;
DXGI_FORMAT Format;
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
DXGI_MODE_SCALING Scaling;
} DXGI_MODE_DESC;
Width指定后台缓冲区的宽度(以像素为单位)。如果图形以窗口方式显示并且该变量被设置为0,则系统自动使用显示窗口客户区的宽度作为后台缓冲区的宽度。
Height指定后台缓冲区的高度(以像素为单位)。如果图形以窗口方式显示并且该变量被设置为0,则系统自动使用显示窗口客户区的宽度作为后台缓冲区的高度。
RefreshRate指定显示适配器刷新屏幕的速率。该成员是DXGI_RATIONAL 类型,DXGI_RATIONAL 类型定义如下:
typedef struct DXGI_RATIONAL {
UINT Numerator; // 分子
UINT Denominator; // 分母
} DXGI_RATIONAL;
Format指定后台缓冲区的像素格式,类似于屏幕显示的像素格式。该成员是DXGI_FORMAT枚举类型,DXGI_FORMAT枚举类型数量众多,具体看MSDN。一般指定DXGI_FORMAT_B8G8R8A8_UNORM 。
ScanlineOrdering描述渲染器的绘图模式。该成员是DXGI_MODE_SCANLINE_ORDER枚举类型,DXGI_MODE_SCANLINE_ORDER枚举类型定义如下:
typedef enum DXGI_MODE_SCANLINE_ORDER {
DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED = 0,
DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE = 1,
DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST = 2,
DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST = 3
} DXGI_MODE_SCANLINE_ORDER;
Scaling描述扩展模式。该成员是DXGI_MODE_SCALING枚举类型,DXGI_MODE_SCALING枚举类型定义如下:
typedef enum DXGI_MODE_SCALING {
DXGI_MODE_SCALING_UNSPECIFIED =0,
DXGI_MODE_SCALING_CENTERED =1,
DXGI_MODE_SCALING_STRETCHED =2
} DXGI_MODE_SCALING;
SampleDesc指定多重采样,用于图形反锯齿。该成员是DXGI_SAMPLE_DESC类型,DXGI_SAMPLE_DESC类型定义如下:
typedef struct DXGI_SAMPLE_DESC {
UINT Count; // 每像素点的数量。
UINT Quality; // 图像指令等级。
} DXGI_SAMPLE_DESC;
BufferUsage枚举缓冲区的用法和CPU访问后台缓冲区的选项。后台缓冲区用于shader input或者render-target output阶段。有多个宏,具体看MSDN。一般使用DXGI_USAGE_RENDER_TARGET_OUTPUT。
BufferCount指定交换链中缓冲区的数量。
OutputWindow指定图形绘制窗口。不能为NULL。
Windowed标识图形以窗口方式还是全屏方式显示。如果Windowed设置为TRUE,图形以窗口显示;Windowed设置为FALSE,图形以全屏方式显示。
SwapEffect指定系统如何将后台缓冲区的内容复制到前台缓冲区(FrontBuffer),从而在显示器屏幕上显示。该成员是DXGI_SWAP_EFFECT枚举类型,DXGI_SWAP_EFFECT枚举类型定义如下:
typedef enum DXGI_SWAP_EFFECT {
DXGI_SWAP_EFFECT_DISCARD = 0,
DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3
} DXGI_SWAP_EFFECT;
DXGI_SWAP_EFFECT_DISCARD标识使用Bitblt模式,后台缓存复制到前台缓存后,清楚后台缓存内容。
DXGI_SWAP_EFFECT_SEQUENTIAL标识使用Bitblt模式,后台缓存复制到前台缓存后,保留后台缓存原内容不变。
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL标识翻转演示模式,后台缓存复制到前台缓存后,保留后台缓存原内容不变。
Flags描述交换链的选项。该成员是DXGI_SWAP_CHAIN_FLAG枚举类型,DXGI_SWAP_CHAIN_FLAG枚举类型定义如下:
typedef enum DXGI_SWAP_CHAIN_FLAG {
DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1,
DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2,
DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4,
DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT = 8,
DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER = 16,
DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY = 32
} DXGI_SWAP_CHAIN_FLAG;
下面通过Direct3D的接口函数D3D11CreateDeviceAndSwapChain()来创建Direct设备对象。
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指定显卡序号,表示使用哪块显卡创建Direct3D设备对象。设置为NULL使用默认显卡。
DriverType指定Direct3D设备类型。该成员是D3D_DRIVER_TYPE枚举类型,D3D_DRIVER_TYPE枚举类型定义如下:
typedef enum D3D_DRIVER_TYPE {
D3D_DRIVER_TYPE_UNKNOWN = 0,
D3D_DRIVER_TYPE_HARDWARE = (D3D_DRIVER_TYPE_UNKNOWN + 1 ),
D3D_DRIVER_TYPE_REFERENCE = (D3D_DRIVER_TYPE_HARDWARE + 1 ),
D3D_DRIVER_TYPE_NULL = (D3D_DRIVER_TYPE_REFERENCE + 1 ),
D3D_DRIVER_TYPE_SOFTWARE = (D3D_DRIVER_TYPE_NULL + 1 ),
D3D_DRIVER_TYPE_WARP = (D3D_DRIVER_TYPE_SOFTWARE + 1 )
} D3D_DRIVER_TYPE;
Software软件光栅器的DLL句柄,如果DriverType是D3D_DRIVER_TYPE_SOFTWARE,此值不能为NULL,否则设置为NULL。
Flags运行层开关。该成员是D3D11_CREATE_DEVICE_FLAG枚举类型,D3D11_CREATE_DEVICE_FLAG枚举类型定义如下:
typedef enum D3D11_CREATE_DEVICE_FLAG {
D3D11_CREATE_DEVICE_SINGLETHREADED = 0x1,
D3D11_CREATE_DEVICE_DEBUG =0x2,
D3D11_CREATE_DEVICE_SWITCH_TO_REF = 0x4,
D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8,
D3D11_CREATE_DEVICE_BGRA_SUPPORT = 0x20,
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选择特征层。
typedef enum D3D_FEATURE_LEVEL {
D3D_FEATURE_LEVEL_9_1 = 0x9100,
D3D_FEATURE_LEVEL_9_2 = 0x9200,
D3D_FEATURE_LEVEL_9_3 = 0x9300,
D3D_FEATURE_LEVEL_10_0 = 0xa000,
D3D_FEATURE_LEVEL_10_1 = 0xa100,
D3D_FEATURE_LEVEL_11_0 = 0xb000,
D3D_FEATURE_LEVEL_11_1 = 0xb100
} D3D_FEATURE_LEVEL;
FeatureLevels特征层数量。
SDKVersionSDK版本,使用 D3D11_SDK_VERSION。
pSwapChainDesc交换链DXGI_SWAP_CHAIN_DESC信息。
ppSwapChain返回指向交换链的指针。
ppDevice返回D3D设备对象的指针地址。
pFeatureLevel返回特征层的指针。
ppImmediateContex返回设备上下文的指针地址。
- Direc3D设备对象
- Direc3D设备对象
- 设备对象
- 设备对象(DEVICE_OBJECT)-----------------设备名称
- 驱动对象-设备对象-设备栈
- 物理设备对象和功能设备对象
- 驱动对象与设备对象
- 驱动对象和设备对象
- 驱动对象和设备对象
- 驱动对象与设备对象
- 设备对象(DEVICE_OBJECT)
- 设备对象(DEVICE_OBJECT)
- 设备对象(DEVICE_OBJECT)
- 设备对象结构
- 设备对象的绑定
- 生成设备对象
- 理解设备对象
- 设备对象(DEVICE_OBJECT)
- 惊爆眼球!视频解读游戏中DX9与DX11画质差别
- hr数据库
- i++与++i经典分析
- Direct3D 11 API 改编自Intro_to_Direct3D10
- Node(2) First Code
- Direc3D设备对象
- Direct3D 11设备介绍
- DX11多线程学习与思考
- "http://android.git.kernel.org/repo 打不开"问题解决
- HR代码
- 微博 0auth2.0 验证
- 2012 -7-25 周三 计划
- Android控制台命令am简介
- 2012.7.25计划并7.24总结