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) 。 例如,将常量缓冲区绑定到管道 (通过 PSSetConstantBuffersPSSetConstantBuffers1) 时,可以定义着色器可以访问的缓冲区范围,该范围符合 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

另请参阅

ID3D11Device