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_BUFFER_DESCBindFlags设置为 D3D11_BIND_CONSTANT_BUFFER) 的常量缓冲区 (,必须将 byteWidth 值设置为 D3D11_BUFFER_DESC 16 的倍数,并且小于或等于 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 |