微软全新的图形绘制构架从Dx10开始抛弃了传统流水线,Shader时代终于来临了!~
昨天下载了Dx11最新的SDK库 2010-6-10版本,开始研究dx11的例子。
编程环境:
Win7 旗舰版
Vs_2010_CN 旗舰版
Dx SDK 2010_6_10
ThinkPad T61p 8889AU5 T9300 2G
《Tutorial 01: Direct3D 11 Basics》这个例题代码内容不多,跟Dx9时代的第一个例题差不多,不过里面出现了几个全新的接口,还是值得我们关注的。
ID3D11Device* g_pd3dDevice = NULL;
ID3D11DeviceContext* g_pImmediateContext = NULL;
IDXGISwapChain* g_pSwapChain = NULL;
ID3D11RenderTargetView* g_pRenderTargetView = NULL;
原来的dx9时代,渲染,载入,状态等所有的工作都有Device完成,在DX11里面则出现了分工,现在的Device用来画基于原始数据的渲染,创建资源,与系统变量协同工作,创建shader 。出现了一个ID3D11DeviceContext,它取代了以前Device接口所有与渲染相关的功能,有两个类型:immediate和deferred,前者和现在的效果一样,收到渲染指令就立即执行,而后者则会将命令缓存起来,由用户决定何时执行。IDXGISwapChain* 实现用一个和多个surface在输出之前储存渲染数据
其中重要的函数就是:
D3D11CreateDeviceAndSwapChain( NULL, g_driverType, NULL, createDeviceFlags, featureLevels, numFeatureLevels,
D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext );
函数原型是:
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 [in]
- IDXGIAdapter
-
A pointer to the video adapter to use when creating a device. Pass NULL to use the default adapter, which is the first adapter enumerated by IDXGIFactory1::EnumAdapters.
Note Do not mix the use of DXGI 1.0 (IDXGIFactory) and DXGI 1.1 (IDXGIFactory1) in an application. Use IDXGIFactory or IDXGIFactory1, but not both in an application.
DriverType [in]
- D3D_DRIVER_TYPE
-
The D3D_DRIVER_TYPE, which represents the driver type to create.
Software [in]
- HMODULE
-
A handle to a DLL that implements a software rasterizer. If DriverType is D3D_DRIVER_TYPE_SOFTWARE, Software must not be NULL. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle. The value should be non-NULL when D3D_DRIVER_TYPE is D3D_DRIVER_TYPE_SOFTWARE and NULL otherwise.
Flags [in]
- UINT
-
The runtime layers to enable (see D3D11_CREATE_DEVICE_FLAG); values can be bitwise OR'd together.
pFeatureLevels [in]
- D3D_FEATURE_LEVEL
-
A pointer to an array of D3D_FEATURE_LEVELs, which determine the order of feature levels to attempt to create. Use default parameters to get the greatest feature level available. If pFeatureLevels is set to NULL, the following array of feature levels will be used:
{
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,
};
FeatureLevels [in]
- UINT
-
The number of elements in pFeatureLevels.
SDKVersion [in]
- UINT
-
The SDK version; use D3D11_SDK_VERSION.
pSwapChainDesc [in]
- DXGI_SWAP_CHAIN_DESC
-
A pointer to a swap chain description (see DXGI_SWAP_CHAIN_DESC) that contains initialization parameters for the swap chain.
ppSwapChain [out]
- IDXGISwapChain
-
Returns the address of a pointer to the IDXGISwapChain object that represents the swap chain used for rendering.
ppDevice [out]
- ID3D11Device
-
Returns the address of a pointer to an ID3D11Device object that represents the device created. Supply NULL as an input to return the highest supported feature level in pFeatureLevel.
pFeatureLevel [out]
- D3D_FEATURE_LEVEL
-
Returns a pointer to a D3D_FEATURE_LEVEL, which represents the first element in an array of feature levels supported by the device.
ppImmediateContext [out]
- ID3D11DeviceContext
-
Returns the address of a pointer to an ID3D11DeviceContext object that represents the device context.