创建Device Vertex Buffer(顶点缓冲区)---顶点缓冲区包含每个顶点的数据

一、初始化静态顶点缓冲区

1、定义顶点数据结构,包含颜色、位置等数据

2、分配顶点数据内存

3、初始化D3D11_BUFFER_DESC 

4、初始化D3D11_SUBRESOURCE_DATA 

5、通过ID3D11Device::CreateBuffer 创建顶点数据

ID3D11Buffer* g_pVertexBuffer = nullptr;
// step1 define device vertex struct
struct SimpleVertexCombined
{
    XMFLOAT3 Pos;            // 位置
    XMFLOAT3 Col;            // 颜色
};

//  step2 分配内存并初始化
SimpleVertexCombined verticesCombo[] = 
{
    XMFLOAT3( 0.0f, 0.5f, 0.5f ),
    XMFLOAT3( 0.0f, 0.0f, 0.5f ),
    XMFLOAT3( 0.5f, -0.5f, 0.5f ),
    XMFLOAT3( 0.5f, 0.0f, 0.0f ),
    XMFLOAT3( -0.5f, -0.5f, 0.5f ),
    XMFLOAT3( 0.0f, 0.5f, 0.0f ),
};

// step3 初始化D3D11_BUFFER_DESC
D3D11_BUFFER_DESC bufferDesc;
bufferDesc.Usage = D3D11_USAGE_DEFAULT;
bufferDesc.ByteWidth = sizeof(SimpleVertexCombined) * 3;
bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bufferDesc.CPUAccessFlags = 0;
bufferDesc.MiscFlags = 0;

// step4 初始化D3D11_SUBRESOURCE_DATA
D3D11_SUBRESOURCE_DATA initData;
initData.pSysMem = verticesCombo;
initData.SysMemPitch = 0;
initData.SysMemSlicePitch = 0;

// step5 creatBuffer
hr = g_pd3dDevice->CreateBuffer(&bufferDesc, &initData, &g_pVertexBuffer);

二、创建动态顶点数据

1、使用D3D11_USAGE_STAGING创建第二个缓冲区,通过ID3D11DeviceContext::Map, ID3D11DeviceContext::Unmap 填充
   通过ID3D11DeviceContext :: CopyResource 复制到人默认缓冲区
   
2、ID3D11DeviceContext::UpdateSubresource 从内存拷贝数据

3、通过 D3D11_USAGE_DYNAMIC,创建一个缓冲区,通过ID3D11DeviceContext::Map, ID3D11DeviceContext::Unmap 填充

#1和#2对于每帧变化少于一次的内容很有用。 通常,GPU读取速度很快,而CPU更新速度则较慢。
#3对于每帧更改一次以上的内容很有用。 通常,GPU读取速度较慢,但CPU更新速度较快。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值