ID3D11Device::CreateBuffer 方法 (d3d11.h)
(顶点缓冲区、索引缓冲区或着色器常量缓冲区) 创建缓冲区。
语法
HRESULT CreateBuffer(
[in] const D3D11_BUFFER_DESC *pDesc,
[in, optional] const D3D11_SUBRESOURCE_DATA *pInitialData,
[out, optional] ID3D11Buffer **ppBuffer
);
参数
[in] pDesc
类型: const D3D11_BUFFER_DESC*
指向 描述缓冲区的D3D11_BUFFER_DESC 结构的指针。
[in, optional] pInitialData
类型: const D3D11_SUBRESOURCE_DATA*
指向描述初始化数据的D3D11_SUBRESOURCE_DATA结构的指针;使用 NULL 仅 (分配空间,但使用标志D3D11_USAGE_IMMUTABLE) 时不能为 NULL。
如果未将任何内容传递给 pInitialData,则未定义缓冲区内存的初始内容。 在这种情况下,需要在读取资源之前以某种方式写入缓冲区内容。
[out, optional] ppBuffer
类型: ID3D11Buffer**
指向创建的缓冲区对象的 ID3D11Buffer 接口的指针的地址。 将此参数设置为 NULL 以验证 (S_FALSE 指示传递) 的其他输入参数。
返回值
类型: HRESULT
如果内存不足而无法创建缓冲区,此方法将返回 E_OUTOFMEMORY 。 有关其他可能的返回值,请参阅 Direct3D 11 返回代码 。
注解
有关示例代码,请参阅 如何:创建顶点缓冲区、 如何:创建索引缓冲区 或 如何:创建常量缓冲区。
对于设置为D3D11_BIND_CONSTANT_BUFFER) D3D11_BUFFER_DESC的常量缓冲区 (BindFlags,必须在 16 的倍数中设置 D3D11_BUFFER_DESC 的 ByteWidth 值,并且小于或等于 D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT。
Direct3D 11.1 运行时(适用于 Windows 8 及更高版本的操作系统)为 CreateBuffer 提供以下新功能:
可以创建一个大于着色器可以访问的最大常量缓冲区大小的常量缓冲区, (4096 32 位*4 组件常量 – 64KB) 。 例如,通过 PSSetConstantBuffers 或 PSSetConstantBuffers1) 将常量缓冲区绑定到管道 (时,可以定义着色器可以访问的缓冲区范围,该缓冲区符合 4096 常量限制。
Direct3D 11.1 运行时 (在Windows 8及更高版本的操作系统中) 模拟此功能,适用于功能级别 9.1、9.2 和 9.3;因此,此功能支持功能级别 9.1、9.2 和 9.3。
此功能始终可用于功能级别 10 及更高级别的新驱动程序。
在早于 Direct3D 11.1 的运行时,调用 CreateBuffer 请求大于 4096 的常量缓冲区失败。
要求
目标平台 | Windows |
标头 | d3d11.h |
Library | D3D11.lib |