这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的心得体会,有任何GPU相关的问题都可以在评论区互动,知无不言:
DirectX12 Spec 总目录
// 自定义Vertex结构体
struct MyVertex
{
XMFLOAT3 Pos;
XMFLOAT4 Color;
}
// 自定义Ver0/1/2数据
Vertex vertices[] =
{
// Ver0
{ XMFLOAT3(0.0f, 0.0f, 0.0f), XMFLOAT4(Colors::Red) },
// Ver1
{ XMFLOAT3(1.0f, 1.0f, 0.0f), XMFLOAT4(Colors::Blue) },
// Ver2
{ XMFLOAT3(2.0f, 0.0f, 0.0f), XMFLOAT4(Colors::Yellow) },
};
// 创建好Vertex Buffer Resource, 并将vertices中的数据copy到VertexBuffer中
ComPtr<ID3D12Resource> VertexBuffer = ...
// 调用IASetVertexBuffers()设置Vertex Buffer
IASetVertexBuffers()
// VBV结构体参数
typedef struct D3D12_VERTEX_BUFFER_VIEW {
D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
UINT SizeInBytes;
UINT StrideInBytes;
} D3D12_VERTEX_BUFFER_VIEW;
// 结合我们前面定义的MyVertex结构体,我们可以这样填写VBV参数
D3D12_VERTEX_BUFFER_VIEW vbv = { 0 };
vbv.BufferLocation = VertexBuffer->GetGPUVirtualAddress();
vbv.StrideInBytes = sizeof(MyVertex);
vbv.SizeInBytes = 3 * sizeof(MyVertex);
// 最后我们可以把填写好的VBV指定到IA中,其包含了Vertex Buffer的所有信息
D3D12_VERTEX_BUFFER_VIEW vbvArray[1] = { vbv };
IASetVertexBuffers(0, 1, vbvArray);