顶点缓存
声明变量LPDIRECT3DVERTEXBUFFER9 g_vertexBuffer = NULL;
设计顶点结构struct d3dVertex
{
float x, y, z, rhw; //经过变换的坐标
unsigned long color; //颜色
};
//(FVF)灵活的顶点格式
填充顶点结构//设置d3d格式的白色颜色
unsigned long col = D3DCOLOR_XRGB(255, 255, 255);
//写入数组
d3dVertex objData[] =
{
{ 420, 150, 0.5f, 1, col },
{ 420, 350, 0.5f, 1, col },
{ 220, 150, 0.5f, 1, col },
{ 220, 350, 0.5f, 1, col },
};
创建顶点缓存//创建顶点缓存(顶点缓存的大小,无附加属性,顶点格式,默认(顶点缓存存在显存中),把结果存到顶点缓存指针,基本为null)
if (FAILED(g_pd3dDevice->CreateVertexBuffer(sizeof(objData),0,d3dfvf_vertex,D3DPOOL_DEFAULT,&g_vertexBuffer,NULL)))
{
return FALSE;
}
访问顶点缓存void *ptr;
//加锁处理(内存起始位置到加锁位置的偏移量,加锁区域大小,加锁对象指针,无加锁方式)
if (FAILED(g_vertexBuffer->Lock(0, sizeof(objData), (void**)&ptr, 0)))
return FALSE;
//将objData内容复制到ptr地址
memcpy(ptr, objData, sizeof(objData));
//解锁处理
g_vertexBuffer->Unlock();
绘制顶点//顶点缓存关联渲染流水线(不指定与该顶点缓存相关联的数据流,包含顶点数据的顶点缓存指针,无偏移量,顶点结构大小)
g_pd3dDevice->SetStreamSource(0, g_vertexBuffer, 0, sizeof(d3dVertex));
//指定灵活顶点格式
g_pd3dDevice->SetFVF(d3dfvf_vertex);
//图形绘制(线列模式,从位置0开始读取顶点缓存,绘制2个图元)
g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST, 0, 2);
运行结果: