Device类把真实的图形卡从具体的硬件中抽象出来,在类中定义一组通用函数,这些函数将直接操作图形卡硬件。
Device类具有3个构造函数,这里介绍其中一个:
public Device(int adapter, DeviceType deviceType, Control renderWindow, CreateFlags bahaviorFlags, PresentParameters presentationParameters);
参数简析:
adapter
表示要使用哪个图形卡,默认的图形卡编号为0。
deviceType
表示要创建哪一种类型的设备。
DeviceType.Hardware,创建直接控制图形卡硬件的设备(要求图形卡支持DirectX)
DeviceType.Reference,设备类型为参考光栅器(reference rasterizer),软件模拟,运行速度慢
DeviceType.Software,自定义软件光栅器
renderWindow
表示在哪个窗口显示图形
behaviorFlags
CreateFlags.SoftwareVertexProcessing,3D图形所有顶点计算用软件处理
CreateFlags.HardwareVertexProcessing,所有顶点计算用GPU处理
CreateFlags.MixedVertexProcessing,根据最佳效果原则,进行选择
以上互斥,只能选其一,可以与以下参数组合
FPU_Preserve,使用双精度浮点数计算,速度减慢
MultiThreaded,使用多线程
PureDevice,要求所有计算尽可能使用GPU,只能和CreateFlags.HardwareVertexProcessing
PresentParameters类常用属性:
Windowed,false为全屏模式,true为窗口模式,使用Form类创建的Direct 3D程序,只能工作于窗口模式。
SwapEffect,用于控制后备缓存区和屏幕显示区交换的方式
SwapEffect.Flip:在图形卡的显存中建立多个和屏幕显示区同样大小的后备缓存区,修改了后备缓存区的数据后,指定其为屏幕显示区,就可以显示,只使用全屏模式
SwapEffect.Copy:只有一个后备缓存区,为了显示,需要复制后备缓存区数据到屏幕显示区
SwapEffect.Discard:与SwapEffect.Copy基本相同,但新帧到来后,后备缓存区中未处理完的数据将被丢弃
BackBufferCount,后备缓存的数量(1到3)
BackBufferFormat,记录颜色的格式
BackBufferWidth,每行单元数
BackBufferHeight,总行数
AutoDepthStencilFormat,指定深度缓存区单元的位数及格式,如DepthFormat.D16
EnableAutoDepthStencil,设置是否允许自动使用深度测试
DeviceWindowHandle,使用的窗口句柄,取值为null表示使用当前激活窗口