Freigeben über


ID3D11DeviceContext::OMSetRenderTargets-Methode (d3d11.h)

Binden Sie ein oder mehrere Renderziele atomar und den Tiefenschablonenpuffer an die Output-Merger-Phase.

Syntax

void OMSetRenderTargets(
  [in]           UINT                   NumViews,
  [in, optional] ID3D11RenderTargetView * const *ppRenderTargetViews,
  [in, optional] ID3D11DepthStencilView *pDepthStencilView
);

Parameter

[in] NumViews

Typ: UINT

Anzahl der zu bindenden Renderziele (Bereich zwischen 0 und D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT). Wenn dieser Parameter nichtzero ist, muss die Anzahl der Einträge im Array, auf das ppRenderTargetViews verweist, der Zahl in diesem Parameter entsprechen.

[in, optional] ppRenderTargetViews

Typ: ID3D11RenderTargetView*

Zeiger auf ein Array von ID3D11RenderTargetView , das die Renderziele darstellt, die an das Gerät gebunden werden sollen. Wenn dieser Parameter NULL und NumViews 0 ist, sind keine Renderziele gebunden.

[in, optional] pDepthStencilView

Typ: ID3D11DepthStencilView*

Zeiger auf eine ID3D11DepthStencilView , die die Tiefenschablonenansicht darstellt, die an das Gerät gebunden werden soll. Wenn dieser Parameter NULL ist, ist die Tiefenschablonenansicht nicht gebunden.

Rückgabewert

Keine

Bemerkungen

Die maximale Anzahl aktiver Renderziele, die ein Gerät zu einem bestimmten Zeitpunkt aktiv haben kann, wird von einem #define in D3D11.h mit dem Namen D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT festgelegt. Es ist ungültig, zu versuchen, dieselbe Unterquelle auf mehrere Renderzielslots festzulegen. Alle Renderziele, die nicht durch diesen Aufruf definiert werden, werden auf NULL festgelegt.

Wenn alle Unterressourcen derzeit auch für das Lesen in einer anderen Phase oder in einer anderen Schreibphase gebunden sind (möglicherweise in einem anderen Teil der Pipeline), werden diese Bindungspunkte auf NULL festgelegt, um zu verhindern, dass dieselbe Unterquelle gleichzeitig in einem einzelnen Renderingvorgang gelesen und geschrieben wird.

Die -Methode enthält einen Verweis auf die übergebenen Schnittstellen. Dies unterscheidet sich vom Gerätestatusverhalten in Direct3D 10.

Wenn die Renderzielsichten aus einem Arrayressourcentyp erstellt wurden, müssen alle Renderzielsichten die gleiche Arraygröße aufweisen.
Diese Einschränkung gilt auch für die Tiefenschablonenansicht. Ihre Arraygröße muss mit der größe der gebundenen Renderzielsichten übereinstimmen.

Der Pixel-Shader muss in der Lage sein, gleichzeitig auf mindestens acht separaten Renderzielen zu rendern. Alle diese Renderziele müssen auf denselben Ressourcentyp zugreifen: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture2DArray, Texture3D oder TextureCube. Alle Renderziele müssen in allen Dimensionen (Breite und Höhe und Tiefe für 3D oder Arraygröße für *Arraytypen) die gleiche Größe aufweisen. Wenn Renderziele Multisampel-Antialiasing verwenden, müssen alle gebundenen Renderziele und der Tiefenpuffer dieselbe Form von Multisampleressourcen sein (d. a. die Stichprobenanzahl muss identisch sein). Jedes Renderziel kann ein anderes Datenformat aufweisen. Diese Renderzielformate müssen nicht identische Bit-pro-Element-Anzahl aufweisen.

Jede Kombination der acht Slots für Renderziele kann ein Renderziel festlegen oder nicht festlegen.

Dieselbe Ressourcenansicht kann nicht gleichzeitig an mehrere Renderzielslots gebunden werden. Sie können jedoch mehrere nicht überlappende Ressourcensichten einer einzelnen Ressource als gleichzeitige mehrere Renderziele festlegen.

Beachten Sie, dass im Gegensatz zu einigen anderen Ressourcenmethoden in Direct3D alle derzeit gebundenen Renderziele durch Aufrufen OMSetRenderTargets(0, nullptr, nullptr);von ungebunden werden.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d11.h
Bibliothek D3D11.lib

Weitere Informationen

ID3D11DeviceContext