Das Vulkan-API: Teil 2: Wie man ein Framework erstellt und Shader programmiert
()
About this ebook
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.
Read more from Alexander Rudolph
Das Vulkan-API: Teil 1: Grundlagen und erste Schritte Rating: 0 out of 5 stars0 ratingsDas Vulkan-API: Teil 3: Umgang mit 3-D-Daten Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: Moderne Licht- und Schattenspiele mit OpenGL Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: Minecraft-Welten erschaffen Teil 2 Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: Minecraft-Welten erschaffen Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL in Space Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: Water-, Terrain- und GUI-Rendering mit OpenGL Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratings
Related to Das Vulkan-API
Titles in the series (100)
Skalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsTFS 2012 Anforderungsmanagement: Work Items und Prozessvorlagen Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5Erfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsHTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsBig Data: Executive Briefing Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Rating: 0 out of 5 stars0 ratingsQualitätssicherung mit JavaScript und PHP Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsAgile Architektur mit .NET - Grundlagen und Best Practices Rating: 0 out of 5 stars0 ratingsPaaS - Die wichtigsten Java Clouds auf einen Blick: Die wichtigsten Java Clouds auf einen Blick Rating: 0 out of 5 stars0 ratingsUX Design für Tablet-Websites: Ein Überblick Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsBusiness-Intelligence-Lösungen für Unternehmen Rating: 0 out of 5 stars0 ratingsBig Data: Technologiegrundlagen Rating: 0 out of 5 stars0 ratingsBPM: Strategien und Anwendungsfälle Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsTFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsJava FX - Status Quo: Status Quo Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsMobile Business: Was Entscheider morgen wissen müssen Rating: 0 out of 5 stars0 ratings
Related ebooks
Erfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsSprachenkompendium: Vala, Go und Rust Rating: 0 out of 5 stars0 ratingsJava FX - Status Quo: Status Quo Rating: 0 out of 5 stars0 ratingsASP.NET Core: Eine Einführung Rating: 0 out of 5 stars0 ratingsPowerShell: Grundlagen für .NET-Entwickler Rating: 0 out of 5 stars0 ratingsSoftware Development Trends: Wegweisende Beiträge für eine neue IT: Wegweisende Beiträge für eine neue IT Rating: 0 out of 5 stars0 ratingsWebentwicklung mit dem Play Framework Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsEinblicke in C# 6.0 Rating: 0 out of 5 stars0 ratingsSimulation technischer Prozesse mit LabVIEW: Kompendium Simulation und Regelung technischer Prozesse, Teil 6 Rating: 0 out of 5 stars0 ratingsNebenläufigkeit in Java und C++ Rating: 0 out of 5 stars0 ratingsArduino: Mikrocontroller-Programmierung mit Arduino/Freeduino Rating: 0 out of 5 stars0 ratingsStructr: Quelloffenes Daten-CMS auf Neo4j-Basis Rating: 0 out of 5 stars0 ratingsEnterprise Java Web Services Rating: 0 out of 5 stars0 ratingsDer Weg zum eigenen Roboter: Tipps, Tricks und kleine Projekte Rating: 0 out of 5 stars0 ratingsTraum vom intelligenten Zuhause - Band 2: Programmier-Ratgeber für LCN Pro Rating: 0 out of 5 stars0 ratingsAngular 2: Moderne Frontends für alle Plattformen entwickeln Rating: 0 out of 5 stars0 ratingsMit Scratch 3 programmieren lernen Rating: 0 out of 5 stars0 ratingsWeb Services mit Apache CXF: Schnell und einfach erklärt Rating: 0 out of 5 stars0 ratingsDocker: Webseiten mittels Containerarchitektur erstellen Rating: 3 out of 5 stars3/5Die Serverwelt von Node.js Rating: 0 out of 5 stars0 ratingsDas Java Memory Model: Überblick und Ausblick auf Java 9 Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratings.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsJavaFX Rendering & 3D Rating: 0 out of 5 stars0 ratingsAufsetzen, Testen und Betrieb einer Android-App Rating: 0 out of 5 stars0 ratingsMemory Leaks in Java Rating: 0 out of 5 stars0 ratingsDNX: Grundlagen, Design und Compile Time Rating: 0 out of 5 stars0 ratings
Programming For You
Weniger schlecht programmieren Rating: 4 out of 5 stars4/5Python kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5JavaScript kurz & gut Rating: 3 out of 5 stars3/5C++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsLinux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsGit kurz & gut Rating: 0 out of 5 stars0 ratingsSQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Linux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Rating: 0 out of 5 stars0 ratingsProgrammieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5Mikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsDie ultimative QNAP NAS Bibel - Das Praxisbuch - mit vielen Insider Tipps und Tricks - komplett in Farbe Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsEinstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratingsGames | Game Design | Game Studies: Eine Einführung (Deutschsprachige Ausgabe) Rating: 0 out of 5 stars0 ratingsJava 8 - Die Neuerungen: Lambdas, Streams, Date and Time API und JavaFX 8 im Überblick Rating: 0 out of 5 stars0 ratingsPerspektiven für Informatiker 2019: Branchenüberblick, Erfahrungsberichte und Tipps zum Berufseinstieg Rating: 0 out of 5 stars0 ratingsArduino: Ein schneller Einstieg in die Microcontroller-Entwicklung Rating: 5 out of 5 stars5/5SQL – kurz & gut Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsDocker: Webseiten mittels Containerarchitektur erstellen Rating: 3 out of 5 stars3/5C++: Kurzportträt einer zeitlosen Sprache Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5Python programmieren lernen: Der spielerische Einstieg mit Minecraft Rating: 0 out of 5 stars0 ratingsMicrosoft Word 2016 (Microsoft Press): Einfache Anleitungen für wichtige Aufgaben Rating: 0 out of 5 stars0 ratings
Reviews for Das Vulkan-API
0 ratings0 reviews
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