一个顶点缓存是储存有顶点数据的连续空间,一个索引缓存是储存有索引数据的连续空间,使用顶点缓存和索引缓存来表示相关的数据,而不使用数组来表示的原因是因为:顶点缓存和索引缓存储存在显存中,在处理的时候能够获得比系统内存更快的处理速度。
在代码中,顶点缓存使用的接口IDirectorVertexBuffer9表示,索引缓存使用的是IDirectorIndexBuffer9表示。
创建顶点缓存和索引缓存
创建顶点缓:
HRESULT IDirect3DDevice9::CreateVertexBuffer(
UINT Length,
DWORD Usage,
DWORD FVF,
D3DPOOL Pool,
IDirect3DVertexBuffer9** ppVertexBuffer,
HANDLE* pSharedHandle
);
创建索引缓存:
HRESULT IDirect3DDevice9::CreateIndexBuffer(
UINT Length;
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
IDirect3DIndexBuffer9** ppIndexBuffer,
HANDLE* pShareHandle
);
有一些参数是相同的,放在一起解释:
Length:为缓存分配的字节数,如果你想让缓存能够储存5个顶点,那么就需要给Length赋值:5 * sizeof(Vertex),其中Vertex是我们定义的顶点的结构体
Usage:指定使用顶点的一些附加属性,可以是0,也可以是下面的属性中的一个或者多个的结合
D3DUSAGE_DYNAMIC:将缓存设置为动态缓存,默认的是静态缓存
D3DUSAGE_POINTS:该标记规定缓存用来储存点图元,仅仅适用于顶点缓存
D3DUSAGE_SOFTWAREPROCESSING:指定顶点软件运算方式
D3DUSAGE_WRITEONLY:规定应用程序对软件的操作模式是“只写”的,这样驱动程序就可以将缓存放在最适合写操作的内存地址中去,注意:对使用该操作的缓存进行“读”操作的时候会出错
Pool:内存池的类型
pShareHandle:微软文档中给的意思,貌似这个参数是用于Windows Vista,用来共享资源的,我们不适用时设置成NULL,就很稳健
CreateVertexBuffer9中的参数解释:
FVF:顶点的灵活顶点格式
ppVertexBuffer:执行接收顶点缓存地址的指针(也就是传说中的二级指针)
CreateIndexBuffer9中的参数解释:
Format:指定索引的大小,有两哥固定的选择:D3DFMT_INDEX16和D3DFMT_INDEX32,分别表示16位索引和32位索引,但