DX9的一些方法介绍(IDirect3D9)
在前边的源码中,引用了一些DX9的方法,我这里做了一个笔记,大家可以看看。
1,IDirect3DDevice9::SetTexture 方法:将纹理分配给设备的阶段。
C++源码调用:
HRESULT SetTexture(
[in] DWORD Stage,
[in] IDirect3DBaseTexture9 *pTexture
);
参数说明:
Stage:基于零的采样器编号。 纹理绑定到采样器;采样器定义采样状态,例如筛选模式和地址包装模式。
pTexture:指向 IDirect3DBaseTexture9 接口的指针,表示要设置的纹理。
在VB6中调用如下:
CWD3DDevice9.SetTexture 0, Nothing
2,IDirect3DDevice9::SetFVF:设置当前顶点流声明。
C++语法源码:
HRESULT SetFVF(
[in] DWORD FVF
);
参数说明:FVF,包含固定函数顶点类型的DWORD。有关更多信息,请参见D3DFVF。
D3DFVF:灵活顶点格式常数(FVF代码)用于描述将由固定函数管道处理的单个数据流中交错的顶点的内容。
C++源码:定义自定义顶点类型和FVF代码。
struct LVertex
{
FLOAT x, y, z;
D3DCOLOR specular, diffuse;
FLOAT tu, tv;
};
const DWORD VertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE |
D3DFVF_SPECULAR | D3DFVF_TEX1 );
在冷风(CoolWind2D)引擎中D3DFVF定义如下:
Public Type D2DVector '2D顶点类
X As Single
Y As Single
Z As Single
Rhw As Single
Color As CWColorConstants
' Specular As Long
' Tu As Single
' Tv As Single
End Type
3,IDirect3DDevice9::DrawPrimitiveUP:将用户内存指针指定的数据呈现为指定类型的几何图元序列。
C++源码:
HRESULT DrawPrimitiveUP(
[in] D3DPRIMITIVETYPE PrimitiveType,
[in] UINT PrimitiveCount,
[in] const void *pVertexStreamZeroData,
[in] UINT VertexStreamZeroStride
);
参数说明:
PrimitiveType:类型:D3DPRIMITIVETYPE,D3DPRIMITIVETYPE枚举类型的成员,描述要呈现的原语的类型。
D3DPRIMITIVETYPE枚举类型C++原型如下:
typedef enum D3DPRIMITIVETYPE {
D3DPT_POINTLIST = 1,//D3DPT_点列表,将顶点渲染为孤立点的集合。索引基元不支持此值。
D3DPT_LINELIST = 2,//D3DPT_管线,将顶点渲染为孤立直线段的列表。
D3DPT_LINESTRIP = 3,//D3DPT_管线跳闸,将顶点渲染为单个多段线。
D3DPT_TRIANGLELIST = 4,//D3DPT_三角列表,将指定顶点渲染为一系列孤立三角形。每组三个顶点定义一个单独的三角形。背面消隐受当前缠绕顺序渲染状态的影响。
D3DPT_TRIANGLESTRIP = 5,//D3DPT_三角行程,将顶点渲染为三角形条带。背面消隐标志在偶数三角形上自动翻转。
D3DPT_TRIANGLEFAN = 6,//D3DPT_三角风扇,将顶点渲染为三角形扇形。
D3DPT_FORCE_DWORD = 0x7fffffff//强制此枚举编译为32位大小。如果没有该值,某些编译器将允许此枚举编译为32位以外的大小。不使用此值。
} D3DPRIMITIVETYPE, *LPD3DPRIMITIVETYPE;
PrimitiveCount:要渲染的基元数。允许的最大基元数是通过检查D3DCAPS9(表示通过Direct3D对象公开的硬件功能。)结构的MaxPrimitiveCount成员来确定的。
pVertexStreamZeroData:指向顶点数据的用户内存指针。
VertexStreamZeroStride:每个顶点的数据字节数。此值不能为0。
在VB6中,对此使用方法如下:
CWD3DDevice9.DrawPrimitiveUP D3DPT_POINTLIST, 1, Vector2D, LenB(Vector2D)
4,IDirect3D9::GetDeviceCaps:检索有关设备的设备特定信息。
C++调用源码:
HRESULT GetDeviceCaps(
[in] UINT Adapter,
[in] D3DDEVTYPE DeviceType,
[out] D3DCAPS9 *pCaps
);
参数说明:
Adapter:适配器,表示显示适配器的序数。D3DADAPTER_DEFAULT始终是主显示适配器。
D3DDEVTYPE DeviceType:D3DDEVTYPE枚举类型的成员。表示设备类型。
D3DCAPS9:指向D3DCAPS9结构的指针,该结构将填充描述设备功能的信息。
在VB中的 调用如下:
CWD3D9.GetDeviceCaps 0, D3DDEVTYPE_HAL, CWD3Dc9
5,IDirect3D9::CreateDevice:创建表示显示适配器的设备。
C++调用源码:
HRESULT CreateDevice(
[in] UINT Adapter,
[in] D3DDEVTYPE DeviceType,
[in] HWND hFocusWindow,
[in] DWORD BehaviorFlags,
[in, out] D3DPRESENT_PARAMETERS *pPresentationParameters,
[out, retval] IDirect3DDevice9 **ppReturnedDeviceInterface
);
参数说明:
Adapter:表示显示适配器的序数。D3DADAPTER_DEFAULT始终是主显示适配器。
DeviceType:表示所需设备类型的D3DDEVTYPE枚举类型的成员。如果所需的设备类型不可用,该方法将失败。
hFocusWindow:当应用程序从前台模式切换到后台模式时,焦点窗口会向Direct3D发出警报。参见备注。对于全屏模式,指定的窗口必须是顶级窗口。对于窗口模式,仅当pPresentationParameters的hDeviceWindow成员设置为有效的非NULL值时,此参数才可能为NULL。
BehaviorFlags:控制设备创建的一个或多个选项的组合。有关更多信息,请参阅D3DCREATE。
pPresentationParameters:指向D3DPRESENT_PARAMETERS结构的指针,描述要创建的设备的表示参数。如果BehaviorFlags指定D3DCREATE_ADAPTERGROUP_DEVICE,则pPresentationParameters是一个数组。无论存在多少个头,都只会自动创建一个深度/模具表面。
ppReturnedDeviceInterface:指向返回的IDirect3DDevice9接口的指针的地址,该接口表示创建的设备。
在VB6中调用如下:
Set CWD3DDevice9 = CWD3D9.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, CWHwnd, JSorH, CWDpp9)
6,IDirect3D9::CheckDeviceMultiSampleType:确定此设备上是否提供多重采样技术。
c++调用源码:
HRESULT CheckDeviceMultiSampleType(
[in] UINT Adapter,
[in] D3DDEVTYPE DeviceType,
[in] D3DFORMAT SurfaceFormat,
[in] BOOL Windowed,
[in] D3DMULTISAMPLE_TYPE MultiSampleType,
[out] DWORD *pQualityLevels
);
参数说明:
Adapter:表示要查询的显示适配器的序号。D3DADAPTER_DEFAULT始终是主显示适配器。当此值等于或超过系统中显示适配器的数量时,此方法返回FALSE。参见备注。
DeviceType:表示所需设备类型的D3DDEVTYPE枚举类型的成员。如果所需的设备类型不可用,该方法将失败。
SurfaceFormat:D3DFORMAT枚举类型的成员,指定要进行多采样的曲面的格式。有关更多信息,请参阅备注。
Windowed:窗口,布尔值。指定TRUE查询窗口多采样,指定FALSE查询全屏多采样。
MultiSampleType:D3DMULTISAMPLE_TYPE枚举类型的成员,标识要测试的多采样技术。
pQualityLevels:pQualityLevels返回给定样本类型可用的特定于设备的采样变量数。例如,如果返回值为3,则在创建具有给定样本计数的资源时,可以使用质量级别0、1和2。这些质量等级的含义由设备制造商定义,无法通过D3D查询。例如,对于特定设备,固定样本数下的不同质量级别可能表示样本位置的不同空间布局或不同的解析方法。如果不需要返回质量级别,则可以为NULL。
在VB6中调用如下:
' CWD3D9.CheckDeviceMultiSampleType 0, D3DDEVTYPE_HAL, D3DFMT_A8R8G8B8, 1, i
' CWD3D9.CheckDeviceMultiSampleType 0, D3DDEVTYPE_HAL, D3DFMT_A8R8G8B8, 0, i