1.CreateVertexBuffer创建一个顶点缓存
Device->CreateVertexBuffer(
3 * sizeof(Vertex), // size in bytes
D3DUSAGE_WRITEONLY, // flags
Vertex::FVF, // vertex format
D3DPOOL_MANAGED, // managed memory pool
&Triangle, // return create vertex buffer
0); // not used - set to 0
HRESULT CreateVertexBuffer(
[in] UINT Length,// 至少大于一个顶点的字节数,非FVF Buffer用长度是不合理的。
[in] DWORD Usage,// 必须和CreateDevice的behavior flag匹配,比如软件顶点运算的不能放置到VM中
//FVF表明内存布局。非FVF的顶点数据可以用作单次扫描中使用多通道渲染或者多重纹理渲染,
// 一个顶点缓存记录几何s信息,一个顶点缓存记录纹理坐标信息,渲染期间单次扫描从两个缓存交错的取得数据,
// 这种情况下,如果FVF格式再使用(应该是这两个缓存),那么速度和内存都会受到一些损失,损失依赖于使用的策略。
[in] DWORD FVF,
[in] D3DPOOL Pool,
[out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
[in] HANDLE *pSharedHandle // 保留,这个标记在windows vista中的Direct3D9中用于共享资源。
);
2.SetTransform设置一个设备对象空间转换相关的状态(传入一个状态和矩阵,但是转换是在固定管线中执行的)。
Device->SetTransform(D3DTS_PROJECTION, &proj);
HRESULT SetTransform(
[in] D3DTRANSFORMSTATETYPE State,
[in] const D3DMATRIX *pMatrix
);
3.SetRenderState设置渲染状态,和状态对应的枚举类型(渲染状态去掉RS_)的值
Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
HRESULT SetRenderState(
[in] D3DRENDERSTATETYPE State,
[in] DWORD Value
);
4.BeginScene()开始在后台缓存区渲染图形,场景渲染开始的标记
任何连续的内存在渲染执行之前需要Present提交到runtime的,都需要BegineScene/EndScene对括起来
(IDirect3DSwapChain9::Present也一样).BegineScene/EndScene对只能并行使用,不能串行使用。
多个BegineScene/EndScene对并行是会对性能有损失的,尽量少用。
5.EndScene()结束在后台缓存区渲染图形 ,这个函数返回,那么资源已经由runtime/driver管理进行排队渲染了,这个函数是非同步的,因此这个函数返回不能保证已经渲染
完了。
6.SetStreamSource绑定一个顶点缓存到一个设备数据流。
Device->SetStreamSource(0, Triangle, 0, sizeof(Vertex));
HRESULT SetStreamSource(
[in] UINT StreamNumber,//指定一个数据流,从[0, streamNum-1].
[in] IDirect3DVertexBuffer9 *pStreamData, // 绑定到设备数据流的顶点缓存指针
[in] UINT OffsetInBytes,// 输入的顶点缓存的偏移,从0开始是输入整个缓存
[in] UINT Stride// 组件的字节跨度,一般是顶点的字节数(特别是FVF vertex shader中),declaration的时候
// 必须大于或者等于stream size. 如果顶点缓存被渲染多次的时跨度要用0表示,告诉runtime不要增长顶点缓存偏移。
);
7.SetFVF设置当前的顶点流声明
Device->SetFVF(Vertex::FVF);
IDirect3DDevice9::SetFVF to use the fixed function pipeline指明用固定功能渲染管道。
IDirect3DDevice9::SetVertexDeclaration可以指明用顶点着色器。
8.DrawPrimitive渲染一个没有索引编制的序列,在数据输入流SetStreamSource中指定的类型的基础几何数据。
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
HRESULT DrawPrimitive(
[in] D3DPRIMITIVETYPE PrimitiveType, // 基础图元的类型D3DPRIMITIVETYPE
[in] UINT StartVertex, // 渲染开始的顶点下标
[in] UINT PrimitiveCount // 指定图元类型的个数(和图元类型相关),最大个数需要检测D3DCAPS0支持.
);
9.IDirect3DVertexBuffer9 Lock锁定顶点缓存区域和获取顶点缓存的内存指针
IDirect3DVertexBuffer9* Triangle = CreateVertexBuffer(xxx);
Triangle->Lock(0, 0, (void**)&vertices, 0);
HRESULT Lock(
[in] UINT OffsetToLock, // 锁定的起始位置,0是最开始位置
[in] UINT SizeToLock, // 锁定的大小,0是全部
[out] VOID **ppbData, // 顶点缓存内存指针
[in] DWORD Flags // D3DLOCK 0/1个或者多个组合
);
UnLock()
Unlocks vertex data.
Device->CreateVertexBuffer(
3 * sizeof(Vertex), // size in bytes
D3DUSAGE_WRITEONLY, // flags
Vertex::FVF, // vertex format
D3DPOOL_MANAGED, // managed memory pool
&Triangle, // return create vertex buffer
0); // not used - set to 0
HRESULT CreateVertexBuffer(
[in] UINT Length,// 至少大于一个顶点的字节数,非FVF Buffer用长度是不合理的。
[in] DWORD Usage,// 必须和CreateDevice的behavior flag匹配,比如软件顶点运算的不能放置到VM中
//FVF表明内存布局。非FVF的顶点数据可以用作单次扫描中使用多通道渲染或者多重纹理渲染,
// 一个顶点缓存记录几何s信息,一个顶点缓存记录纹理坐标信息,渲染期间单次扫描从两个缓存交错的取得数据,
// 这种情况下,如果FVF格式再使用(应该是这两个缓存),那么速度和内存都会受到一些损失,损失依赖于使用的策略。
[in] DWORD FVF,
[in] D3DPOOL Pool,
[out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
[in] HANDLE *pSharedHandle // 保留,这个标记在windows vista中的Direct3D9中用于共享资源。
);
2.SetTransform设置一个设备对象空间转换相关的状态(传入一个状态和矩阵,但是转换是在固定管线中执行的)。
Device->SetTransform(D3DTS_PROJECTION, &proj);
HRESULT SetTransform(
[in] D3DTRANSFORMSTATETYPE State,
[in] const D3DMATRIX *pMatrix
);
3.SetRenderState设置渲染状态,和状态对应的枚举类型(渲染状态去掉RS_)的值
Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
HRESULT SetRenderState(
[in] D3DRENDERSTATETYPE State,
[in] DWORD Value
);
4.BeginScene()开始在后台缓存区渲染图形,场景渲染开始的标记
任何连续的内存在渲染执行之前需要Present提交到runtime的,都需要BegineScene/EndScene对括起来
(IDirect3DSwapChain9::Present也一样).BegineScene/EndScene对只能并行使用,不能串行使用。
多个BegineScene/EndScene对并行是会对性能有损失的,尽量少用。
5.EndScene()结束在后台缓存区渲染图形 ,这个函数返回,那么资源已经由runtime/driver管理进行排队渲染了,这个函数是非同步的,因此这个函数返回不能保证已经渲染
完了。
6.SetStreamSource绑定一个顶点缓存到一个设备数据流。
Device->SetStreamSource(0, Triangle, 0, sizeof(Vertex));
HRESULT SetStreamSource(
[in] UINT StreamNumber,//指定一个数据流,从[0, streamNum-1].
[in] IDirect3DVertexBuffer9 *pStreamData, // 绑定到设备数据流的顶点缓存指针
[in] UINT OffsetInBytes,// 输入的顶点缓存的偏移,从0开始是输入整个缓存
[in] UINT Stride// 组件的字节跨度,一般是顶点的字节数(特别是FVF vertex shader中),declaration的时候
// 必须大于或者等于stream size. 如果顶点缓存被渲染多次的时跨度要用0表示,告诉runtime不要增长顶点缓存偏移。
);
7.SetFVF设置当前的顶点流声明
Device->SetFVF(Vertex::FVF);
IDirect3DDevice9::SetFVF to use the fixed function pipeline指明用固定功能渲染管道。
IDirect3DDevice9::SetVertexDeclaration可以指明用顶点着色器。
8.DrawPrimitive渲染一个没有索引编制的序列,在数据输入流SetStreamSource中指定的类型的基础几何数据。
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
HRESULT DrawPrimitive(
[in] D3DPRIMITIVETYPE PrimitiveType, // 基础图元的类型D3DPRIMITIVETYPE
[in] UINT StartVertex, // 渲染开始的顶点下标
[in] UINT PrimitiveCount // 指定图元类型的个数(和图元类型相关),最大个数需要检测D3DCAPS0支持.
);
9.IDirect3DVertexBuffer9 Lock锁定顶点缓存区域和获取顶点缓存的内存指针
IDirect3DVertexBuffer9* Triangle = CreateVertexBuffer(xxx);
Triangle->Lock(0, 0, (void**)&vertices, 0);
HRESULT Lock(
[in] UINT OffsetToLock, // 锁定的起始位置,0是最开始位置
[in] UINT SizeToLock, // 锁定的大小,0是全部
[out] VOID **ppbData, // 顶点缓存内存指针
[in] DWORD Flags // D3DLOCK 0/1个或者多个组合
);
UnLock()
Unlocks vertex data.