Ressourcen (Direct3D 10)

Eine Ressource ist ein Bereich im Speicher, auf den von der Direct3D-Pipeline zugegriffen werden kann. Damit die Pipeline effizient auf den Arbeitsspeicher zugreifen kann, müssen Daten, die für die Pipeline bereitgestellt werden (z. B. Eingabegeometrie, Shaderressourcen, Texturen usw.) in einer Ressource gespeichert werden. Es gibt zwei Arten von Ressourcen, aus denen alle Direct3D-Ressourcen abgeleitet sind: Puffer und Textur. Für jede Pipelinephase können bis zu 128 Ressourcen aktiv sein.

Jede Anwendung erstellt in der Regel viele Ressourcen. Beispiele für Ressourcen sind: Vertexpuffer, Indexpuffer, Konstantenpuffer, Texturen und Shaderressourcen. Es gibt mehrere Optionen, die bestimmen, wie Ressourcen verwendet werden können. Sie können Ressourcen erstellen, die stark typisiert oder weniger typisiert sind. Sie können steuern, ob Ressourcen sowohl Lese- als auch Schreibzugriff haben. Sie können Ressourcen nur für die CPU, gpu oder beide zugänglich machen. Natürlich gibt es einen Kompromiss zwischen Geschwindigkeit und Funktionalität. Je mehr Funktionalität Sie einer Ressource erlauben, desto weniger Leistung sollten Sie erwarten.

Da eine Anwendung häufig viele Texturen verwendet, führt Direct3D auch das Konzept eines Texturarrays ein, um die Texturverwaltung zu vereinfachen. Ein Texturarray enthält mindestens eine Textur (alle vom gleichen Typ und denselben Dimensionen), die innerhalb einer Anwendung oder durch Shader indiziert werden können. Mit Texturarrays können Sie eine einzelne Schnittstelle mit mehreren Indizes verwenden, um auf viele Texturen zuzugreifen. Sie können beliebig viele Texturarrays erstellen, um verschiedene Texturtypen zu verwalten.

Nachdem Sie die von Der Anwendung verwendeten Ressourcen erstellt haben, stellen Sie eine Verbindung zwischen den einzelnen Ressourcen her oder binden sie an die Pipelinephasen, in denen sie verwendet werden. Dies wird durch Aufrufen einer Bindungs-API erreicht, die einen Zeiger auf die Ressource annimmt. Da möglicherweise mehrere Pipelinephasen Zugriff auf dieselbe Ressource benötigen, führt Direct3D 10 das Konzept einer Ressourcenansicht ein. Eine Ansicht identifiziert den Teil einer Ressource, auf den zugegriffen werden kann. Sie können m-Ansichten oder eine Ressource erstellen und sie an n Pipelinephasen binden, vorausgesetzt, Sie befolgen bindungsregeln für freigegebene Ressourcen (wenn dies nicht der Fall ist, generiert die Runtime Fehler zur Kompilierzeit).

Eine Ressourcenansicht bietet ein allgemeines Modell für den Zugriff auf eine Ressource (Texturen, Puffer usw.). Da Sie eine Ansicht verwenden können, um der Laufzeit mitzuteilen, auf welche Daten zugegriffen werden soll und wie darauf zugegriffen werden soll, können Sie mit Ressourcensichten typär weniger Ressourcen erstellen. Das heißt, Sie können zur Kompilierzeit Ressourcen für eine bestimmte Größe erstellen und dann den Datentyp innerhalb der Ressource deklarieren, wenn die Ressource an die Pipeline gebunden wird. Ansichten machen viele neue Funktionen für die Verwendung von Ressourcen verfügbar, z. B. die Möglichkeit, Tiefen-/Schablonenoberflächen im Shader zurückzulesen, dynamische Cubemaps in einem einzigen Durchlauf zu generieren und gleichzeitig in mehreren Slices eines Volumes zu rendern.

Weitere Informationen zu den grundlegenden Ressourcentypen, Texturarrays und zum Erstellen und Verwenden von Ressourcen finden Sie in den folgenden anderen Themen:

Programmierhandbuch für Direct3D 10