METODE ID3D12Device::CreateDescriptorHeap (d3d12.h)

Membuat objek timbunan deskriptor.

Sintaks

HRESULT CreateDescriptorHeap(
  [in]  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
        REFIID                           riid,
  [out] void                             **ppvHeap
);

Parameter

[in] pDescriptorHeapDesc

Jenis: const D3D12_DESCRIPTOR_HEAP_DESC*

Penunjuk ke struktur D3D12_DESCRIPTOR_HEAP_DESC yang menjelaskan timbunan.

riid

Jenis: REFIID

Pengidentifikasi unik global (GUID) untuk antarmuka timbunan deskriptor. Lihat Keterangan. Parameter input.

[out] ppvHeap

Jenis: batal**

Penunjuk ke blok memori yang menerima penunjuk ke timbunan deskriptor. ppvHeap dapat berupa NULL, untuk mengaktifkan pengujian kemampuan. Ketika ppvHeap adalah NULL, tidak ada objek yang akan dibuat dan S_FALSE akan dikembalikan ketika pDescriptorHeapDesc valid.

Nilai kembali

Jenis: HRESULT

Metode ini mengembalikan E_OUTOFMEMORY jika memori tidak cukup untuk membuat objek heap deskriptor. Lihat Kode Pengembalian Direct3D 12 untuk kemungkinan nilai pengembalian lainnya.

Keterangan

REFIID, atau GUID, antarmuka ke timbunan deskriptor dapat diperoleh dengan menggunakan makro __uuidof(). Misalnya, __uuidof(ID3D12DescriptorHeap) akan mendapatkan GUID antarmuka ke tumpukan deskriptor.

Contoh

Sampel D3D12HelloWorld menggunakan ID3D12Device::CreateDescriptorHeap sebagai berikut:

Menjelaskan dan membuat timbunan deskriptor tampilan target render (RTV).

// Create descriptor heaps.
{
    // Describe and create a render target view (RTV) descriptor heap.
    D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc = {};
    rtvHeapDesc.NumDescriptors = FrameCount;
    rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
    rtvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
    ThrowIfFailed(m_device->CreateDescriptorHeap(&rtvHeapDesc, IID_PPV_ARGS(&m_rtvHeap)));

    m_rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
}

// Create frame resources.
{
    CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart());

    // Create a RTV for each frame.
    for (UINT n = 0; n < FrameCount; n++)
    {
        ThrowIfFailed(m_swapChain->GetBuffer(n, IID_PPV_ARGS(&m_renderTargets[n])));
        m_device->CreateRenderTargetView(m_renderTargets[n].Get(), nullptr, rtvHandle);
        rtvHandle.Offset(1, m_rtvDescriptorSize);
    }

Lihat Contoh Kode dalam Referensi D3D12.

Persyaratan

   
Target Platform Windows
Header d3d12.h
Pustaka D3D12.lib
DLL D3D12.dll

Lihat juga

ID3D12Device