Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Das Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert
Das Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert
Das Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert
Ebook102 pages41 minutes

Das Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Bevor das neue plattformunabhängige Grafik-API Vulkan seinen explosiven Namen erhielt, wurde es in Fachkreisen schlicht als "OpenGL Next" bezeichnet. Und die Verwandtschaft zwischen den beiden APIs ist nicht abzustreiten, zumal beide die gleiche Sprache für die Shader-Programmierung verwenden: die OpenGL Shading Language (GLSL). Trotzdem werden Grafikprogrammierer schnell feststellen, dass Vulkan nicht nur deutlich mehr Möglichkeiten und Performance bietet als sein Vorgänger, sondern auch ungleich komplizierter in der Handhabung ist.
In seinem zweiten Vulkan-shortcut geht Alexander Rudolph auf genau diese Schwierigkeit ein, indem er den Leser über die Erstellung eines einfaches Frameworks in die wichtigsten Funktionen des Low-Level-APIs einführt. Im zweiten Schritt gibt er dann einen Überblick über verschiedene Shader-Typen und einen Einstieg in die GLSL-Programmierung für Vulkan.
LanguageDeutsch
Release dateFeb 5, 2018
ISBN9783868027662
Das Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert

Read more from Alexander Rudolph

Related to Das Vulkan-API

Titles in the series (100)

View More

Related ebooks

Programming For You

View More

Related articles

Reviews for Das Vulkan-API

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Das Vulkan-API - Alexander Rudolph

    GmbH

    1 Entwurf eines einfachen Frameworks

    Vulkan [1], [2], [3] bietet nie dagewesene Möglichkeiten und Freiheiten zum Preis einer im Vergleich zu OpenGL deutlich komplizierteren Handhabe. In Anbetracht dieser Tatsache dürfte es daher auch niemanden verwundern, dass die praktische Arbeit mit einem Low-Level-API wie Vulkan ohne Zuhilfenahme eines geeigneten Frameworks schnell zu einem mühevollen Unterfangen wird. Es gibt jedoch noch einen weiteren Grund, warum wir uns so früh wie möglich mit dem Entwurf eines eigenen Frameworks befassen sollten: In der Entwurfsphase können wir uns mit sämtlichen Aspekten des neuen Vulkan-API vertraut machen, ohne dass wir uns gleich in alle Details der zugrunde liegenden Programmabläufe einarbeiten müssen.

    Im ersten Teil dieser shortcut-Reihe haben wir uns mit den Voraussetzungen befasst, unter denen die neue Vulkan-Schnittstelle ihre Vorteile gegenüber dem mittlerweile etwas in die Jahre gekommenen OpenGL-API voll ausspielen kann. Vorbei sind die Zeiten, in denen bei der Entwicklung einer Grafikanwendung sämtliche mit OpenGL in Verbindung stehende Programmabläufe innerhalb eines einzigen Threads implementiert werden mussten. Rendering-Operationen, Buffer- und Ressourcenupdates (Austausch der nicht mehr benötigten Texturen und 3-D-Modelle) sowie die mitunter erforderlichen Compute-Shader-basierten Berechnungen lassen sich im Verlauf der Vulkan-Programmentwicklung im Prinzip auf eine beliebig große Anzahl von Threads aufteilen. Damit die einzelnen Threads jedoch auch wirklich parallel zueinander ausgeführt werden können, muss man als Entwickler dafür Sorge tragen, dass sich die Anzahl der Threads an die jeweils zur Verfügung stehende Hardware anpassen lässt.

    Doch auch an dieser Stelle ist Vorsicht geboten: In der Theorie ist es zwar korrekt, dass beispielsweise auf einer 8-Kern-CPU acht Threads parallel ausgeführt werden können, allerdings sollte man stets in Erinnerung behalten, dass sowohl das Betriebssystem als auch weitere Anwendungen ein gewisses Maß an Rechenzeit für sich selbst in Anspruch nehmen. Darüber hinaus ist es zwingend erforderlich, eine mehr oder weniger große Zahl von Threads für Programmabläufe zu reservieren, die zwar nichts mit der eigentlichen grafischen Darstellung zu tun haben, für deren Ausführung jedoch innerhalb des Hauptprogrammthreads schlicht zu wenig Zeit zur Verfügung steht. Hierzu zählen unter anderem KI-Berechnungen, Physiksimulationen, Kollisionsberechnungen, mögliche Interaktionen mit der Spielewelt, die Musik-, Sound- und Sprachausgabe oder die prozedurale Generierung der Spielewelt.

    Das Vulkan-API bietet uns darüber hinaus auch die Möglichkeit, die Kommunikation zwischen der CPU und der GPU (der Grafikkarte) an die jeweiligen Anforderungen einer Grafikanwendung anzupassen. Im einfachsten Fall erfolgt die komplette Kommunikation (Rendering-Operationen, Buffer- und Ressourcenupdates sowie Compute-Shader-basierte Berechnungen) über ein einziges VkQueue-Objekt. Das hat jedoch den offenkundigen Nachteil, dass sich die anstehenden Arbeitsanweisungen nur sequenziell an die Grafikkarte übermitteln lassen. Nichtsdestotrotz sollte diese Variante in allen Vulkan-Anwendungen standardmäßig implementiert werden, weil sich hierdurch die Kompatibilität mit sämtlichen Vulkan-fähigen Grafikkarten gewährleisten lässt. Hinweis: Nvidia-Karten unterstützen beispielsweise im Gegensatz zu ihren AMD-Pendants die parallele Verwendung von mehreren Grafik- bzw. Rendering-Queues. Die Verwendung von drei unterschiedlichen Queue-Objekten stellt indes den bestmöglichen Kompromiss zwischen Performance (gleichbleibend hohe Frameraten) auf der einen und Kompatibilität auf der anderen Seite dar. Hierbei ist Queue Nr. 1 für die Durchführung der Rendering-Operationen, Queue Nr. 2 für die Buffer- und Ressourcenupdates und Queue Nr. 3 für die Ausführung der Compute-Shader-basierten Berechnungen zuständig.

    Was das Vulkan-API betrifft, so zeichnet es sich leider nicht durch besondere Einsteigerfreundlichkeit aus, was nicht zuletzt an der Vielzahl der unterschiedlichen Datentypen (Strukturen und Enums) liegt, die bei praktisch allen Funktionsaufrufen als Parameter zu berücksichtigen sind. Erschwerend kommt hinzu, dass man sich im Unterschied zu OpenGL bzw. zu früheren DirectX-Versionen nun auch um die Synchronisierung sämtlicher Programmabläufe – z. B. um die korrekte Abfolge der Compute-Shader-basierten Berechnungen und Rendering-Schritte – sowie um das komplette Speichermanagement zu kümmern hat. Dazu gehören etwa das Anfordern, Aufteilen und wieder Freigeben von Speicherplatz, das Festlegen des jeweiligen Speicherverwendungszwecks und das Durchführen des Datentransfers zwischen CPU- und GPU-Speicher mithilfe von temporär erzeugten Staging-Buffer-Objekten. Aufgrund der großen Zahl der damit einhergehenden API-Funktionsaufrufe tendiert der

    Enjoying the preview?
    Page 1 of 1